From 27d73c0592a76fc4e8160fbfe928197fd877c72c Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 00:50:12 +0200 Subject: [PATCH 01/76] fix: update fceumm core's patch The upstream code changed enough that our existing patch can't find the hunk. I updated it to it builds now. --- workspace/tg5040/cores/patches/fceumm.patch | 5 ++--- workspace/tg5050/cores/patches/fceumm.patch | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/workspace/tg5040/cores/patches/fceumm.patch b/workspace/tg5040/cores/patches/fceumm.patch index 2131c17be..92e8343ec 100644 --- a/workspace/tg5040/cores/patches/fceumm.patch +++ b/workspace/tg5040/cores/patches/fceumm.patch @@ -1,10 +1,9 @@ diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro -index 036c41f48b087c99b2276b2d41a71d661fd85145..891eb96ceeb1da868d6d2ed40392b51b65dcbb20 100644 +index 5b90d409271332a48ae726dca48a712c3be413be..02958b2d0e6612539ae4545df7bb28a8395c060e 100644 --- forkSrcPrefix/Makefile.libretro +++ forkDstPrefix/Makefile.libretro -@@ -461,6 +461,23 @@ else ifeq ($(platform), miyoo) +@@ -458,5 +458,22 @@ else ifeq ($(platform), miyoo) PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s - EXTERNAL_ZLIB = 1 +# TRIMUI SMART PRO +else ifeq ($(platform), tg5040) diff --git a/workspace/tg5050/cores/patches/fceumm.patch b/workspace/tg5050/cores/patches/fceumm.patch index c4f8e1ddb..8ed07e929 100644 --- a/workspace/tg5050/cores/patches/fceumm.patch +++ b/workspace/tg5050/cores/patches/fceumm.patch @@ -1,10 +1,9 @@ diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro -index 036c41f48b087c99b2276b2d41a71d661fd85145..891eb96ceeb1da868d6d2ed40392b51b65dcbb20 100644 +index 5b90d409271332a48ae726dca48a712c3be413be..cbdaf093812ebe934b915e9087e7f8518f45a611 100644 --- forkSrcPrefix/Makefile.libretro +++ forkDstPrefix/Makefile.libretro -@@ -461,6 +461,23 @@ else ifeq ($(platform), miyoo) +@@ -458,5 +458,22 @@ else ifeq ($(platform), miyoo) PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s - EXTERNAL_ZLIB = 1 +# target platform tg5050 trimUI smart pro s +else ifeq ($(platform), tg5050) From e085c0dd6e6e4e16b26b51796b0f5cf576eb8c21 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 11:54:15 +0200 Subject: [PATCH 02/76] fix: update mGBA core build --- workspace/tg5040/cores/makefile | 4 +++ workspace/tg5040/cores/patches/mgba.patch | 31 ----------------------- workspace/tg5050/cores/makefile | 4 +++ workspace/tg5050/cores/patches/mgba.patch | 31 ----------------------- 4 files changed, 8 insertions(+), 62 deletions(-) delete mode 100644 workspace/tg5040/cores/patches/mgba.patch delete mode 100644 workspace/tg5050/cores/patches/mgba.patch diff --git a/workspace/tg5040/cores/makefile b/workspace/tg5040/cores/makefile index a224ff179..9eeb5dd9d 100755 --- a/workspace/tg5040/cores/makefile +++ b/workspace/tg5040/cores/makefile @@ -67,6 +67,10 @@ gambatte_REPO = https://github.com/libretro/gambatte-libretro mednafen_supafaust_REPO = https://github.com/libretro/supafaust +# mGBA replaced Makefile.libretro with a CMake-based libretro build. +mgba_CORE = build-tg5040/mgba_libretro.so +mgba_MAKE = cmake -S . -B build-tg5040 -DCMAKE_BUILD_TYPE=Release -DLIBMGBA_ONLY=ON -DBUILD_LIBRETRO=ON -DLIBRETRO_STATIC=OFF -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=$(CROSS_COMPILE)gcc -DCMAKE_CXX_COMPILER=$(CROSS_COMPILE)g++ -DCMAKE_C_FLAGS="-fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -fno-common -ftree-vectorize -funswitch-loops" -DCMAKE_CXX_FLAGS="-fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -fno-common -ftree-vectorize -funswitch-loops" && cmake --build build-tg5040 --target mgba_libretro -- $(PROCS) + pcsx_rearmed_MAKEFILE = Makefile.libretro # pcsx has a disabled submodule for gnulib, which takes forever to check out and is unused - skil checkout pcsx_rearmed_SUBMODULES = frontend/libpicofe diff --git a/workspace/tg5040/cores/patches/mgba.patch b/workspace/tg5040/cores/patches/mgba.patch deleted file mode 100644 index b0145a5b3..000000000 --- a/workspace/tg5040/cores/patches/mgba.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro -index 108148f4579f4727146e5b8c1e05ef7382654208..35e6399147a4ef75947ecb2ad4a94f0820ef24d0 100644 ---- forkSrcPrefix/Makefile.libretro -+++ forkDstPrefix/Makefile.libretro -@@ -417,6 +417,26 @@ else ifeq ($(platform), miyoo) - CFLAGS += -fno-common -ftree-vectorize -funswitch-loops - DEFINES += -std=c99 - -+# TRIMUI SMART PRO -+else ifeq ($(platform), tg5040) -+ TARGET := $(TARGET_NAME)_libretro.so -+ CC = $(CROSS_COMPILE)gcc -+ CXX = $(CROSS_COMPILE)g++ -+ AR = $(CROSS_COMPILE)ar -+ SHARED := -shared -Wl,--version-script=link.T -+ fpic := -fPIC -+ PLATFORM_DEFINES += -D_GNU_SOURCE -DHAVE_STRTOF_L -DHAVE_LOCALE -+ CFLAGS += -fomit-frame-pointer -ffast-math -+ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -+ CFLAGS += -fno-common -ftree-vectorize -funswitch-loops -+ HAVE_NEON = 1 -+ ARCH = arm64 -+ BUILTIN_GPU = neon -+ CPU_ARCH := arm -+ MMAP_JIT_CACHE = 1 -+ HAVE_DYNAREC = 1 -+ DEFINES += -std=c99 -+ - # Windows - else - TARGET := $(TARGET_NAME)_libretro.dll diff --git a/workspace/tg5050/cores/makefile b/workspace/tg5050/cores/makefile index a224ff179..2cd263250 100755 --- a/workspace/tg5050/cores/makefile +++ b/workspace/tg5050/cores/makefile @@ -67,6 +67,10 @@ gambatte_REPO = https://github.com/libretro/gambatte-libretro mednafen_supafaust_REPO = https://github.com/libretro/supafaust +# mGBA replaced Makefile.libretro with a CMake-based libretro build. +mgba_CORE = build-tg5050/mgba_libretro.so +mgba_MAKE = cmake -S . -B build-tg5050 -DCMAKE_BUILD_TYPE=Release -DLIBMGBA_ONLY=ON -DBUILD_LIBRETRO=ON -DLIBRETRO_STATIC=OFF -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=$(CROSS_COMPILE)gcc -DCMAKE_CXX_COMPILER=$(CROSS_COMPILE)g++ -DCMAKE_C_FLAGS="-fomit-frame-pointer -ffast-math -mcpu=cortex-a55 -fno-common -ftree-vectorize -funswitch-loops" -DCMAKE_CXX_FLAGS="-fomit-frame-pointer -ffast-math -mcpu=cortex-a55 -fno-common -ftree-vectorize -funswitch-loops" && cmake --build build-tg5050 --target mgba_libretro -- $(PROCS) + pcsx_rearmed_MAKEFILE = Makefile.libretro # pcsx has a disabled submodule for gnulib, which takes forever to check out and is unused - skil checkout pcsx_rearmed_SUBMODULES = frontend/libpicofe diff --git a/workspace/tg5050/cores/patches/mgba.patch b/workspace/tg5050/cores/patches/mgba.patch deleted file mode 100644 index 31e8ce9b6..000000000 --- a/workspace/tg5050/cores/patches/mgba.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro -index 108148f4579f4727146e5b8c1e05ef7382654208..35e6399147a4ef75947ecb2ad4a94f0820ef24d0 100644 ---- forkSrcPrefix/Makefile.libretro -+++ forkDstPrefix/Makefile.libretro -@@ -417,6 +417,26 @@ else ifeq ($(platform), miyoo) - CFLAGS += -fno-common -ftree-vectorize -funswitch-loops - DEFINES += -std=c99 - -+# target platform tg5050 trimUI smart pro s -+else ifeq ($(platform), tg5050) -+ TARGET := $(TARGET_NAME)_libretro.so -+ CC = $(CROSS_COMPILE)gcc -+ CXX = $(CROSS_COMPILE)g++ -+ AR = $(CROSS_COMPILE)ar -+ SHARED := -shared -Wl,--version-script=link.T -+ fpic := -fPIC -+ PLATFORM_DEFINES += -D_GNU_SOURCE -DHAVE_STRTOF_L -DHAVE_LOCALE -+ CFLAGS += -fomit-frame-pointer -ffast-math -+ CFLAGS += -mcpu=cortex-a55 -+ CFLAGS += -fno-common -ftree-vectorize -funswitch-loops -+ HAVE_NEON = 1 -+ ARCH = arm64 -+ BUILTIN_GPU = neon -+ CPU_ARCH := arm -+ MMAP_JIT_CACHE = 1 -+ HAVE_DYNAREC = 1 -+ DEFINES += -std=c99 -+ - # Windows - else - TARGET := $(TARGET_NAME)_libretro.dll From e1d903160c6fa52beac1d2bb2421f256e0a5a8e9 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 15:48:05 +0200 Subject: [PATCH 03/76] docs: add h700 port plan Document the RG XX H700 port strategy, including verified device facts, build/toolchain choices, boot hijack layout, platform-layer hardware paths, media stack, power behavior, wireless strategy, and rollout validation criteria. This captures the implementation plan before the port work begins so the subsequent build and platform changes can be reviewed against a concrete hardware-backed baseline. --- docs/h700-port/00-device-facts.md | 190 +++++++++++++++++++++++ docs/h700-port/01-toolchain-and-build.md | 108 +++++++++++++ docs/h700-port/02-boot-and-installer.md | 135 ++++++++++++++++ docs/h700-port/03-platform-layer.md | 123 +++++++++++++++ docs/h700-port/04-video-display.md | 111 +++++++++++++ docs/h700-port/05-audio.md | 49 ++++++ docs/h700-port/06-power-sleep-battery.md | 87 +++++++++++ docs/h700-port/07-wifi-bluetooth.md | 65 ++++++++ docs/h700-port/08-testing-and-rollout.md | 85 ++++++++++ docs/h700-port/README.md | 87 +++++++++++ 10 files changed, 1040 insertions(+) create mode 100644 docs/h700-port/00-device-facts.md create mode 100644 docs/h700-port/01-toolchain-and-build.md create mode 100644 docs/h700-port/02-boot-and-installer.md create mode 100644 docs/h700-port/03-platform-layer.md create mode 100644 docs/h700-port/04-video-display.md create mode 100644 docs/h700-port/05-audio.md create mode 100644 docs/h700-port/06-power-sleep-battery.md create mode 100644 docs/h700-port/07-wifi-bluetooth.md create mode 100644 docs/h700-port/08-testing-and-rollout.md create mode 100644 docs/h700-port/README.md diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md new file mode 100644 index 000000000..ccb3e3447 --- /dev/null +++ b/docs/h700-port/00-device-facts.md @@ -0,0 +1,190 @@ +# 00 — Device & OS Facts (verified 2026-07-08) + +Everything in this document was verified live on the actual hardware over SSH, or +recovered from git history. Treat it as the ground truth the rest of the plan builds on. + +## Devices used + +| Device | IP | Login | Role | +|---|---|---|---| +| TrimUI Brick (TG5040, A133P) | 192.168.34.81 | root / tina | Reference — NextUI runs perfectly | +| Anbernic RG40XXV (H700) | 192.168.34.55 | root / root | Port target #1 (running stockmod) | +| Anbernic RG34XXSP (H700) | — | — | Port target #2 (clamshell, lid sensor) | +| Anbernic RG28XX (H700) | — | — | Port target #3 (rotated 480×640 panel, phase 2) | + +## RG40XXV (H700) — probed live + +### SoC / kernel / userland +- SoC: Allwinner H700, device-tree compatible: `allwinner,h616`, `arm,sun50iw9p1` +- `/proc/device-tree/model`: `sun50iw9` +- Kernel: `Linux ANBERNIC 4.9.170 #16 SMP PREEMPT aarch64` (built 2026-05-21 — latest stock) +- Userland: **Ubuntu 22.04 (Jammy) arm64, glibc 2.35** — full apt-capable distro +- RAM: 1 GB (`MemTotal: 996628 kB`) +- CPU: 4× Cortex-A53 (`CPU part 0xd03`), cpufreq 480 MHz – 1.512 GHz + - governors: `interactive conservative ondemand userspace powersave performance schedutil` + - policy path: `/sys/devices/system/cpu/cpu0/cpufreq/` (single policy0-style cluster) + +### Display +- `/dev/fb0`: 640×480 (virtual_size `640,480`); modes list includes `U:1280x1024p-59`, `U:640x480p-75`, `U:640x480p-59` (HDMI modes appear here) +- Allwinner **disp2** driver: `/dev/disp` char device present +- `/sys/class/disp/disp/attr/` contains: `color_temperature`, `enhance_bright`, `enhance_contrast`, `enhance_saturation`, `enhance_mode`, `xres`, `yres`, … — **near-identical attribute set to TG5040** (same disp2 driver family) +- `color_temperature` currently `0` +- **No `/sys/class/backlight`** — brightness is done via `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` (0x102), same as TG5040/old-rg35xxplus. There is also a `brightness` file under the AXP battery sysfs (currently `3`) used by the stock `brightCtrl.bin` daemon. +- Boot arg: `lcd_type=boe` (panel vendor in cmdline — may vary per unit) +- HDMI hotplug: `/sys/class/extcon/hdmi/` (extcon0). Old MinUI keymon used `/sys/class/extcon/hdmi/cable.0/state`, platform.c used `/sys/class/switch/hdmi/cable.0/state` — verify which exists on current firmware (extcon confirmed present). + +### GPU — fully verified ✔ +- Mali-G31 MP2 ("bifrost"), kernel module `mali_kbase` **r20p0-01rel0 (UK 11.17)**, `/dev/mali0` present +- Vendor blob: monolithic `/usr/lib/libmali.so.0.20.0` (19 MB) — **ELF 64-bit aarch64**; + `libEGL.so.1.4.0` / `libGLESv2.so.2.1.0` / `libGLESv1_CM.so` are 4 KB 64-bit shims over it +- Blob version string: **`OpenGL ES 3.2 v1.r20p0-01rel0`** — userspace r20p0 matches kernel kbase r20p0 ✔ +- Blob EGL winsys = **fbdev** (`mali_egl_winsys_fbdev.c` paths in binary) — exactly what the SDL mali-fbdev backend targets +- Stock `/usr/lib/libSDL2-2.0.so.0.12.0` is **64-bit and built with the `mali` video driver** (only `mali` + `dummy` compiled in) — the stock OS itself uses the SDL-on-mali-fbdev stack we plan to use; usable as a bring-up crutch before our own SDL 2.28+ build lands +- Mesa copies also exist under `/usr/lib/aarch64-linux-gnu/` (`libEGL_mesa.so`) — irrelevant on 4.9 kernel (no DRM), the blob is what works + +### Audio +- ALSA cards: `0 audiocodec` (speaker/lineout), `1 ahubdam`, `2 ahubhdmi` (HDMI audio) +- amixer simple controls on card 0: `'digital volume'`, `'lineout volume'`, `'LINEOUT'`, `'SPK'`, `'OutputL/R Mixer DACL/R'`, `'tx hub mode'` +- Old MinUI used `amixer sset 'lineout volume' %` — control still exists ✔ + +### Input +- `event0` — `axp2202-pek` (power button, PMIC) +- `event1` — `ANBERNIC-keys` (gpio-keys-polled): handlers `kbd js0 event1`; has KEY bits, ABS bits `0x3003c` (= ABS_Z, ABS_RX, ABS_RY, ABS_RZ + ABS_HAT0X/Y) and **FF bits (rumble via input FF!)** +- `event2` — `dierct-keys-polled` (volume keys, function keys) +- `/dev/input/js0` exists — the kernel already exposes the pad as a joystick +- `evtest` is available on the device for mapping discovery + +### Power / battery / sleep +- `/sys/power/state`: **`freeze mem`** — real suspend-to-RAM supported (same as TG5040) +- **Verified live: `echo mem` suspend works** (device suspended via `rtcwake -m mem`); RTC alarm wake did **not** fire (device stayed asleep) → power button is the wake source; treat RTC wake as unavailable +- PMIC: **AXP2202** — `/sys/class/power_supply/axp2202-battery/` and `axp2202-usb/` +- Battery: `capacity` (58 at probe time), `status` (`Charging`), `voltage_now`, `temp`, `time_to_empty_now`, `time_to_full_now`, `charge_counter`, `health` +- Anbernic's kernel exposes extra controls under `axp2202-battery/`: + - `moto` — rumble motor (old MinUI RUMBLE_PATH; write 1/0) + - `work_led` — power LED (0=on, 1=off) + - `workled_sleep` — LED behavior during sleep + - `lowpwr_led`, `led_test` + - `hallkey` — **lid/hall sensor (RG34XXSP!)** (old MinUI LID_PATH; not present on non-clamshell units — probe per device) + - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` +- `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) +- `rtcwake` binary exists; RTC wake unreliable (see above) + +### Network / Bluetooth +- WiFi: RTL8821CS (SDIO), module `8821cs`; interfaces `wlan0`, `wlan1` +- Stock runs **wpa_supplicant** (`-u -s -O /run/wpa_supplicant`) + **NetworkManager** + dnsmasq +- Bluetooth: `rtl_btlpm` module, `bluetoothd` running, `rtk_hciattach -n -s 115200 ttyS1 rtk_h5` (UART-attached Realtek BT) + +### Storage & partitions (single SD "TF1" holds the whole stock OS) +``` +mmcblk0p1..4 special/boot-resource/env/boot (u-boot, kernel, DTB…) +mmcblk0p5 → / ext4 (Ubuntu rootfs) +mmcblk0p6 → /mnt/vendor ext4 (stock frontend, emulators, libs) +mmcblk0p7 → /mnt/data ext4 (also used as swap by loadapp.sh) +mmcblk0p8 → /mnt/mmc vfat (ROMs partition — user-visible FAT32) +``` +- TF2 (second SD slot) mounts at **`/mnt/sdcard`** (empty at probe — no card inserted); `/mnt/udisk` also exists +- DTB is read raw from `/dev/mmcblk0` by the old "Panel Fix" tool (offset 17954816, magic `d00dfeed`) + +### Stock OS boot chain (THE hijack point) +systemd `launcher.service` → `/etc/init.d/launcher.sh start` → starts `brightCtrl.bin` + +`cexpert` + `/mnt/vendor/ctrl/loadapp.sh` → (swap, resize, retroarch cfg) → +`/mnt/vendor/ctrl/dmenu_ln`, which does: + +```sh +CMD="/mnt/vendor/bin/dmenu.bin" # stock fallback +MISCBIN="/mnt/mmc/dmenu.bin" # ← OUR HIJACK POINT (FAT partition!) +if [ -f "/mnt/vendor/muos1.ini" ]; then MISCBIN="/mnt/vendor/bin/muos1.bin"; fi # stockmod! +if [ -f "/mnt/vendor/muos2.ini" ]; then MISCBIN="/mnt/vendor/bin/muos2.bin"; fi +[ -f $MISCBIN ] && CMD=$MISCBIN +... +if $CMD; then + [ -f /tmp/.next ] && sh /tmp/.next # chain-exec mechanism after CMD exits +fi +``` + +Consequences: +1. Dropping an executable named **`dmenu.bin` onto the FAT ROMs partition (`/mnt/mmc`)** makes the stock OS run it instead of its own frontend. No reflashing needed. This is exactly how old MinUI (and muOS "in-place") installed. +2. **stockmod caveat:** this RG40XXV has `/mnt/vendor/muos1.ini`, which *overrides* the `/mnt/mmc/dmenu.bin` check. The installer/docs must have the user boot into "stock" mode (or delete `muos1.ini`) for the hijack to engage. +3. `/tmp/.next` chain-exec exists in the stock wrapper, but NextUI runs its own launch loop anyway once dmenu.bin is ours. +4. `launcher.sh stop` kills via `SIGUSR1 dmenu.bin` — our binary should tolerate that. +5. LED config during app switch: stockmod writes to `axp2202-battery/work_led` from `led_*.cfg` files — harmless. + +## TG5040 (reference) — probed live +- Kernel `4.9.191 aarch64` (TinaLinux/OpenWRT-flavored), **glibc 2.33** +- `/sys/power/state`: `freeze mem` (same suspend mechanism) +- `/sys/class/disp/disp/attr/` — same attribute set as H700 incl. `color_temperature` +- Also **no `/sys/class/backlight`** (brightness via `/dev/disp` ioctl) +- NextUI install: `/mnt/SDCARD/.system/tg5040/{bin,lib,cores,paks,shaders,etc}` — bundles `libmsettings.so`, `libsamplerate`, `libzip`, etc. **SDL2 comes from the stock OS** (`/usr/trimui/lib`), *not* bundled — on H700 we must bundle our own SDL2 (see 04). +- Running processes: `nextui.elf`, `keymon.elf` + +## glibc compatibility conclusion + +| | kernel | arch | glibc | +|---|---|---|---| +| TG5040 | 4.9.191 | aarch64 | 2.33 | +| H700 stock | 4.9.170 | aarch64 | **2.35** | + +Anything built by the existing tg5040 toolchain (targets glibc ≤ 2.33, aarch64, +cortex-a53) **loads and runs on the H700 stock OS unmodified** as far as libc is +concerned. The port can even bootstrap by copying tg5040-built binaries over for +early experiments. The H700 gets its own toolchain for cleanliness (see 01), but +there is no ABI wall between the two platforms. This is the single biggest +difference vs the old 32-bit rg35xxplus port (which targeted `arm-buildroot-linux-gnueabihf`). + +## Old rg35xxplus port — git archaeology summary + +- Last full commit of the platform at its canonical path: **`8cd78866`** + (`git show 8cd78866:workspace/rg35xxplus/`). Renamed to `workspace/_unmaintained/` in `fc9a5f3a`, deleted in `57e53bbe`. +- Was **32-bit** (`arm-buildroot-linux-gnueabihf`, `-marm -mfpu=neon-fp-armv8`), toolchain `LoveRetro/rg35xxplus-toolchain` +- Custom SDL2 2.28.5 from **`JohnnyonFlame/SDL-malifbdev-rot`** (`--enable-video-mali`, everything else disabled) — Mali fbdev backend with rotation support +- Its verified /sys inventory (all confirmed still present on 2026 stock firmware, except where noted): + +| Subsystem | Path | +|---|---| +| Battery % | `/sys/class/power_supply/axp2202-battery/capacity` ✔ confirmed | +| Charging | `/sys/class/power_supply/axp2202-usb/online` | +| LED | `/sys/class/power_supply/axp2202-battery/work_led` ✔ confirmed | +| Rumble | `/sys/class/power_supply/axp2202-battery/moto` ✔ confirmed | +| Lid | `/sys/class/power_supply/axp2202-battery/hallkey` (SP models) | +| FB blank | `/sys/class/graphics/fb0/blank` | +| HDMI state | `/sys/class/switch/hdmi/cable.0/state` (platform.c) / `/sys/class/extcon/hdmi/cable.0/state` (keymon) — extcon ✔ confirmed | +| WiFi state | `/sys/class/net/wlan0/operstate` ✔ confirmed (wlan0 exists) | +| Brightness | `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` = `0x102`, arg `{0, raw 0-255, 0, 0}` | +| Volume | `amixer sset 'lineout volume' N%` ✔ control confirmed | +| Model string | `strings /mnt/vendor/bin/dmenu.bin \| grep ^RG` → `RGXX_MODEL` env | +| Headphone jack | `/sys/module/snd_soc_sunxi_component_jack/parameters/jack_state` (was noted "always 0" — needs re-test on 2026 firmware) | + +- evdev button codes (from old platform.c, `/dev/input/event1` = ANBERNIC-keys): +``` +UP 103 DOWN 108 LEFT 105 RIGHT 106 (d-pad also on ABS_HAT 16/17) +A 304 B 305 X 307 Y 306 +START 311 SELECT 310 MENU 312 (alt 354) +L1 308 L2 314 L3 313 R1 309 R2 315 R3 316 +PLUS 115 (vol+) MINUS 114 (vol-) POWER 116 +Analog: LSX=ABS_Z(2) LSY=ABS_RX(3) RSX=ABS_RY(4) RSY=ABS_RZ(5), raw 0..4096, scale *32767/4096 +``` + (ABS bits `0x3003c` on the live device confirm axes 2,3,4,5 + hats 16,17.) +- Panel geometry per model (old platform.h): + - default (RG35XX+/H/SP, RG40XX*): 640×480 + - RG34xx: 720×480 (`is_rg34xx`) + - RGcubexx: 720×720 (`is_cubexx`, only overscan-capable device) + - RG28XX: physically 480×640 portrait; fb modes contain `480x640`; old SDL-malifbdev-rot handled rotation inside SDL, `rotate=3` fallback via `SDL_RenderCopyEx` when mode reports portrait +- Panel-fix DTB timing table (SKU fingerprints, `lcd_dclk_freq-lcd_ht-lcd_vt`): + `24-770-526`=35xx2024/Plus, `24-770-528`=35xxH, `24-586-686`=28xx, `24-770-525`=35xxSP, + `24-770-522`=40xxH, `36-812-756`=CubeXX, `26-820-536`=34xx + +## Old-port scope note +The rg35xxplus material above is a **hardware-paths reference only** (sysfs paths, +evdev codes, boot hijack, panel table). Its software architecture (SDL_Renderer +compositing, 32-bit build, SDL1 warm-up shim, pre-shader NextUI APIs) is obsolete — +the port clones **tg5040** (GLES 3.x shader pipeline via `generic_video.c`, 64-bit) +and only borrows hardware constants from the old code. + +## Open items to verify when devices are in hand (tracked in 08-testing) +1. ~~ELF class + GLES version of the Mali blob~~ **RESOLVED ✔**: 64-bit, ES 3.2, r20p0, fbdev winsys (see GPU section). +2. `DISP_LCD_SET_GAMMA_TABLE` (0x10b) ioctl support on H700 4.9 disp2 (for displaycal) — write a 10-line test program. +3. `hallkey` presence on RG34XXSP. +4. RG28XX fb0 reports `480x640` on current firmware. +5. Whether stock `dmenu.bin` model string (`strings … | grep ^RG`) is still the best model detector on 2026 firmware, vs `axp2202-battery/display_id` / DTB timing. +6. Headphone jack detection path on 2026 firmware (old note said jack_state never changes). +7. WiFi behavior across suspend/resume (this probe session: device didn't come back on WiFi after `rtcwake` suspend until manual wake — determine if wlan needs a post-resume kick like tg5040's suspend script does). diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md new file mode 100644 index 000000000..135bf520b --- /dev/null +++ b/docs/h700-port/01-toolchain-and-build.md @@ -0,0 +1,108 @@ +# 01 — Toolchain & Build System Integration + +## Goal +`make PLATFORM=h700 shell` / `make all` builds an `h700` platform exactly like tg5040 does +today: docker image pulled/built from `toolchains/h700-toolchain`, workspace mounted, all +apps + cores cross-compiled, packaged into `MinUI.zip`. + +## Decision: 64-bit aarch64 build (not 32-bit like the old port) + +The old rg35xxplus port was 32-bit (`arm-buildroot-linux-gnueabihf`) because the +2023-era stock OS was 32-bit. The 2026 stock OS is **Ubuntu 22.04 arm64 with glibc +2.35**, and the tg5040 platform is already aarch64/cortex-a53. Building 64-bit means: + +- `workspace/h700/platform/makefile.env` is a copy of tg5040's (`-mcpu=cortex-a53 -flto`, `SDL = SDL2`, `GL = GLES`) +- The entire tg5040 core list builds unchanged (same arch, same tuning) +- No NEON/hard-float 32-bit toolchain maintenance +- Gate (Phase 0): confirm the device's Mali blob `/usr/lib/libEGL.so` is 64-bit. + If it unexpectedly is not, fall back to shipping a known-good 64-bit H700 blob + (the same blob muOS/Knulli use on this SoC) in `.system/h700/lib` — the kernel + side (`mali_kbase` on 4.9) accepts both; blob and kernel driver version must match + (check `dmesg | grep mali` for the kbase version, expect r16p0-style for G31). + +## Toolchain: REUSE the tg5040 docker image (no new toolchain for bring-up) + +**Empirically validated:** a tg5040-toolchain-built `displaycal.elf` runs unmodified +on the RG40XXV (stockmod) *and* on an RG34XXSP running Knulli. Same arch, same +`-mcpu=cortex-a53` tuning, and the tg5040 toolchain's glibc (2.33) is older than the +targets' (stock 2.35, Knulli ≥2.33) — forward-compatible by construction. + +So: **`PLATFORM=h700` builds inside the existing `ghcr.io/loveretro/tg5040-toolchain` +image.** Implementation: `makefile.toolchain` derives the image name from +`$(PLATFORM)` — add a small override (e.g. `TOOLCHAIN_NAME ?= $(PLATFORM)` with +`h700: TOOLCHAIN_NAME=tg5040`, or an `IMAGE_OVERRIDE` var) rather than a new repo. + +What the tg5040 image already provides for h700: +- aarch64 cross GCC + cortex-a53 flags — apps and all 28 cores build as-is +- SDK sysroot with nearly every NextUI dep: SDL2_image/ttf, sqlite, libsamplerate, + libzip, curl/ssl, zlib/bz2/lzma/zstd/lz4, tinyalsa, GLES/EGL link stubs (runtime + symbols come from the device's libmali — standard ABI, link stubs are fine) +- all host tools the cores makefile needs + +The one real gap — **SDL2 itself**: on tg5040 the stock OS supplies runtime SDL2; on +H700 we ship our own mali-fbdev SDL2 (see 04) and must compile NextUI against *its* +headers/libs, not the SDK's. Solve it the way the old rg35xxplus port did: build the +custom SDL2 in-tree under `workspace/h700/other/sdl2/` via the platform `early` +target, install into a local prefix inside the container, and have +`workspace/h700/platform/makefile.env` put that prefix first in include/lib/pkg-config +order. Bundle the resulting `libSDL2*.so` (+ matching-version SDL2_image/ttf if the +SDK's are ABI-incompatible with SDL 2.28) into `.system/h700/lib`. + +Runtime-lib rule of thumb: anything linked from the SDK sysroot that isn't guaranteed +on the H700 stock OS gets bundled into `.system/h700/lib` (NextUI already does this on +tg5040 for samplerate/zip/etc. — extend the list; `ldd` every shipped .elf against a +clean stock rootfs as a CI-able check). + +**Dedicated `h700-toolchain` image: deferred, optional.** If/when divergence grows +(different SDL patches, extra deps like bluez-alsa, wanting jammy's exact glibc), a +thin image `FROM ghcr.io/loveretro/tg5040-toolchain` that pre-bakes the SDL2 build + +extras is the natural next step — cheap to add later, not a prerequisite. Revisit +after Phase 3. + +## Repo integration checklist + +- [ ] `makefile`: add `h700` to `PLATFORMS` (`PLATFORMS = tg5050 tg5040 h700`) +- [ ] `makefile.toolchain`: image-name override so `PLATFORM=h700` uses the tg5040 image (no `toolchains/h700-toolchain/` dir needed for now) +- [ ] `workspace/h700/` — new platform dir (contents defined in docs 03–07): + ``` + platform/{platform.c,platform.h,makefile.env,makefile.copy} + libmsettings/{msettings.c,msettings.h,makefile} + keymon/{keymon.c,makefile} + cores/makefile + install/{boot.sh,update.sh,logo.png} + boot/ (dmenu.bin builder — see 02) + makefile (platform-local `early`/`all` targets, modeled on tg5040's) + ``` +- [ ] `workspace/makefile`: tg5040 has special-cased steps (`rfkill`, `btmanager`, `poweroff_next`) under `ifeq ($(PLATFORM), tg5040)`. Add an h700 branch only for what h700 actually needs (likely `rfkill` only; plain `poweroff` works on systemd — verify — and bluez is modern already, no `btmanager` needed). +- [ ] `skeleton/SYSTEM/h700/` + `skeleton/EXTRAS/Tools/h700/` + `skeleton/BOOT/` additions (see 02) +- [ ] `skeleton/BOOT/common/updater`: add H700 detection **before** the `*"0xd03"*` case (H700 cpuinfo also matches 0xd03!): + ```sh + if grep -q sun50iw9 /proc/device-tree/model 2>/dev/null; then PLATFORM="h700"; fi + ``` + (or match `*"sun50iw9"*` on `cat /proc/device-tree/model` — do NOT rely on /proc/cpuinfo which is indistinguishable from zero28) + Note: on Anbernic the H700 boot path doesn't go through `updater` at all (our + `dmenu.bin` calls `.tmp_update/h700.sh` directly, see 02), but keeping `updater` + correct costs one line and prevents mis-detection if a multi-platform card is moved + between devices. +- [ ] `github/` CI workflows: add h700 to the build matrix (mirror what exists for tg5040) + +## Build outputs (parity with tg5040) + +`make PLATFORM=h700 all` must produce inside `build/`: +- `.system/h700/bin/*` — `nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf(=minput?), clock, ledcontrol …` (same list as tg5040; drop what doesn't apply, see per-doc notes) +- `.system/h700/lib/` — `libmsettings.so, libbatmondb.so, libgametimedb.so, libsamplerate…` **plus `libSDL2-2.0.so.0`, `libSDL2_image`, `libSDL2_ttf`** (unlike tg5040, the stock OS SDL2 2.0.12 has no usable GLES video backend for us — we bundle our own; LD_LIBRARY_PATH in launch.sh puts our lib dir first) +- `.system/h700/cores/*.so` — same core list as tg5040 +- `.system/h700/shaders/` — copy of tg5040's `.glsl` set (they're ES 3.0, portable) +- `.tmp_update/h700.sh` (installer), `dmenu.bin` (boot shim, see 02) + +## Suggested first milestone (Phase 0 spike, ~1-2 days) + +Before writing any platform code, validate the whole chain with throwaway binaries, +all inside the existing tg5040 toolchain container: +1. ~~hello world ABI check~~ **already proven** — user's tg5040-built displaycal.elf + runs on RG40XXV stockmod and RG34XXSP/Knulli. +3. Tiny EGL/GLES probe (fbdev EGL native window via blob): create context, print + `GL_VERSION`/`GL_RENDERER`, clear screen to a color. This single test de-risks the + entire video stack (64-bit blob works, ES version confirmed, fbdev winsys works). +4. Build the custom SDL2, run an SDL window + `SDL_GL_CreateContext` + swap test. +5. Write `mem` to `/sys/power/state` from a test binary, wake with power button ✔ (already proven via rtcwake). diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md new file mode 100644 index 000000000..03a1503d0 --- /dev/null +++ b/docs/h700-port/02-boot-and-installer.md @@ -0,0 +1,135 @@ +# 02 — Boot Hijack, Installer & SD Layout + +## How NextUI takes over the stock OS (no reflash, fully reversible) + +Verified on the live RG40XXV: the stock launcher wrapper `/mnt/vendor/ctrl/dmenu_ln` +prefers **`/mnt/mmc/dmenu.bin`** (the FAT32 ROMs partition of the *boot* SD, TF1) +over the built-in frontend. Placing our own `dmenu.bin` there hijacks boot. Removal = +delete one file. This is the same mechanism the old MinUI rg35xxplus port used. + +``` +stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_ln + │ + /mnt/mmc/dmenu.bin exists? ───────────┤ + YES → run it (= NextUI boot shim) │ + NO → /mnt/vendor/bin/dmenu.bin (stock UI) +``` + +### stockmod caveat (must be in README/install docs) +`dmenu_ln` checks `/mnt/vendor/muos1.ini` / `muos2.ini` **first** and runs the bundled +muOS instead if present (the user's RG40XXV is in this state). Users running stockmod +must switch the boot target back to "stock" (or the installer, once running via any +one-shot exec path, deletes `/mnt/vendor/muos*.ini`). Document prominently: +**NextUI installs on top of the *stock* boot path.** + +## SD card layout: stock card gets one drag-dropped file; NextUI lives on TF2 + +**Policy (project owner):** TF1 remains the stock OS card. NextUI runs from TF2. +Minimal, end-user-simple changes to the stock card are fine (drag-drop a file from a +PC). When in doubt, do what the old rg35xxplus port did — and this is exactly that: + +**End-user install (matches old MinUI rg35xxplus flow):** +1. Put TF1 (stock card) in a card reader — the ROMs partition (mmcblk0p8, FAT32) is + the one a PC sees. **Drag `dmenu.bin` onto its root.** That's the entire stock-card + change (`dmenu_ln` on the stock OS runs `/mnt/mmc/dmenu.bin` if present — verified; + it never consults TF2 for a boot target, so this one file is both necessary and + sufficient for autoboot). +2. Format TF2 FAT32, copy the NextUI base-zip contents onto it (`MinUI.zip`, Bios, + Roms, …). First boot self-installs to `.system/` — same as every MinUI/NextUI + platform. +3. Uninstall: delete `dmenu.bin` from TF1 → device boots pure stock again. + +Rules that keep the stock card safe: +- Stock OS **partitions p1–p7 (boot-resource, rootfs, vendor, data) are never + written.** Unlike the old port: no `bootlogo.bmp` replacement on `/dev/mmcblk0p2`, + no DTB "Panel Fix" writes to `/dev/mmcblk0` (drop that tool initially), no apt + installs into rootfs (2026 stock already runs sshd). The only TF1 write ever is the + `dmenu.bin` file on the user-visible FAT partition. +- **TF2 = NextUI's card** (`/dev/mmcblk1p1` → `/mnt/sdcard`): `.system`, `.tmp_update`, + `.userdata`, Bios, Roms, Saves — everything. FAT32 initially (kernel 4.9 has no + native exfat; check stock for a FUSE exfat helper before allowing exfat). + `SDCARD_PATH` stays `/mnt/SDCARD` via symlink → `/mnt/sdcard` (see 03). +- **TF1-only layout: not supported** (old port allowed it; we don't — keeps the stock + card pristine and the support matrix small). If TF2 is absent, the shim shows an + "insert NextUI SD card" splash and exec's the stock frontend, so the device always + boots something sensible. +- dmenu.bin self-heal/update: launch.sh compares `.system/h700/dat/dmenu.bin` (TF2) + against `/mnt/mmc/dmenu.bin` and re-copies on mismatch — updates ship through TF2 + releases; the user never touches TF1 again after install. +- Verify on current firmware whether stock automounts TF2 at `/mnt/sdcard` before + `dmenu_ln` runs (mount point exists; card wasn't inserted during probing). If not, + the shim mounts it — the old port's boot.sh has the exact mount logic to reuse. + +## `workspace/h700/boot/` — the dmenu.bin shim + +Reuse the old self-extracting design (`git show 8cd78866:workspace/rg35xxplus/boot/build.sh`): +`dmenu.bin` = shell script + `echo BINARY` sentinel + gzip payload (splash images, +static `unzip`). At boot it: + +1. Mounts TF2 if the stock OS hasn't already; if TF2 absent → splash "insert NextUI SD card", exec stock frontend (no TF1 fallback, see policy above) +2. Shows splash: `dd` a raw BMP/fb dump to `/dev/fb0` (640×480 RGB565/XRGB — regenerate + splash assets per panel: default 640×480, `-w` 720×480 for RG34xx, `-r` rotated + 480×640 for RG28XX, chosen by `cat /sys/class/graphics/fb0/modes`) +3. First boot / update: if `MinUI.zip` (or `*.pakz`) present at SD root → run + `.tmp_update/h700.sh` (self-extracted static unzip available) which unzips into + `.system/` and `.tmp_update/` +4. `exec .system/h700/paks/MinUI.pak/launch.sh` + +Improvement over the old port: current NextUI has `show2.elf --mode=daemon` with +progress display — after first install, prefer it over raw `dd` splash (needs SDL — +only usable post-extract; keep `dd` for the very first boot). + +The stock wrapper loops and re-runs `dmenu.bin` when it exits, and `launcher.sh stop` +sends `SIGUSR1` — the shim and launch.sh must not treat either as an error +(NextUI's own `while` launch loop in MinUI.pak handles restarts; on poweroff request +touch `/tmp/poweroff` and call `poweroff` — systemd handles clean shutdown on this OS). + +## `workspace/h700/install/` + +- `boot.sh` → becomes `.tmp_update/h700.sh`. Model on tg5040's (`workspace/tg5040/install/boot.sh`): + set governor performance during install, show splash, unzip `MinUI.zip` payload, + process `*.pakz`, then reboot. Remove all trimui-isms (`/usr/trimui`…). +- `update.sh` → becomes `.system/h700/bin/install.sh` (in-place updates from the OS). +- Re-copy `dmenu.bin` from `.system/h700/dat/dmenu.bin` (TF2) to `/mnt/mmc/dmenu.bin` + **only when contents differ** (self-healing + updates ship new shims, while keeping + TF1 writes to the absolute minimum). + +## `skeleton/` additions + +``` +skeleton/SYSTEM/h700/ + bin/ governor.sh, suspend, install.sh, run_hooks.sh, setterm, shutdown-helper + etc/wifi/ wifi_init.sh (see 07) + etc/bluetooth/ bt_init.sh (see 07) + paks/MinUI.pak/launch.sh (master boot script — see below) + paks/Emus/{FC,GB,GBA,GBC,MD,PS,SFC,…}.pak/ (clone tg5040 set; default.cfg per-device variants) + shaders/ (copy of tg5040 set) + system.cfg +skeleton/EXTRAS/Tools/h700/ (Files.pak, Input.pak, Clock.pak, … clone from tg5040 where portable) +``` + +### MinUI.pak/launch.sh responsibilities (H700 edition) +Clone tg5040's and adapt: +- `export PLATFORM=h700`, standard path exports (SDCARD_PATH=/mnt/sdcard, …) +- **Device detection** (replaces tg5040's `TRIMUI_MODEL` sniff): + ```sh + export RGXX_MODEL=$(strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG) # e.g. RG40xxV / RG34xxSP / RG28xx / RGcubexx + case "$RGXX_MODEL" in + RG28xx) export DEVICE="rg28xx" ;; # rotated panel + RG34xx*) export DEVICE="rg34xx" ;; # 720x480 (+SP has lid) + RGcubexx) export DEVICE="cube" ;; # 720x720 (later) + *) export DEVICE="rg40xx" ;; # 640x480 family default + esac + ``` + (validate on 2026 firmware; fallback detectors: fb0 mode `480x640` → 28xx, + `xres/yres` in /sys/class/disp, `axp2202-battery/display_id`, DTB lcd timings) +- `export LD_LIBRARY_PATH=$SYSTEM_PATH/lib:/usr/lib` — **our SDL2 first** +- Stop stock services we replace (crucial for input/audio/sleep hygiene): + `systemctl stop brightCtrl` isn't a unit — `killall brightCtrl.bin cexpert` instead; + consider `systemctl stop NetworkManager` if we drive wpa_supplicant directly (see 07) +- governor performance, start `keymon.elf &`, `batmon.elf &`, `audiomon.elf` (if kept), wifi/bt init, boot hooks, then the standard `while` loop around `nextui.elf` / `minarch.elf` (`/tmp/next` mechanics identical to tg5040) +- On loop exit: `/tmp/poweroff` → `poweroff`; `/tmp/reboot` → `reboot` (systemd versions; no custom poweroff_next I2C dance needed — **verify `poweroff` works cleanly from our context**, else port `poweroff_next`) + +## Uninstall story (document it) +Delete `dmenu.bin` from the ROMs partition (visible from any PC via card reader) → +stock boots untouched. `.system`/`.userdata` remain inert data. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md new file mode 100644 index 000000000..fb6bc9f68 --- /dev/null +++ b/docs/h700-port/03-platform-layer.md @@ -0,0 +1,123 @@ +# 03 — Platform Layer (`workspace/h700/`) + +The port's center of gravity. Strategy: **clone `workspace/tg5040/` → `workspace/h700/`** +(keeps the `generic_video.c`/`generic_wifi.c`/`generic_bt.c` includes and the full +`PLAT_*` wiring), then repoint every hardware access using the old rg35xxplus paths +(all verified live in 00-device-facts). The old code is at `git show 8cd78866:workspace/rg35xxplus/...` +— use it as the H700 hardware reference, but keep the *current* NextUI API surface +(the old code predates ~2 years of NextUI API growth: shaders, LEDs API, turbo, +timezones, displaycal, deep sleep…). + +## platform.h + +```c +// h700 +extern int is_rg28xx, is_rg34xx, is_cube; // set in PLAT_initVideo from DEVICE env + +#define FIXED_SCALE 2 +#define FIXED_WIDTH (is_cube?720:(is_rg34xx?720:640)) +#define FIXED_HEIGHT (is_cube?720:480) +#define FIXED_BPP 2 +#define SCREEN_FPS 60.0 // measure per panel! old port used 60.0; verify + // with vsync timing test on each device +#define SDCARD_PATH "/mnt/SDCARD" // see note below +#define MAX_LIGHTS 0 // no RGB LEDs on RG XX (work_led is on/off only) +#define MUTE_VOLUME_RAW 0 +#define MAIN_ROW_COUNT (is_cube?8:6) // 480px tall screens fit 6 rows (tg5040 is 720/768px) +``` + +Path note: tg5040 uses `/mnt/SDCARD`; H700 mounts TF2 at `/mnt/sdcard`. Simplest 1:1: +launch.sh does `ln -s /mnt/sdcard /mnt/SDCARD` (or bind-mount) so every hardcoded +`/mnt/SDCARD` in shared code keeps working. (Grep `workspace/all` for `/mnt/SDCARD` +literals before deciding to diverge — the symlink is the low-risk move.) + +### Input mappings +The kernel exposes `ANBERNIC-keys` as **both** kbd (evdev KEY_*) and joystick. Current +NextUI reads input via SDL (PLAT_updateInput/SDL events + JOY_*/AXIS_* from platform.h). +Two options: +1. **SDL joystick route (tg5040-style, recommended):** our custom SDL2 sees js0. The + JOY_* button indices follow the kernel's KEY-bit order for gpio-keys devices — + discover once per device family by running `minput.elf`/`evtest` on the device and + fill platform.h. AXIS_LX/LY/RX/RY = SDL axes 0..3 (kernel ABS_Z/RX/RY/RZ map in + order), triggers: none analog (L2/R2 are digital keys 314/315). +2. **evdev route (old-port-style):** define `BUTTON_*` = raw codes (103/108/105/106, + 304/305/307/306, 311/310/312, 308/309/314/315/313/316, 115/114/116) and implement + `PLAT_pollInput` reading event0/1/2 directly, as the old platform.c did. + +Start with (1); the codes from (2) are the fallback and are needed for keymon anyway. +`CODE_POWER 116` comes from `axp2202-pek` (event0) — note tg5040 uses 102; H700 power +key emits KEY_POWER=116 per old port. Sticks (RG40XXV, cube only): raw 0..4096, +old scaling `value*32767/4096` (SDL route handles scaling itself; verify centering/deadzone). + +Buttons per device: RG40XXV has dual sticks + L3/R3; RG34XXSP/RG28XX have no sticks +(JOY_L3/R3 = JOY_NA via `is_*` conditionals, same trick as tg5040's `is_brick`). + +```c +#define BTN_RESUME BTN_X +#define BTN_SLEEP BTN_POWER +#define BTN_WAKE BTN_POWER +#define BTN_MOD_VOLUME BTN_NONE +#define BTN_MOD_BRIGHTNESS BTN_MENU // MENU+vol keys = brightness (old-port behavior) +#define BTN_MOD_COLORTEMP BTN_SELECT // parity with tg5040 +#define BTN_MOD_PLUS BTN_PLUS // dedicated vol keys 115/114 +#define BTN_MOD_MINUS BTN_MINUS +``` + +## platform.c — subsystem by subsystem + +| Subsystem | tg5040 does | h700 change | +|---|---|---| +| `PLAT_initVideo` etc. | `#include "generic_video.c"` | keep (see 04 for SDL/GLES groundwork + rotation) | +| Battery | `axp2202-battery/capacity`, `axp2202-usb/online` | **identical paths** — same PMIC family. Copy as-is. | +| CPU speed | `governor.sh` via cpufreq policy0 | same sysfs layout confirmed; freq table 480k–1512000; PERF=1512000, powersave=conservative/720k. Single cluster → `PLAT_pinToCores` = no-op. | +| CPU/GPU temp | thermal zones | enumerate `/sys/class/thermal/thermal_zone*/type` on device; wire what exists, return 0 otherwise | +| GPU speed/usage | sunxi devfreq sysfs | check `/sys/class/devfreq/` for gpu node (H700 BSP usually `1800000.gpu`); stub if absent | +| Rumble `PLAT_setRumble` | gpio227 + `/sys/class/motor/voltage` | `echo 1/0 > /sys/class/power_supply/axp2202-battery/moto`. On/off only (no voltage control) — map strength>0 → 1. Skip when HDMI (old-port behavior). Later: try input-FF via event1 (device advertises FF bits) for strength levels. | +| LEDs `PLAT_initLeds` | `/sys/class/led_anim/*` (Brick RGB) | `MAX_LIGHTS 0`; drop ledcontrol.elf from build. Keep `work_led` for sleep indication (06). | +| `PLAT_powerOff` | haptics, mute, blank, `/tmp/poweroff` | same, then systemd `poweroff` in launch.sh (verify; else port poweroff_next) | +| Lid | none (fallback no-op) | **implement for RG34XXSP**: `LID_PATH=/sys/class/power_supply/axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if file exists; `PLAT_lidChanged` polls it; lid-close → `BTN_SLEEP` inject, lid state gates wake (copy old port logic into current API: `PLAT_shouldWake` swallowing power-key while closed) | +| `PLAT_getModel` | TrimUI sniff | `"Anbernic " + getenv("RGXX_MODEL")` | +| `PLAT_getOsVersionInfo` | Tina version | read `/etc/os-release` PRETTY_NAME + kernel | +| Turbo (`trimui_inputd`) | trimui daemon ioctl | stub `PLAT_canTurbo()=false` initially (NextUI turbo feature — check if generic fallback exists; if the API is generic enough, enable later) | +| Timezones/NTP | OpenWRT `uci` | Ubuntu equivalents: `timedatectl set-timezone` / `list-timezones`, NTP = `timedatectl set-ntp` (systemd-timesyncd present). Much cleaner than tg5040. | +| WiFi/BT | generic_wifi/bt + init scripts | keep generic, adapt scripts (07) | +| `PLAT_pickSampleRate` | clamp + BT limit | keep | +| `PLAT_deepSleep` | generic `echo mem` | keep — verified working on device (06) | + +## libmsettings (`workspace/h700/libmsettings/msettings.c`) + +Clone tg5040's, repoint: +- **Brightness**: `SetRawBrightness(0-255)` → `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS (0x102)`, + args `{0, val, 0, 0}` — same driver as tg5040, same code. Reuse old port's level + curve (`0→4, 1→6, 2→10, 3→16, 4→32, 5→48, 6→64, 7→96, 8→128, 9→192, 10→255`). + Kill stock `brightCtrl.bin` at launch so it doesn't fight us. +- **Volume**: tinyalsa mixer on card0; controls: `digital volume` (master) and + `lineout volume` — map NextUI 0..20 scale; discover ranges via `amixer cget`. + Confirm speaker/HP switching: `SPK Switch` + jack events (below). +- **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — exists on + H700, same as tg5040. Copy as-is. +- **DisplayCal**: same `/dev/disp` gamma-LUT ioctls (0x10b/0x10c/0x10d) — see 04. +- **Mute**: no `/sys/class/speaker/mute` on H700; use `SPK Switch` mixer ctl. +- **Jack detection**: old note says `snd_soc_sunxi_component_jack/parameters/jack_state` + never changes; test on 2026 firmware; alternatives: ALSA jack ctl events + (`amixer contents` may expose a jack bool), or an input event device. `audiomon.elf` + (tg5040's device-watch daemon) may adapt — investigate its mechanism when wiring. + +## keymon (`workspace/h700/keymon/keymon.c`) + +Merge of tg5040's structure with old rg35xxplus codes: read `/dev/input/event1` +(ANBERNIC-keys) + `event2` (dierct-keys / volume: PLUS 115, MINUS 114) + `event0` +(power 116). MENU(312)+vol = brightness, SELECT(310)+vol = colortemp (parity with +tg5040), plain vol keys = volume. No mute DIP switch on H700 (drop gpio243 watcher). + +## Cores (`workspace/h700/cores/makefile`) + +Copy tg5040's verbatim (same aarch64 cortex-a53 target). Do **not** repeat the old +port's "copy from rg35xx" hack. Trim only if something fails to build; expected: the +full 28-core list works. + +## What disappears vs tg5040 +- `btmanager/` (bluez upgrade pakz — H700 Ubuntu has modern BlueZ) +- `poweroff_next/` (systemd poweroff; verify first) +- LED animation engine wiring (`led_anim`), ledcontrol.elf +- `trimui_inputd` interactions (turbo, gpio107 5V export, etc.) diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md new file mode 100644 index 000000000..bcd794eec --- /dev/null +++ b/docs/h700-port/04-video-display.md @@ -0,0 +1,111 @@ +# 04 — Video, Display, Rotation, HDMI, DisplayCal + +## Architecture recap +NextUI renders via `workspace/all/common/generic_video.c`: SDL2 window → +`SDL_GL_CreateContext` (requests **GLES 3.2** profile) → shader pipeline (shaders are +rewritten to `#version 300 es`, so ES 3.0 is the true floor) → `SDL_GL_SwapWindow`. +No fbdev blits, no SDL_Renderer in the hot path. Whatever platform provides a working +SDL2 + EGL/GLES stack gets the entire NextUI feature set (shaders, overlays, effects, +scrolling text, screenshots) for free. + +## The H700 graphics stack (the real porting work) + +- Kernel 4.9 BSP: **no DRM/KMS**. Display = Allwinner disp2 (`/dev/disp` + fbdev). +- GPU: Mali-G31 MP2, `mali_kbase` r20p0 kernel driver + vendor blob userspace. + **Verified on device:** blob `libmali.so.0.20.0` is 64-bit aarch64, reports + **`OpenGL ES 3.2 v1.r20p0-01rel0`** (matches kernel kbase r20p0), and is built with + the **fbdev EGL winsys** — every assumption in this doc is confirmed hardware fact. +- Therefore SDL2 uses the **Mali/fbdev EGL winsys** (EGL `fbdev` native window), + like muOS/Knulli's SDL on these devices. +- Extra proof: the **stock OS's own `/usr/lib/libSDL2-2.0.so.0.12.0` is 64-bit and + compiled with exactly the `mali` video driver** (only `mali` + `dummy` backends). + The stack we're building is the one the device already runs. During bring-up, the + stock libSDL2 can even serve as a temporary crutch (it's SDL 2.0.12 — too old to + ship, but fine for validating our binaries before the custom SDL is done). + +### Custom SDL2 (bundled in `.system/h700/lib`) +Start from **`JohnnyonFlame/SDL-malifbdev-rot`** (what the old port shipped: SDL 2.28.5, +`--enable-video-mali`, with built-in **rotation** support — written specifically for +the RG28XX/RGcubexx generation). Tasks: +1. Build it **aarch64** against the jammy sysroot + device Mali blob (old port built it 32-bit). +2. Confirm `SDL_WINDOW_OPENGL` + `SDL_GL_CreateContext` with ES 3.2/3.0 works on the + mali video driver path (the old port used SDL_Renderer on top; NextUI drives GL + directly — the mali backend supports EGL contexts natively, this is its whole point). +3. Audio: keep ALSA backend enabled (`--enable-alsa`), everything else off (matches + old configure: no kmsdrm/x11/wayland/pulse/dbus). +4. Evaluate rebasing the mali-fbdev patch onto SDL 2.30.x if NextUI depends on newer + SDL APIs — check what SDL version the tg5040 SDK ships and what `generic_video.c` + + `api.c` actually require; 2.28.5 is likely sufficient. (Alternative donor with + the same backend: Knulli's buildroot patchset for h700.) + +Phase 0 gate (see 01): a 200-line raw EGL/GLES test binary proves blob + fbdev winsys ++ ES version before any SDL work. If the blob's EGL doesn't accept fbdev native +windows (unlikely — stock RA uses it), fall back to the blob variant muOS ships. + +## Per-device geometry + +| Device | Panel | FIXED_W×H | Notes | +|---|---|---|---| +| RG40XXV | 640×480 4:3 | 640×480 | reference target | +| RG34XXSP | 720×480 3:2 | 720×480 | `is_rg34xx` (same LCD as RG34XX) | +| RG28XX | **480×640 portrait** | 640×480 logical | needs rotation (below) | +| RGcubexx | 720×720 | 720×720 | later; only overscan device | + +UI scale: these are ~half the resolution of tg5040 (1280×720/1024×768). `FIXED_SCALE 2` +and `MAIN_ROW_COUNT 6` follow the old port. Audit current NextUI UI code for +assumptions introduced since the 480p platforms were dropped (font sizes, pill +sprites, quick switcher) — run the whole UI at 640×480 in the `desktop` platform +first if it supports arbitrary resolution, or budget polish time here. **This is a +real risk area: NextUI hasn't rendered at 480p for ~2 years.** + +## RG28XX rotation (deferred to phase 2, design now) + +The panel scans portrait 480×640; fb0 mode will report `480x640`. Options, in order +of preference: +1. **Inside SDL (malifbdev-rot)**: the backend was patched precisely for this — it + presents a landscape-logical display and rotates in the blit/flip. If it works with + GL contexts (verify! the rot patch may only cover the non-GL blitter path), NextUI + needs zero changes. +2. **GL-level rotation in generic_video.c**: add a platform hook (e.g. + `PLAT_getDisplayRotation()` returning 0/90/270) applied as a final rotation in the + present pass (rotate the output quad / swap w↔h of the backbuffer viewport). Clean, + ~contained change; also benefits any future rotated device. +3. Allwinner DE rotation via `/dev/disp` (the disp2 driver has a rotation/smart-color + module on some BSPs) — investigate `dispdbg`; least portable, likely dead end. + +Plan for (2) as the durable solution, try (1) first since the code exists. +Everything else (input is unrotated, touch none) is unaffected. + +## HDMI out + +Old port: `HAS_HDMI`, 1280×720 output, monitored by `hdmimon.sh` (recover: +`git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`) using +`/sys/kernel/debug/dispdbg` (`switch1 4 10 ...`) + `fbset`, then restarting the UI with +`hdmi_export.sh` sourced. Hotplug state: `/sys/class/extcon/hdmi/cable.0/state` +(confirmed present). + +Current tg5040 NextUI: check how/if it handles HDMI (TrimUI Brick HDMI support in +NextUI is limited). **Scope decision: HDMI = stretch goal, phase 3.** The plumbing is +understood and documented; don't block the handheld experience on it. Until then: +`PLAT` reports no HDMI; NextUI treats display as fixed. + +## DisplayCal (white-point correction) — expected to port 1:1 + +- Lives in `workspace/all/common/displaycal.{c,h}`, compiled into `libmsettings.so` + + standalone `displaycal.elf`; UI gated at runtime on model name in `settings.cpp`. +- Mechanism: 256-entry RGB gamma LUT via `/dev/disp` ioctls `DISP_LCD_SET_GAMMA_TABLE + (0x10b)` / `GAMMA_CORRECTION_ENABLE (0x10c)` / `DISABLE (0x10d)`. +- H700 has the same disp2 driver generation (attr dir matches TG5040 nearly 1:1, incl. + `color_temperature`). The user reports displaycal-class functionality already works + fine on RG XX devices. **Validation (Phase 0/2):** 20-line test — set a strongly + tinted LUT, confirm visible effect, confirm survival across suspend/resume. +- Work items: add h700 to the displaycal build (`libmsettings` makefile), extend the + model gate in `settings.cpp` to Anbernic models, add per-panel default gain presets + (measure per device; start neutral 100/100/100). +- `enhance_*` attrs (bright/contrast/saturation) exist too — same as tg5040; whatever + NextUI exposes for those on tg5040 carries over. + +## Boot splash +`show2.elf` (SDL) post-install; raw fb `dd` in the dmenu.bin shim pre-install (see 02). +Generate 640×480, 720×480, 480×640(rotated) variants of the splash assets — the old +port's `-r/-s/-w` suffix scheme, selected by fb0 mode. diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md new file mode 100644 index 000000000..305bccd90 --- /dev/null +++ b/docs/h700-port/05-audio.md @@ -0,0 +1,49 @@ +# 05 — Audio + +## Playback path (shared code, low risk) +`workspace/all/common/api.c` `SND_init` uses SDL audio (`SDL_OpenAudioDevice`) with a +software resampler. Our custom SDL2 is built with the **ALSA** backend → default ALSA +device on card 0 (`audiocodec`). Verified on device: + +``` +card 0: audiocodec ← speaker / lineout / headphone +card 1: ahubdam +card 2: ahubhdmi ← HDMI audio (phase 3, together with HDMI video) +``` + +Work items: +- Ensure a sane default ALSA route: launch.sh runs an `alsactl restore`-style init or + explicit `amixer` unmute sequence (`SPK Switch` on, `LINEOUT Switch`, DAC mixers on — + capture a known-good `alsa.state` from the stock OS while its UI plays sound, ship it). +- `SDL_AUDIODRIVER=alsa` exported in launch.sh (belt & braces). +- If default-device selection misbehaves, set `AUDIODEV=hw:0,0` / configure + `/etc/asound.conf` in our environment (we can ship one and point `ALSA_CONFIG_PATH` + at it without touching rootfs). + +## Volume / mute (libmsettings, see 03) +- Master: `digital volume` mixer ctl; line/speaker: `lineout volume` (old port drove + volume with `amixer sset 'lineout volume' N%`; NextUI uses tinyalsa directly — + same controls, discover exact ranges with `amixer cget` on device). +- Mute: `SPK Switch` off (+ store/restore volume), since tg5040's + `/sys/class/speaker/mute` doesn't exist here. +- `PLAT_overrideMute` accordingly. + +## Headphone jack +- The codec driver module exposes `snd_soc_sunxi_component_jack/parameters/jack_state`; + the old port found it non-functional ("always 0"). Re-test on 2026 firmware. +- Investigate how the *stock* OS switches speaker/HP (it does): watch + `amixer contents` diff and kernel log while plugging headphones on the live device; + there may be an ALSA jack kctl or an input switch event (SW_HEADPHONE_INSERT on some + BSPs). Wire whatever exists into `audiomon`/`PLAT_audioDeviceWatch*`; worst case, + speaker stays on lineout auto-switch in hardware (many Anbernic units mute the + speaker in hardware when jack inserted — if so, we need do nothing). + +## Bluetooth audio +See 07 — BlueALSA vs PulseAudio decision. NextUI's generic_bt streams via bluealsa + +`PLAT_pickSampleRate` limits. Ubuntu 22.04 has BlueZ 5.64 (modern), and bluealsa is +buildable; keep parity with tg5040's approach to reuse generic_bt.c unchanged. + +## Sample rates +`PLAT_pickSampleRate(requested, max)`: copy tg5040 logic (clamp; when BT connected, +clamp to configured BT limit). The sunxi codec supports 48000/44100 natively — no +platform quirk expected. diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md new file mode 100644 index 000000000..28a7f95ec --- /dev/null +++ b/docs/h700-port/06-power-sleep-battery.md @@ -0,0 +1,87 @@ +# 06 — Power, Sleep, Battery, Lid + +This is a headline goal of the port: **match the RG XX stock OS's excellent sleep +behavior**. Good news first — verified live on the RG40XXV: + +- `/sys/power/state` = `freeze mem` — same suspend-to-RAM support as TG5040 +- `echo mem`-style suspend **works** (tested via `rtcwake -m mem`); draw in `mem` + suspend on these devices is famously low (days of standby) because the stock kernel + properly powers down WiFi/panel/SoC +- Wake source: **power button** (AXP2202 PEK is a wakeup source — `axp2202-battery` + and `axp2202-usb` are active wakeup_sources). RTC alarm wake did NOT fire in + testing → no timed wake; don't build features on it. + +## Sleep design (mirror tg5040, simplify where the OS is nicer) + +NextUI has two layers; keep both: + +1. **Screen-off "light sleep"** (`PLAT_enableBacklight(0)` + governor powersave): + - backlight off = raw brightness 0 via `/dev/disp` ioctl + fb blank + (`/sys/class/graphics/fb0/blank` ← old port did both; keep both) + - LED signal: `work_led` (0=on 1=off) + honor `workled_sleep` for behavior in sleep +2. **Deep sleep** (`PLAT_supportsDeepSleep()=1` → generic `PLAT_deepSleep()` writes + `mem` to `/sys/power/state`, with retry loop — reuse as-is), wrapped by the + `skeleton/SYSTEM/h700/bin/suspend` script pattern from tg5040: + - pre-suspend: save ALSA state, `wpa_cli suspend` / stop wpa_supplicant + bluetoothd + (or `rfkill block` — measure which yields lowest draw), run `pre-sleep.d` hooks + - `echo mem > /sys/power/state` (with tg5040's false-negative retry workaround) + - post-resume: restore ALSA, restart wifi (**required** — observed in probing: after + resume WiFi did not come back on its own), re-apply brightness + displaycal LUT + if the panel re-init clears the gamma table (test!), run `post-resume.d` hooks + - systemd note: we bypass `systemctl suspend` on purpose (direct sysfs write, like + stock does); make sure systemd-logind doesn't also react to the power key — + `HandlePowerKey=ignore` in logind.conf, or mask logind's key handling at launch + (check stock config first: the stock UI also handles the key itself, so stock + firmware has likely already neutered logind — verify `loginctl show-logind`). + +### Wake & autosleep +- `PLAT_shouldWake`: power-key event (code 116 on event0) — copy old port logic, + including the lid gate (below). +- Generic autosleep (`PWR_*` in api.c: idle timeout, disabled while charging/HDMI) + works unchanged once PLAT hooks are right. + +## Lid (RG34XXSP — clamshell) +- `LID_PATH = /sys/class/power_supply/axp2202-battery/hallkey` (old port; confirm the + file exists on the SP when in hand — absent on RG40XXV probes so far... it appears + only on units with the hall sensor, `PLAT_initLid` sets `has_lid = exists(LID_PATH)`). +- Behavior: lid close → inject `BTN_SLEEP` (→ deep sleep); while closed, swallow + power-key wake (only lid-open wakes) — this is exactly the old port's + `PLAT_shouldWake`/`PLAT_pollInput` logic; port it into the current + `PLAT_initLid`/`PLAT_lidChanged` API (fallbacks currently no-op). +- Check whether hall-close already triggers a kernel-level suspend on stock (some + firmwares wire it in-kernel); if so, coordinate rather than double-handle. + +## Battery +- `PLAT_getBatteryStatus(Fine)`: `axp2202-battery/capacity` (0-100) + + `axp2202-usb/online` — same paths as tg5040, copy verbatim; coarse bucketing in + shared code. +- Bonus (nice-to-have): H700 exposes `time_to_empty_now`, `time_to_full_now`, + `voltage_now`, `temp`, `charge_counter` — batmon's SQLite logging gets richer data + for free if we wire `PLAT_` extensions later; not required for parity. +- Low battery: shared code handles warnings; verify `capacity_alert_min` interplay + doesn't force-poweroff underneath us (stock `cexpert`/MCU behaviors — we kill + stock daemons at launch, see 02). + +## Power off / reboot +- launch loop: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → `reboot` (systemd). + Verify clean unmount of `/mnt/sdcard` (vfat!) — systemd handles mounts it knows; + if we manually mounted TF2, unmount in the shutdown path (or add a mount unit). + If systemd poweroff is slow/unreliable from our context, port tg5040's + `poweroff_next` approach (sync + sysrq or direct PMIC) — the old port used + `shutdown` script + sysrq (`echo s/u/o > /proc/sysrq-trigger`), which is proven on + this hardware and immune to systemd state. +- Charging-while-off: stock shows a charge animation via `charg.dge` (from + launcher.sh). When powered off and plugged in, u-boot/stock handles it before our + hijack — expected to work untouched; verify `bootreason=button` vs charger paths. + +## CPU governor / performance profiles +- `governor.sh` clone: auto=`schedutil` (available ✔), performance=`performance` + (max 1512000), powersave=`conservative` capped ~720k. Same policy0 sysfs as tg5040. +- Menu/UI: powersave or schedutil; in-game: per-NextUI settings (auto/performance) — + all shared code once governor.sh maps correctly. +- H700 is a single A53 cluster: `PLAT_pinToCores` = no-op. + +## Standby-drain acceptance test (09 has the full matrix) +Overnight test: 8h in deep sleep, battery delta ≤ ~3-4% (stock-comparable). Measure +stock first on the same unit for a baseline, then NextUI sleep, then iterate on what +to shut down pre-suspend (WiFi off vs powered, BT hci down, etc.). diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md new file mode 100644 index 000000000..a01c25d60 --- /dev/null +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -0,0 +1,65 @@ +# 07 — WiFi & Bluetooth + +## What the hardware/OS gives us (verified live) +- WiFi: Realtek **RTL8821CS** (SDIO), driver `8821cs`, interfaces `wlan0` (+`wlan1` virtual) +- BT: same combo chip, UART-attached (`rtk_hciattach ttyS1 rtk_h5`), `rtl_btlpm` module +- Stock services running: `wpa_supplicant` (with `-u -s` systemd/dbus mode), + **NetworkManager**, `bluetoothd` (BlueZ, Ubuntu 22.04 = 5.64), dnsmasq +- `/sys/class/net/wlan0/operstate` for link state (what `PLAT_getNetworkStatus` reads) + +## WiFi strategy + +NextUI's `generic_wifi.c` speaks **`wpa_cli` to a wpa_supplicant control socket** +(`WIFI_SOCK_DIR`, tg5040: `/etc/wifi/sockets`) + `udhcpc` + `rfkill.elf`. On H700 two +options: + +1. **(Recommended) Drive wpa_supplicant directly, NextUI-owned** — parity with tg5040, + `generic_wifi.c` unchanged: + - launch.sh: `systemctl stop NetworkManager` (and disable its autostart wants — or + `nmcli dev set wlan0 managed no` if we prefer to leave NM for nothing), keep/own a + wpa_supplicant instance with `-C /etc/wifi/sockets` style ctrl dir via our + `etc/wifi/wifi_init.sh` + - DHCP: Ubuntu has no udhcpc by default — use `dhclient` (present) or ship a tiny + `udhcpc` (busybox) in `.system/h700/bin`; `generic_wifi.c` shells out — check + which client name it invokes and parameterize if needed + - `#define WIFI_SOCK_DIR "/tmp/wifi/sockets"` (writable, no rootfs touch) +2. Rewrite `PLAT_wifi*` on top of NetworkManager (`nmcli`) — less code drift from the + OS, but diverges from generic_wifi.c and duplicates a working implementation. + +Go with (1); it keeps 100% shared code and the stock OS doesn't need NM for anything +we use. Credentials store, scan lists, connect flows, diagnostics — all shared. + +`rfkill.elf` (tg5040 helper) builds unchanged; Ubuntu also has `/usr/sbin/rfkill`. + +### Suspend interplay (see 06) +Observed: WiFi did not recover by itself after a `mem` suspend during probing. The +suspend wrapper must bounce the link (wpa_cli suspend/resume or ifdown/up + rejoin); +measure sleep drain with the SDIO card left powered vs `rfkill block`ed pre-suspend. + +## Bluetooth strategy + +tg5040 uses `generic_bt.c` = `bluetoothctl` + **bluealsa** + amixer; it even ships a +BlueZ-upgrade pakz because Tina's BlueZ is ancient. On H700/Ubuntu 22.04: +- BlueZ 5.64 already on device → **no `btmanager`/upgrade-pakz needed** +- `bluetoothctl` present and version-compatible with generic_bt.c's parsing (it + version-detects) — verify against 5.64 output formats +- **bluealsa is NOT part of Ubuntu 22.04** → build `bluez-alsa` in the toolchain and + ship `bluealsa` + `bluealsa-aplay`/lib in `.system/h700/{bin,lib}`; our `bt_init.sh` + starts `bluetoothd` (via systemd unit already present) + our `bluealsa --profile=a2dp-source` +- HCI bring-up: stock already runs `rtk_hciattach` at boot (confirmed running) — our + `bt_init.sh` only needs to ensure it's up (`hciconfig hci0 up`), not re-attach +- `HAS_BTAGENT` (settings pairing agent, needs glib): jammy sysroot has glib — + enable, gated the same way tg5040 does in `workspace/all/settings/makefile` + +## Feature parity checklist (all shared UI, works once PLAT_/scripts are wired) +- [ ] toggle wifi on/off, scan, connect (open/PSK), forget, signal strength +- [ ] `PLAT_connectionStrength`, online indicator in status bar +- [ ] NTP time sync after connect (`timedatectl set-ntp true`, see 03 timezones) +- [ ] RetroAchievements + Pak Store + OTA updater (all pure-HTTP on top of wlan0 — free) +- [ ] BT controller pairing + input in nextui/minarch +- [ ] BT audio (a2dp via bluealsa) incl. `PLAT_bluetoothStream*` + samplerate limit +- [ ] airplane behavior: both radios off = measurably lower idle draw + +## Diagnostics +`PLAT_wifiDiagnosticsEnabled/Enable` + BT equivalents: tg5040 toggles verbose logs — +copy mechanism (log paths under `$LOGS_PATH`). diff --git a/docs/h700-port/08-testing-and-rollout.md b/docs/h700-port/08-testing-and-rollout.md new file mode 100644 index 000000000..78e1957be --- /dev/null +++ b/docs/h700-port/08-testing-and-rollout.md @@ -0,0 +1,85 @@ +# 08 — Testing, Validation & Rollout + +## Test fleet +- RG40XXV (192.168.34.55, root/root, stockmod) — primary bring-up device +- RG34XXSP — second target (lid, 720×480) +- RG28XX — phase-2 target (rotation) +- TrimUI Brick TG5040 (192.168.34.81, root/tina) — regression reference (behavioral 1:1 comparisons) + +Dev-loop tip: the stock OS runs sshd out of the box and has a full Ubuntu userland — +iterate by `scp`ing freshly built `.elf`s directly into `.system/h700/bin` and +restarting the launch loop; no SD-card shuffling needed after first install. + +## Phase 0 exit criteria (feasibility spikes — do these FIRST) +| # | Spike | Pass criteria | +|---|---|---| +| 0.1 | ~~Cross hello-world~~ **DONE ✔** | tg5040-built displaycal.elf runs on RG40XXV stockmod + RG34XXSP Knulli | +| 0.2 | ~~ELF class + version of Mali blob~~ **DONE ✔** | 64-bit aarch64, ES 3.2 r20p0, fbdev winsys (probed live) | +| 0.3 | Raw EGL/GLES fbdev probe | context created from *our* binary; colored clear visible on panel (blob capabilities already confirmed; this tests the winsys handshake) | +| 0.4 | Custom SDL2 (malifbdev) + GL context | SDL window + GL swap at 60fps, `SDL_GetCurrentDisplayMode` sane | +| 0.5 | disp ioctls | brightness 0x102 works; gamma LUT 0x10b/0x10c visibly tints screen; survives suspend? | +| 0.6 | Suspend/resume harness | echo mem → power-button wake → script continues; repeat 20× in loop without hang | +| 0.7 | Input dump | evtest maps every button/stick on RG40XXV; SDL joystick sees same | +| 0.8 | ALSA beep | aplay a wav through SDL-ALSA path at 48k | + +Any 0.x failure = re-plan before writing platform code (each has a documented fallback +in docs 01/04). + +## Per-feature validation matrix (parity with Brick = the bar) + +Functional (each device, each release): +- [ ] cold boot to NextUI < stock-boot + 5s; boot loop stable across 10 reboots +- [ ] browse/launch/quit game in every SYSTEM pak core; save/load state; in-game menu +- [ ] fast resume (BTN_RESUME from launcher), auto-resume after power-loss +- [ ] brightness 0-10 + colortemp ramps; settings persist across reboot +- [ ] volume 0-20, mute, (headphones if jack detection lands) +- [ ] displaycal: RGB gain sliders visibly act; persist; survive sleep + game launch +- [ ] shaders: each shipped .glsl loads on Mali-G31; overlays; effects (scanline/grid) +- [ ] screenshots (PLAT_captureRendererToSurface), Recently Played, game switcher, box art +- [ ] deep sleep: auto (idle), manual (power key), in-game sleep; wake resumes exactly; 20-cycle soak +- [ ] overnight drain ≤ stock + 1% (8h mem-sleep; measure stock baseline same unit first) +- [ ] battery % accuracy vs stock reading; charging indicator; charge-while-sleeping +- [ ] WiFi: scan/connect/forget, survives sleep, NTP sync, RetroAchievements login+unlock, Pak Store install, OTA update flow +- [ ] BT: pair controller (input in launcher + game), A2DP audio with samplerate limit +- [ ] rumble: minarch rumble test core / game (moto on/off) +- [ ] RG34XXSP: lid close → sleep; lid open → wake; power key ignored while closed +- [ ] RG28XX: whole UI + games correctly rotated, no perf penalty (measure fps) +- [ ] uninstall: delete dmenu.bin → pristine stock boot + +Performance (compare against same game/core on Brick, correcting for resolution): +- [ ] GBA/SNES/PS1 full speed with vsync, no audio underruns (SAMPLES tuning) +- [ ] frame pacing: no tearing (fbdev double buffering / vsync via mali backend), input lag comparable to stock RA +- [ ] CPU governor transitions don't stutter audio + +Robustness: +- [ ] SIGUSR1 from launcher.sh stop doesn't corrupt +- [ ] SD yank / readonly card recovery path (MinUI.pak launch.sh has e2fsck hook — vfat equivalent: fsck.fat) +- [ ] stockmod coexistence: muos1.ini present → document + detect + warn in installer output + +## Rollout phases + +| Phase | Deliverable | Est. effort (1 experienced dev) | +|---|---|---| +| 0 | Feasibility spikes 0.1–0.8 on RG40XXV (0.1/0.2/0.3-version/0.6 already done) | 2–3 days | +| 1 | Build wiring: `make PLATFORM=h700 shell` via tg5040 image + in-tree SDL2 `early` build | 1–2 days | +| 2 | Boot shim + installer + skeleton; device boots to a stub | 3–5 days | +| 3 | Platform layer: video/input/audio/msettings/keymon → **nextui.elf usable** | 1–2 weeks | +| 4 | minarch + full core set + per-emu paks | 1 week | +| 5 | Power/sleep/battery/lid + rumble + governor | 1 week | +| 6 | WiFi + BT + displaycal + timezones/NTP | 1 week | +| 7 | RG34XXSP bring-up (mostly config: 720×480 + lid) | 2–3 days | +| 8 | Beta hardening on 40XXV+34XXSP, full matrix above | 1–2 weeks | +| 9 | RG28XX rotation | 3 days–1.5 weeks (depends on SDL rot path) | +| 10 | (later) RGcubexx, HDMI out, RG35XX family variants, Panel-Fix tool port | — | + +Total to a solid 40XXV+34XXSP beta: **~6–8 weeks** single-dev, parallelizable to +~3–4 weeks with two devs (one on 0–2 infra, one on 3–6 platform code). + +## Regression guardrails +- Keep `h700` additions out of `workspace/all/` except: rotation hook (04), any + `HAS_BTAGENT`-style makefile gates, updater case — list every `all/` touch in the PR + description and re-run a tg5040 build (`make PLATFORM=tg5040 build`) in CI for every + h700 PR (both platforms build from the same shared tree). +- Snapshot the probe outputs (00-device-facts) into the repo; re-run the probe script + after each Anbernic stock-firmware update (paths have historically been stable, but + `dmenu_ln`/muos hooks are stockmod-version-dependent). diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md new file mode 100644 index 000000000..46037e79c --- /dev/null +++ b/docs/h700-port/README.md @@ -0,0 +1,87 @@ +# NextUI → Allwinner H700 (Anbernic RG XX) Port Plan + +**Goal:** run NextUI on the Anbernic RG XX line (Allwinner H700) with feature parity +with the TrimUI Brick (tg5040) — including displaycal, WiFi/BT, and first-class +sleep leveraging the stock OS's excellent suspend — installed *on top of the latest +Anbernic stock OS*, no reflash, fully reversible. + +**Initial targets:** RG40XXV and RG34XXSP. RG28XX (rotated panel) follows. CubeXX, +HDMI-out and the wider RG35XX family are follow-ups on the same platform code. + +## Documents + +| Doc | Contents | +|---|---| +| [00-device-facts.md](00-device-facts.md) | Ground truth: live probe results from RG40XXV + TG5040, old-port sysfs inventory, boot-chain analysis | +| [01-toolchain-and-build.md](01-toolchain-and-build.md) | h700-toolchain docker image, sysroot, repo/build integration | +| [02-boot-and-installer.md](02-boot-and-installer.md) | dmenu.bin hijack, installer, SD layouts, skeleton tree | +| [03-platform-layer.md](03-platform-layer.md) | `workspace/h700/`: platform.c/h, input, libmsettings, keymon, cores | +| [04-video-display.md](04-video-display.md) | SDL2+Mali/GLES stack, per-device geometry, RG28XX rotation, HDMI, displaycal | +| [05-audio.md](05-audio.md) | ALSA/SDL audio, volume/mute, jack, BT audio | +| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Deep sleep, wake, lid (34XXSP), battery, governors, poweroff | +| [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | wpa_supplicant strategy, bluealsa, parity checklist | +| [08-testing-and-rollout.md](08-testing-and-rollout.md) | Phase-0 spikes, validation matrix, phases & estimates | + +## Why this port is very tractable (evidence-based) + +1. **Same silicon family, same BSP generation as the reference platform.** H700 and + the TG5040's A133P are both quad-A53 Allwinner SoCs on 4.9 BSP kernels with the + same disp2 display driver (`/dev/disp`, identical `/sys/class/disp` attrs — verified), + the same AXP2202-family PMIC with the *same* battery sysfs paths (verified), and + `freeze mem` suspend (verified working by suspending the actual RG40XXV remotely). +2. **Same CPU arch and compatible glibc.** Stock RG OS is Ubuntu 22.04 arm64 + (glibc 2.35) vs tg5040's glibc 2.33 — tg5040-built aarch64/cortex-a53 binaries are + ABI-compatible with the target. Cores list ports unchanged; no 32-bit toolchain + resurrection needed (the old rg35xxplus port was 32-bit — we go 64-bit). +3. **NextUI's platform abstraction is clean.** Shared code (`workspace/all/`) has + essentially zero platform #ifdefs; a platform = one directory + skeleton + toolchain + image. tg5050 proves the clone-and-repoint model. +4. **The old MinUI rg35xxplus port is recoverable from git** (`git show 8cd78866:...`) + and documents every H700 hardware path — buttons, brightness ioctl, rumble, lid, + HDMI, boot hijack — most re-verified live on 2026 firmware during this planning. + It is a *hardware-paths reference only*: its software architecture (32-bit, + SDL_Renderer, pre-shader-era APIs) is obsolete; **tg5040 is the golden platform** + and the code clone base. +5. **The boot hijack still exists on current firmware** (verified in the stock + launcher scripts on-device): drop `dmenu.bin` on the FAT ROMs partition → stock + runs it instead of its frontend. Reversible by deleting one file. + +## Key decisions (rationale in the linked docs) + +| Decision | Choice | Doc | +|---|---|---| +| Platform name | `h700` (one platform, `DEVICE` env selects rg40xx/rg34xx/rg28xx/cube — the tg5040 `is_brick` pattern) | 03 | +| Arch | aarch64 / cortex-a53, 64-bit (matches stock OS & tg5040 flags) | 01 | +| Toolchain | **Reuse the tg5040 docker image** (empirically proven: tg5040-built displaycal.elf runs on stockmod + Knulli); custom SDL2 built in-tree (`workspace/h700/other/`, old-port pattern); dedicated image deferred | 01 | +| Video | Bundled custom SDL2 (JohnnyonFlame/SDL-malifbdev-rot, rebuilt 64-bit) + Mali-G31 blob GLES 3.2 → NextUI's generic_video/shader pipeline unchanged | 04 | +| Rotation (28xx) | Try SDL-level rot first; durable plan = small rotation hook in generic_video present pass | 04 | +| Sleep | `echo mem` (verified) + tg5040-style suspend wrapper (wifi bounce on resume required — observed); power-button wake; RTC wake unavailable | 06 | +| Lid (34XXSP) | `axp2202-battery/hallkey`, old-port semantics in current `PLAT_initLid/lidChanged` API | 06 | +| WiFi | NextUI-owned wpa_supplicant (generic_wifi.c unchanged); stop NetworkManager at launch | 07 | +| BT | System BlueZ 5.64 + ship bluealsa (no btmanager pakz needed) | 07 | +| Rumble | `axp2202-battery/moto` (on/off) | 03 | +| LEDs | `MAX_LIGHTS 0`; `work_led`/`workled_sleep` for power-LED sleep signaling only | 03 | +| Brightness / displaycal | Same `/dev/disp` ioctls as tg5040 (0x102 brightness, 0x10b-d gamma LUT) — expected 1:1 | 04 | +| Install location | NextUI entirely on TF2 (`/mnt/sdcard`); stock TF1 card untouched except one drag-dropped `dmenu.bin` on its FAT ROMs partition (the verified stock-boot hijack; stock OS partitions never written). No TF1-only mode. | 02 | + +## Top risks (each has a fallback documented) + +1. ~~Mali blob 32-bit-only / wrong winsys~~ **RESOLVED ✔** (verified on device): + blob is 64-bit aarch64, OpenGL ES 3.2 (r20p0, matching kernel kbase), fbdev EGL + winsys — and the stock OS's own SDL2 is 64-bit built on the `mali` video driver. + The planned stack is exactly what the device already runs (00/04). +2. **NextUI UI regressions at 480p** — no 480-line platform has existed for ~2 years; + layout/pill/font audit budgeted (04). +3. **RG28XX rotation through the GL path** — the malifbdev-rot patch may only rotate + the non-GL blitter; the generic_video rotation hook is the designed fallback (04). +4. **stockmod boot precedence** (`muos1.ini` beats our hijack) — documentation + + installer detection (02). +5. **Sleep-resume WiFi/panel quirks** — resume-side re-init is planned work, not an + afterthought (06); 20-cycle + overnight-drain acceptance tests (08). + +## Timeline + +~6–8 weeks single-dev to a 40XXV + 34XXSP beta; RG28XX ≈ +1 week after. Phase table +with per-phase exit criteria in [08-testing-and-rollout.md](08-testing-and-rollout.md). +Start with the Phase-0 spike list — every architectural bet above gets proven or +re-planned within the first week, before any large code investment. From c8dc572b5dd487f3ffb0cbfec0379e5068e25701 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 16:08:58 +0200 Subject: [PATCH 04/76] feat(h700): add rg40xx beta platform Add the initial Allwinner H700 platform for Anbernic RG XX devices, using the existing tg5040 toolchain image while forcing in-container builds to run as PLATFORM=h700. This wires the new platform into the build and package skeleton, adds the dmenu.bin boot shim and TF2 installer/update flow, builds and bundles the Mali fbdev SDL2 runtime, ports the platform layer to H700 sysfs and input paths, adds H700 libmsettings/keymon/rfkill support, and exposes H700 displaycal, WiFi, and Bluetooth settings. The runtime skeleton owns /mnt/sdcard with /mnt/SDCARD compatibility, stops conflicting stock services, starts H700 WiFi/BT helpers, supports mem suspend with radio bounce on resume, and keeps RG34XXSP/RG28XX detection guarded for later hardware validation. --- makefile | 8 +- makefile.toolchain | 25 +- skeleton/BOOT/common/updater | 8 +- skeleton/EXTRAS/Emus/h700/32X.pak/default.cfg | 19 + skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh | 14 + .../EXTRAS/Emus/h700/A2600.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/A2600.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/A5200.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/A5200.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/A7800.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/A7800.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/C128.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/C128.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/C64.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/C64.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/COLECO.pak/default.cfg | 14 + .../EXTRAS/Emus/h700/COLECO.pak/launch.sh | 15 + .../Emus/h700/CPC.pak/default-brick.cfg | 2 + skeleton/EXTRAS/Emus/h700/CPC.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/CPC.pak/launch.sh | 15 + .../Emus/h700/FBN.pak/default-brick.cfg | 15 + skeleton/EXTRAS/Emus/h700/FBN.pak/default.cfg | 15 + skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh | 14 + skeleton/EXTRAS/Emus/h700/FDS.pak/default.cfg | 20 + skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh | 14 + skeleton/EXTRAS/Emus/h700/GG.pak/default.cfg | 18 + skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh | 14 + .../EXTRAS/Emus/h700/LYNX.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/LYNX.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/MGBA.pak/default.cfg | 18 + skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/MSX.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/NGP.pak/default.cfg | 9 + skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/NGPC.pak/default.cfg | 7 + skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/P8.pak/default.cfg | 7 + skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/PCE.pak/default.cfg | 15 + skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/PET.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/PET.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/PKM.pak/default.cfg | 17 + skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/PLUS4.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/PLUS4.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/PRBOOM.pak/default.cfg | 18 + .../EXTRAS/Emus/h700/PRBOOM.pak/launch.sh | 74 + .../Emus/h700/PUAE.pak/default-brick.cfg | 47 + .../EXTRAS/Emus/h700/PUAE.pak/default.cfg | 17 + skeleton/EXTRAS/Emus/h700/PUAE.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/SEGACD.pak/default.cfg | 18 + .../EXTRAS/Emus/h700/SEGACD.pak/launch.sh | 14 + .../EXTRAS/Emus/h700/SG1000.pak/default.cfg | 19 + .../EXTRAS/Emus/h700/SG1000.pak/launch.sh | 14 + skeleton/EXTRAS/Emus/h700/SGB.pak/default.cfg | 24 + skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/SMS.pak/default.cfg | 19 + skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh | 14 + .../EXTRAS/Emus/h700/SUPA.pak/default.cfg | 16 + skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh | 15 + .../EXTRAS/Emus/h700/VB.pak/default-brick.cfg | 21 + skeleton/EXTRAS/Emus/h700/VB.pak/default.cfg | 20 + skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh | 15 + skeleton/EXTRAS/Emus/h700/VIC.pak/default.cfg | 14 + skeleton/EXTRAS/Emus/h700/VIC.pak/launch.sh | 15 + .../EXTRAS/Tools/h700/Battery.pak/launch.sh | 4 + .../EXTRAS/Tools/h700/Clock.pak/launch.sh | 4 + skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg | 6 + .../EXTRAS/Tools/h700/Files.pak/launch.sh | 8 + .../Tools/h700/Game Tracker.pak/launch.sh | 4 + .../EXTRAS/Tools/h700/Input.pak/launch.sh | 4 + .../EXTRAS/Tools/h700/Settings.pak/launch.sh | 8 + skeleton/SYSTEM/h700/bin/governor.sh | 58 + skeleton/SYSTEM/h700/bin/reboot_next | 39 + skeleton/SYSTEM/h700/bin/run_hooks.sh | 36 + skeleton/SYSTEM/h700/bin/setterm | 3 + skeleton/SYSTEM/h700/bin/suspend | 103 ++ skeleton/SYSTEM/h700/cores/.keep | 0 skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh | 50 + skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh | 71 + skeleton/SYSTEM/h700/lib/.keep | 0 .../h700/paks/Emus/FC.pak/default-brick.cfg | 20 + .../SYSTEM/h700/paks/Emus/FC.pak/default.cfg | 20 + .../SYSTEM/h700/paks/Emus/FC.pak/launch.sh | 14 + .../SYSTEM/h700/paks/Emus/GB.pak/default.cfg | 18 + .../SYSTEM/h700/paks/Emus/GB.pak/launch.sh | 14 + .../SYSTEM/h700/paks/Emus/GBA.pak/default.cfg | 14 + .../SYSTEM/h700/paks/Emus/GBA.pak/launch.sh | 14 + .../SYSTEM/h700/paks/Emus/GBC.pak/default.cfg | 15 + .../SYSTEM/h700/paks/Emus/GBC.pak/launch.sh | 14 + .../SYSTEM/h700/paks/Emus/MD.pak/default.cfg | 18 + .../SYSTEM/h700/paks/Emus/MD.pak/launch.sh | 14 + .../h700/paks/Emus/PS.pak/default-brick.cfg | 23 + .../SYSTEM/h700/paks/Emus/PS.pak/default.cfg | 24 + .../SYSTEM/h700/paks/Emus/PS.pak/launch.sh | 14 + .../h700/paks/Emus/SFC.pak/default-brick.cfg | 12 + .../SYSTEM/h700/paks/Emus/SFC.pak/default.cfg | 12 + .../SYSTEM/h700/paks/Emus/SFC.pak/launch.sh | 14 + skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 148 ++ skeleton/SYSTEM/h700/shaders/colorfix.glsl | 21 + skeleton/SYSTEM/h700/shaders/default.glsl | 21 + skeleton/SYSTEM/h700/shaders/noshader.glsl | 21 + skeleton/SYSTEM/h700/shaders/overlay.glsl | 20 + skeleton/SYSTEM/h700/shaders/pixellate.glsl | 143 ++ skeleton/SYSTEM/h700/system-brick.cfg | 19 + skeleton/SYSTEM/h700/system.cfg | 19 + workspace/all/settings/makefile | 6 + workspace/all/settings/settings.cpp | 42 +- workspace/h700/boot/boot.sh | 79 + workspace/h700/boot/build.sh | 15 + workspace/h700/cores/makefile | 131 ++ workspace/h700/cores/patches/a2600.patch | 24 + workspace/h700/cores/patches/a5200.patch | 23 + workspace/h700/cores/patches/a7800.patch | 23 + workspace/h700/cores/patches/bluemsx.patch | 30 + workspace/h700/cores/patches/c128.patch | 21 + workspace/h700/cores/patches/c64.patch | 21 + workspace/h700/cores/patches/fake-08.patch | 22 + workspace/h700/cores/patches/fbneo.patch | 108 ++ workspace/h700/cores/patches/fceumm.patch | 28 + workspace/h700/cores/patches/gambatte.patch | 24 + workspace/h700/cores/patches/gearcoleco.patch | 29 + workspace/h700/cores/patches/gpsp.patch | 26 + workspace/h700/cores/patches/handy.patch | 22 + .../h700/cores/patches/libretro-cap32.patch | 29 + .../h700/cores/patches/libretro-uae.patch | 45 + .../cores/patches/mednafen_pce_fast.patch | 25 + .../cores/patches/mednafen_supafaust.patch | 34 + .../h700/cores/patches/mednafen_vb.patch | 29 + workspace/h700/cores/patches/mgba.patch | 31 + .../h700/cores/patches/pcsx_rearmed.patch | 30 + workspace/h700/cores/patches/pet.patch | 21 + workspace/h700/cores/patches/picodrive.patch | 36 + workspace/h700/cores/patches/plus4.patch | 21 + workspace/h700/cores/patches/pokemini.patch | 27 + workspace/h700/cores/patches/prboom.patch | 30 + workspace/h700/cores/patches/race.patch | 23 + workspace/h700/cores/patches/snes9x.patch | 22 + .../h700/cores/patches/snes9x2005_plus.patch | 36 + workspace/h700/cores/patches/vic.patch | 21 + workspace/h700/install/boot.sh | 68 + workspace/h700/install/logo.png | Bin 0 -> 18240 bytes workspace/h700/install/update.sh | 22 + workspace/h700/keymon/credits.txt | 3 + workspace/h700/keymon/keymon.c | 170 +++ workspace/h700/keymon/makefile | 22 + workspace/h700/libmsettings/makefile | 33 + workspace/h700/libmsettings/msettings.c | 1302 +++++++++++++++++ workspace/h700/libmsettings/msettings.h | 108 ++ workspace/h700/makefile | 57 + workspace/h700/platform/makefile.copy | 20 + workspace/h700/platform/makefile.env | 24 + workspace/h700/platform/platform.c | 610 ++++++++ workspace/h700/platform/platform.h | 149 ++ workspace/h700/rfkill/makefile | 14 + workspace/h700/rfkill/rfkill.c | 117 ++ workspace/makefile | 10 + 159 files changed, 6014 insertions(+), 25 deletions(-) create mode 100644 skeleton/EXTRAS/Emus/h700/32X.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/A2600.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/A2600.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/A5200.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/A5200.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/A7800.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/A7800.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/C128.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/C128.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/C64.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/C64.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/COLECO.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/CPC.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/CPC.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/FBN.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/FDS.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/GG.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/LYNX.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/LYNX.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/MGBA.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/MSX.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/NGP.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/NGPC.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/P8.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/PCE.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/PET.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/PET.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/PKM.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/PLUS4.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/PLUS4.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/PRBOOM.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/PRBOOM.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/PUAE.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/PUAE.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/SEGACD.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/SG1000.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/SGB.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/SMS.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/SUPA.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/VB.pak/default.cfg create mode 100755 skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh create mode 100644 skeleton/EXTRAS/Emus/h700/VIC.pak/default.cfg create mode 100644 skeleton/EXTRAS/Emus/h700/VIC.pak/launch.sh create mode 100755 skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh create mode 100755 skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh create mode 100644 skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg create mode 100755 skeleton/EXTRAS/Tools/h700/Files.pak/launch.sh create mode 100755 skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh create mode 100755 skeleton/EXTRAS/Tools/h700/Input.pak/launch.sh create mode 100644 skeleton/EXTRAS/Tools/h700/Settings.pak/launch.sh create mode 100755 skeleton/SYSTEM/h700/bin/governor.sh create mode 100755 skeleton/SYSTEM/h700/bin/reboot_next create mode 100755 skeleton/SYSTEM/h700/bin/run_hooks.sh create mode 100755 skeleton/SYSTEM/h700/bin/setterm create mode 100755 skeleton/SYSTEM/h700/bin/suspend create mode 100644 skeleton/SYSTEM/h700/cores/.keep create mode 100755 skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh create mode 100755 skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh create mode 100644 skeleton/SYSTEM/h700/lib/.keep create mode 100644 skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg create mode 100644 skeleton/SYSTEM/h700/paks/Emus/FC.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/paks/Emus/GB.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/paks/Emus/GBA.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/paks/Emus/GBC.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/paks/Emus/MD.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg create mode 100644 skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg create mode 100644 skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default.cfg create mode 100755 skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh create mode 100755 skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh create mode 100644 skeleton/SYSTEM/h700/shaders/colorfix.glsl create mode 100644 skeleton/SYSTEM/h700/shaders/default.glsl create mode 100644 skeleton/SYSTEM/h700/shaders/noshader.glsl create mode 100644 skeleton/SYSTEM/h700/shaders/overlay.glsl create mode 100644 skeleton/SYSTEM/h700/shaders/pixellate.glsl create mode 100644 skeleton/SYSTEM/h700/system-brick.cfg create mode 100644 skeleton/SYSTEM/h700/system.cfg create mode 100755 workspace/h700/boot/boot.sh create mode 100755 workspace/h700/boot/build.sh create mode 100755 workspace/h700/cores/makefile create mode 100644 workspace/h700/cores/patches/a2600.patch create mode 100644 workspace/h700/cores/patches/a5200.patch create mode 100644 workspace/h700/cores/patches/a7800.patch create mode 100644 workspace/h700/cores/patches/bluemsx.patch create mode 100644 workspace/h700/cores/patches/c128.patch create mode 100644 workspace/h700/cores/patches/c64.patch create mode 100644 workspace/h700/cores/patches/fake-08.patch create mode 100644 workspace/h700/cores/patches/fbneo.patch create mode 100644 workspace/h700/cores/patches/fceumm.patch create mode 100644 workspace/h700/cores/patches/gambatte.patch create mode 100644 workspace/h700/cores/patches/gearcoleco.patch create mode 100644 workspace/h700/cores/patches/gpsp.patch create mode 100644 workspace/h700/cores/patches/handy.patch create mode 100644 workspace/h700/cores/patches/libretro-cap32.patch create mode 100644 workspace/h700/cores/patches/libretro-uae.patch create mode 100644 workspace/h700/cores/patches/mednafen_pce_fast.patch create mode 100644 workspace/h700/cores/patches/mednafen_supafaust.patch create mode 100644 workspace/h700/cores/patches/mednafen_vb.patch create mode 100644 workspace/h700/cores/patches/mgba.patch create mode 100644 workspace/h700/cores/patches/pcsx_rearmed.patch create mode 100644 workspace/h700/cores/patches/pet.patch create mode 100644 workspace/h700/cores/patches/picodrive.patch create mode 100644 workspace/h700/cores/patches/plus4.patch create mode 100644 workspace/h700/cores/patches/pokemini.patch create mode 100644 workspace/h700/cores/patches/prboom.patch create mode 100644 workspace/h700/cores/patches/race.patch create mode 100644 workspace/h700/cores/patches/snes9x.patch create mode 100644 workspace/h700/cores/patches/snes9x2005_plus.patch create mode 100644 workspace/h700/cores/patches/vic.patch create mode 100755 workspace/h700/install/boot.sh create mode 100644 workspace/h700/install/logo.png create mode 100755 workspace/h700/install/update.sh create mode 100644 workspace/h700/keymon/credits.txt create mode 100644 workspace/h700/keymon/keymon.c create mode 100755 workspace/h700/keymon/makefile create mode 100644 workspace/h700/libmsettings/makefile create mode 100644 workspace/h700/libmsettings/msettings.c create mode 100644 workspace/h700/libmsettings/msettings.h create mode 100644 workspace/h700/makefile create mode 100644 workspace/h700/platform/makefile.copy create mode 100644 workspace/h700/platform/makefile.env create mode 100644 workspace/h700/platform/platform.c create mode 100644 workspace/h700/platform/platform.h create mode 100644 workspace/h700/rfkill/makefile create mode 100644 workspace/h700/rfkill/rfkill.c diff --git a/makefile b/makefile index fed3da9f6..96a4b066f 100644 --- a/makefile +++ b/makefile @@ -12,7 +12,7 @@ endif ifeq (,$(PLATFORMS)) #PLATFORMS = miyoomini trimuismart rg35xx rg35xxplus my355 tg5040 zero28 rgb30 m17 gkdpixel my282 magicmini -PLATFORMS = tg5050 tg5040 +PLATFORMS = tg5050 tg5040 h700 endif ########################################################### @@ -111,7 +111,7 @@ ifeq ($(PLATFORM), tg5040) cp ./workspace/$(PLATFORM)/poweroff_next/build/$(PLATFORM)/poweroff_next.elf ./build/SYSTEM/$(PLATFORM)/bin/poweroff_next endif endif -ifneq (,$(filter $(PLATFORM),tg5040 tg5050 my355)) +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700 my355)) # Audio resampling cp ./workspace/all/minarch/build/$(PLATFORM)/libsamplerate.* ./build/SYSTEM/$(PLATFORM)/lib/ @@ -125,7 +125,7 @@ ifneq (,$(filter $(PLATFORM),tg5040 tg5050 my355)) cp ./workspace/all/minarch/build/$(PLATFORM)/libchdr.so.* ./build/SYSTEM/$(PLATFORM)/lib/ cp ./workspace/all/minarch/build/$(PLATFORM)/libcrypto.so.* ./build/SYSTEM/$(PLATFORM)/lib/ -ifeq ($(PLATFORM), tg5040) +ifneq (,$(filter $(PLATFORM),tg5040 h700)) # liblz4 for Rewind support cp -L ./workspace/all/minarch/build/$(PLATFORM)/liblz4.so.1 ./build/SYSTEM/$(PLATFORM)/lib/ endif @@ -265,7 +265,7 @@ package: tidy # TODO: can I just add everything in BASE to zip? # cd ./build/BASE && zip -r ../../releases/$(RELEASE_NAME)-base.zip Bios Roms Saves miyoo miyoo354 trimui rg35xx rg35xxplus gkdpixel miyoo355 magicx em_ui.sh MinUI.zip README.txt - cd ./build/BASE && zip -r ../../releases/$(RELEASE_NAME)-base.zip Bios Roms Saves Shaders Overlays trimui em_ui.sh MinUI.zip *.pakz README.txt + cd ./build/BASE && zip -r ../../releases/$(RELEASE_NAME)-base.zip Bios Roms Saves Shaders Overlays trimui h700 em_ui.sh MinUI.zip *.pakz README.txt cd ./build/EXTRAS && zip -r ../../releases/$(RELEASE_NAME)-extras.zip Bios Emus Roms Saves Shaders Overlays Tools README.txt echo "$(RELEASE_VERSION)" > ./build/latest.txt diff --git a/makefile.toolchain b/makefile.toolchain index fba8ecee0..95d28ec7e 100644 --- a/makefile.toolchain +++ b/makefile.toolchain @@ -9,9 +9,14 @@ endif HOST_WORKSPACE=$(shell pwd)/workspace GUEST_WORKSPACE=/root/workspace -GIT_IF_NECESSARY=toolchains/$(PLATFORM)-toolchain -INIT_IF_NECESSARY=toolchains/$(PLATFORM)-toolchain/.build -IMAGE_NAME=ghcr.io/loveretro/$(PLATFORM)-toolchain:latest +TOOLCHAIN_NAME=$(PLATFORM) +ifeq ($(PLATFORM),h700) +TOOLCHAIN_NAME=tg5040 +endif + +GIT_IF_NECESSARY=toolchains/$(TOOLCHAIN_NAME)-toolchain +INIT_IF_NECESSARY=toolchains/$(TOOLCHAIN_NAME)-toolchain/.build +IMAGE_NAME=ghcr.io/loveretro/$(TOOLCHAIN_NAME)-toolchain:latest CONTAINER_RUNTIME ?= $(shell command -v docker 2>/dev/null || command -v podman 2>/dev/null) ifeq (,$(CONTAINER_RUNTIME)) @@ -31,15 +36,15 @@ all: $(INIT_IF_NECESSARY) $(CONTAINER_RUNTIME) run -it --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) $(IMAGE_NAME) /bin/bash $(INIT_IF_NECESSARY): $(GIT_IF_NECESSARY) - cd toolchains/$(PLATFORM)-toolchain && make .build + cd toolchains/$(TOOLCHAIN_NAME)-toolchain && make .build $(GIT_IF_NECESSARY): mkdir -p toolchains - git clone https://github.com/LoveRetro/$(PLATFORM)-toolchain/ toolchains/$(PLATFORM)-toolchain - $(CONTAINER_RUNTIME) pull $(IMAGE_NAME) && touch toolchains/$(PLATFORM)-toolchain/.build + git clone https://github.com/LoveRetro/$(TOOLCHAIN_NAME)-toolchain/ toolchains/$(TOOLCHAIN_NAME)-toolchain + $(CONTAINER_RUNTIME) pull $(IMAGE_NAME) && touch toolchains/$(TOOLCHAIN_NAME)-toolchain/.build clean: - cd toolchains/$(PLATFORM)-toolchain && make clean + cd toolchains/$(TOOLCHAIN_NAME)-toolchain && make clean _runtime_check: @if [ -n "$(LAST_RUNTIME)" ] && [ "$(LAST_RUNTIME)" != "$(CURRENT_RUNTIME)" ]; then \ @@ -56,16 +61,16 @@ _runtime_check: fi build: $(INIT_IF_NECESSARY) _runtime_check - $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && cd /root/workspace && make' + $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make PLATFORM=$(PLATFORM)' @echo "$(CURRENT_RUNTIME)" > $(RUNTIME_MARKER) build-cores: $(INIT_IF_NECESSARY) _runtime_check - $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && cd /root/workspace && make cores' + $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make cores PLATFORM=$(PLATFORM)' @echo "$(CURRENT_RUNTIME)" > $(RUNTIME_MARKER) build-core: $(INIT_IF_NECESSARY) _runtime_check ifndef CORE $(error CORE is not set) endif - $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e CORE=$(CORE) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && cd /root/workspace && make core' + $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e CORE=$(CORE) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make core PLATFORM=$(PLATFORM)' @echo "$(CURRENT_RUNTIME)" > $(RUNTIME_MARKER) diff --git a/skeleton/BOOT/common/updater b/skeleton/BOOT/common/updater index db8357a7d..e280ad509 100755 --- a/skeleton/BOOT/common/updater +++ b/skeleton/BOOT/common/updater @@ -3,6 +3,10 @@ # NOTE: becomes .tmp_update/updater INFO=`cat /proc/cpuinfo 2> /dev/null` +MODEL=`cat /proc/device-tree/model 2> /dev/null` +if echo "$MODEL" | grep -q "sun50iw9"; then + PLATFORM="h700" # Anbernic RG XX, Allwinner H700 +fi case $INFO in *"sun8i"*) if [ -d /usr/miyoo ]; then @@ -21,7 +25,9 @@ case $INFO in PLATFORM="tg5050" # Trimui Smart Pro S ;; *"0xd03"*) - PLATFORM="zero28" # MagicX Mini Zero 28 + if [ -z "$PLATFORM" ]; then + PLATFORM="zero28" # MagicX Mini Zero 28 + fi ;; *"0xd05"*) PLATFORM="my355" # Miyoo Flip diff --git a/skeleton/EXTRAS/Emus/h700/32X.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/32X.pak/default.cfg new file mode 100644 index 000000000..368a439ab --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/32X.pak/default.cfg @@ -0,0 +1,19 @@ +-picodrive_drc = enabled +-picodrive_sound_rate = 44100 +-picodrive_smstype = Auto +-picodrive_smsfm = off +-picodrive_smsmapper = Auto +-picodrive_ggghost = off + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Mode = SELECT +bind Start = START +bind A Button = Y +bind B Button = X:B +bind C Button = A +bind X Button = B:L1 +bind Y Button = L1:X +bind Z Button = R1 diff --git a/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh new file mode 100755 index 000000000..81688be79 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=picodrive + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/A2600.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/A2600.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/A2600.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/A2600.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/A2600.pak/launch.sh new file mode 100644 index 000000000..4646f9b42 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/A2600.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=stella2014 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/A5200.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/A5200.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/A5200.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/A5200.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/A5200.pak/launch.sh new file mode 100644 index 000000000..b42bc170a --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/A5200.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=a5200 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/A7800.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/A7800.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/A7800.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/A7800.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/A7800.pak/launch.sh new file mode 100644 index 000000000..38fccc181 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/A7800.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=prosystem +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/C128.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/C128.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/C128.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/C128.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/C128.pak/launch.sh new file mode 100644 index 000000000..50a003646 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/C128.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=vice_x128 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/C64.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/C64.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/C64.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/C64.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/C64.pak/launch.sh new file mode 100644 index 000000000..2e8dfeff3 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/C64.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=vice_x64 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/COLECO.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/COLECO.pak/default.cfg new file mode 100644 index 000000000..acd0b6a74 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/COLECO.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh new file mode 100755 index 000000000..ddb9c7afe --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=gearcoleco +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg new file mode 100644 index 000000000..9b87cb236 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg @@ -0,0 +1,2 @@ +minarch_screen_scaling = Aspect + diff --git a/skeleton/EXTRAS/Emus/h700/CPC.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/CPC.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/CPC.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/CPC.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/CPC.pak/launch.sh new file mode 100644 index 000000000..67edeb06a --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/CPC.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=cap32 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg new file mode 100644 index 000000000..af5d06f3f --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg @@ -0,0 +1,15 @@ +-fbneo-vertical-mode = disabled +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/FBN.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/FBN.pak/default.cfg new file mode 100644 index 000000000..cff2093e2 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/FBN.pak/default.cfg @@ -0,0 +1,15 @@ +-fbneo-vertical-mode = disabled +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh new file mode 100755 index 000000000..4022ab817 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=fbneo +CORES_PATH=$(dirname "$0") +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/FDS.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/FDS.pak/default.cfg new file mode 100644 index 000000000..677c0359b --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/FDS.pak/default.cfg @@ -0,0 +1,20 @@ +fceumm_sndquality = High +fceumm_sndvolume = 10 +-fceumm_aspect = 8:7 PAR +-fceumm_turbo_enable = Player 1 +-fceumm_show_adv_system_options = disabled +-fceumm_show_adv_sound_options = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind Change Disk = L1 +bind Insert Disk = R1 +bind Insert Coin = NONE:R2 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh new file mode 100755 index 000000000..280598bbc --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=fceumm + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/GG.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/GG.pak/default.cfg new file mode 100644 index 000000000..44ce34743 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/GG.pak/default.cfg @@ -0,0 +1,18 @@ +-picodrive_smstype = Game Gear +-picodrive_smsmapper = Auto +-picodrive_sound_rate = 44100 +-picodrive_ramcart = disabled +-picodrive_dacnoise = disabled +-picodrive_input1 = 3 button pad +-picodrive_input2 = 3 button pad +-picodrive_fm_filter = off +-picodrive_audio_filter = disabled +-picodrive_overclk68k = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Button 1 = B +bind Button 2 = A +bind Pause = START \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh new file mode 100755 index 000000000..81688be79 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=picodrive + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/LYNX.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/LYNX.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/LYNX.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/LYNX.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/LYNX.pak/launch.sh new file mode 100755 index 000000000..98b51743d --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/LYNX.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=handy +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/MGBA.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/MGBA.pak/default.cfg new file mode 100644 index 000000000..266d90c20 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/MGBA.pak/default.cfg @@ -0,0 +1,18 @@ +mgba_skip_bios = ON + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind L Button = L1 +bind R Button = R1 +bind L Turbo = NONE:L2 +bind R Turbo = NONE:R2 +bind More Sun = NONE:L3 +bind Less Sun = NONE:R3 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh new file mode 100755 index 000000000..796c1be58 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=mgba +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/MSX.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/MSX.pak/default.cfg new file mode 100644 index 000000000..acd0b6a74 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/MSX.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh new file mode 100755 index 000000000..f0b1bbc7f --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=bluemsx +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/NGP.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/NGP.pak/default.cfg new file mode 100644 index 000000000..33f5a6b95 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/NGP.pak/default.cfg @@ -0,0 +1,9 @@ +race_dark_filter_level = 50 + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind A Button = B +bind B Button = A +bind Option = START \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh new file mode 100755 index 000000000..138a2b10b --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=race +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/NGPC.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/NGPC.pak/default.cfg new file mode 100644 index 000000000..7d05719ba --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/NGPC.pak/default.cfg @@ -0,0 +1,7 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind A Button = B +bind B Button = A +bind Option = START \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh new file mode 100755 index 000000000..138a2b10b --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=race +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/P8.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/P8.pak/default.cfg new file mode 100644 index 000000000..73611d3f3 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/P8.pak/default.cfg @@ -0,0 +1,7 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind A Button = A +bind B Button = B +bind Start = START \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh new file mode 100755 index 000000000..b3de7565d --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=fake08 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/PCE.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/PCE.pak/default.cfg new file mode 100644 index 000000000..671219086 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PCE.pak/default.cfg @@ -0,0 +1,15 @@ +-pce_fast_turbo_toggle_hotkey = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Run = START +bind I = A +bind II = B +bind III = Y +bind IV = X +bind V = L1 +bind VI = R1 +bind Mode = L2 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh new file mode 100755 index 000000000..7bf829940 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=mednafen_pce_fast +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/PET.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/PET.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PET.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/PET.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PET.pak/launch.sh new file mode 100644 index 000000000..e7b71659f --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PET.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=vice_xpet +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/PKM.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/PKM.pak/default.cfg new file mode 100644 index 000000000..031fac732 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PKM.pak/default.cfg @@ -0,0 +1,17 @@ +minarch_screen_scaling = Native + +pokemini_video_scale = 5x +-pokemini_60hz_mode = enabled +pokemini_palette = Old +pokemini_piezofilter = disabled +pokemini_lowpass_filter = enabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind A Button = A +bind B Button = B +bind C Button = R1 +bind Shake = L1 +bind Power = SELECT diff --git a/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh new file mode 100755 index 000000000..098f76f1c --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=pokemini +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/PLUS4.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/PLUS4.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PLUS4.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/PLUS4.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PLUS4.pak/launch.sh new file mode 100644 index 000000000..e9851f25e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PLUS4.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=vice_xplus4 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/PRBOOM.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/PRBOOM.pak/default.cfg new file mode 100644 index 000000000..b10538a03 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PRBOOM.pak/default.cfg @@ -0,0 +1,18 @@ +prboom-mouse_on = disabled +prboom-find_recursive_on = enabled +prboom-analog_deadzone = 15 +prboom-purge_limit = 16 +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/PRBOOM.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PRBOOM.pak/launch.sh new file mode 100644 index 000000000..d7d8fb54e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PRBOOM.pak/launch.sh @@ -0,0 +1,74 @@ +#!/bin/sh +set -x +PAK_DIR="$(dirname "$0")" +PAK_NAME="$(basename "$PAK_DIR")" +PAK_NAME="${PAK_NAME%.*}" + +EMU_EXE=prboom +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) + +rm -f "$LOGS_PATH/$EMU_TAG.txt" +exec >>"$LOGS_PATH/$EMU_TAG.txt" +exec 2>&1 + +get_doom_version() { + DOOM_VERSION="" + if [ -f "$ROM" ]; then + # get the directory of the file + ROM_DIR=$(dirname "$ROM") + if [ -f "$ROM_DIR/doom.version" ]; then + DOOM_VERSION=$(cat "$ROM_DIR/doom.version") + fi + fi + echo "$DOOM_VERSION" +} + +prep_doom_folder() { + DOOM_VERSION="$1" + + if [ -z "$DOOM_VERSION" ]; then + return + fi + + if [ ! -d "$BIOS_PATH/PRBOOM/$DOOM_VERSION" ]; then + return + fi + + if [ ! -f "$BIOS_PATH/PRBOOM/$DOOM_VERSION/prboom.wad" ] && [ -f "$BIOS_PATH/PRBOOM/prboom.wad" ]; then + cp "$BIOS_PATH/PRBOOM/prboom.wad" "$BIOS_PATH/PRBOOM/$DOOM_VERSION/prboom.wad" + fi + + touch "$BIOS_PATH/PRBOOM/$DOOM_VERSION/prboom.cfg" + mkdir -p "$BIOS_PATH/PRBOOM/prboom" + mount -o bind "$BIOS_PATH/PRBOOM/$DOOM_VERSION" "$BIOS_PATH/PRBOOM/prboom" +} + +cleanup() { + umount "$BIOS_PATH/PRBOOM/prboom" || true +} + +main() { + trap "cleanup" EXIT INT TERM HUP QUIT + + ROM="$1" + mkdir -p "$BIOS_PATH/$EMU_TAG" + mkdir -p "$SAVES_PATH/$EMU_TAG" + HOME="$USERDATA_PATH" + cd "$HOME" || exit 1 + + DOOM_VERSION="$(get_doom_version "$ROM")" + prep_doom_folder "$DOOM_VERSION" + + if [ ! -f "$BIOS_PATH/PRBOOM/prboom/prboom.wad" ] && [ ! -f "$BIOS_PATH/PRBOOM/prboom.wad" ]; then + echo "No prboom.wad found in $BIOS_PATH/PRBOOM or $BIOS_PATH/PRBOOM/prboom" + exit 1 + fi + + minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" +} + +main "$@" diff --git a/skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg new file mode 100644 index 000000000..d4d18b9c2 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg @@ -0,0 +1,47 @@ +minarch_screen_scaling = Aspect +minarch__resampling_quality = Low +minarch_ambient = Off +minarch_screen_effect = None +minarch_screen_sharpness = Crisp +minarch_sync_reference = Auto +minarch_cpu_speed = Performance +minarch_thread_video = Off +minarch_max_ff_speed = 4x +puae_model_options_display = disabled +puae_model_fd = A500 +puae_model_hd = A1200 +puae_model_cd = CD32 +puae_cpu_throttle = 0.0 +puae_cpu_multiplier = 0 +puae_cpu_compatibility = normal +puae_autoloadfastforward = disabled +puae_floppy_speed = 100 +puae_floppy_multidrive = enabled +puae_floppy_write_protection = disabled +puae_floppy_write_redirect = disabled +puae_shared_nvram = disabled +puae_use_boot_hd = disabled +puae_cart_file = none +puae_video_allow_hz_change = locked +puae_video_standard = PAL auto +puae_video_aspect = auto +puae_video_resolution = lores +puae_video_vresolution = auto +puae_crop = auto +puae_crop_mode = horizontal +puae_crop_delay = disabled +puae_vertical_pos = auto +puae_horizontal_pos = auto +puae_immediate_blits = waiting +puae_collision_level = playfields +puae_gfx_flickerfixer = disabled +puae_gfx_framerate = disabled +puae_gfx_gamma = 0 +puae_gfx_colors = 16bit +puae_sound_stereo_separation = 100% +puae_sound_interpol = anti +puae_sound_filter = emulated +puae_sound_filter_type = auto +puae_floppy_sound = 100 +puae_floppy_sound_empty_mute = disabled +puae_floppy_sound_type = internal diff --git a/skeleton/EXTRAS/Emus/h700/PUAE.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/PUAE.pak/default.cfg new file mode 100644 index 000000000..82f9adce0 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PUAE.pak/default.cfg @@ -0,0 +1,17 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind A / 2nd fire / Blue = A +bind B / Fire / Red = B +bind X / Yellow = X +bind Y / Green = Y +bind Start / Play = START +bind Select = SELECT +bind L / Rewind = L1 +bind R / Forward = R1 +bind L2 = L2 +bind R2 = R2 +bind L3 = L3 +bind R3 = R3 + diff --git a/skeleton/EXTRAS/Emus/h700/PUAE.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PUAE.pak/launch.sh new file mode 100644 index 000000000..e1aabd29e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/PUAE.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=puae2021 +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/SEGACD.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/SEGACD.pak/default.cfg new file mode 100644 index 000000000..dac408932 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SEGACD.pak/default.cfg @@ -0,0 +1,18 @@ +-picodrive_sound_rate = 44100 +-picodrive_smstype = Auto +-picodrive_smsfm = off +-picodrive_smsmapper = Auto +-picodrive_ggghost = off + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Mode = SELECT +bind Start = START +bind A Button = Y +bind B Button = X:B +bind C Button = A +bind X Button = B:L1 +bind Y Button = L1:X +bind Z Button = R1 diff --git a/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh new file mode 100755 index 000000000..81688be79 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=picodrive + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/SG1000.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/SG1000.pak/default.cfg new file mode 100644 index 000000000..1daad20e5 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SG1000.pak/default.cfg @@ -0,0 +1,19 @@ +-picodrive_smstype = Auto +picodrive_smsmapper = Auto +-picodrive_ggghost = off +-picodrive_sound_rate = 44100 +-picodrive_ramcart = disabled +-picodrive_dacnoise = disabled +-picodrive_input1 = 3 button pad +-picodrive_input2 = 3 button pad +-picodrive_fm_filter = off +-picodrive_audio_filter = disabled +-picodrive_overclk68k = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Button 1 = B +bind Button 2 = A +bind Pause = START diff --git a/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh new file mode 100755 index 000000000..81688be79 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=picodrive + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/SGB.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/SGB.pak/default.cfg new file mode 100644 index 000000000..78fdedb28 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SGB.pak/default.cfg @@ -0,0 +1,24 @@ +-mgba_gb_model = Super Game Boy +mgba_skip_bios = ON +-mgba_gb_colors_preset = 2 +-mgba_force_gbp = OFF +-mgba_color_correction = OFF +-mgba_interframe_blending = OFF +mgba_sgb_borders = ON + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind L Button = L1 +bind R Button = R1 +bind L Turbo = NONE:L2 +bind R Turbo = NONE:R2 +bind More Sun = NONE:L3 +bind Less Sun = NONE:R3 \ No newline at end of file diff --git a/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh new file mode 100755 index 000000000..796c1be58 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=mgba +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/SMS.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/SMS.pak/default.cfg new file mode 100644 index 000000000..0d2df362d --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SMS.pak/default.cfg @@ -0,0 +1,19 @@ +-picodrive_smstype = Master System +picodrive_smsmapper = Auto +-picodrive_ggghost = off +-picodrive_sound_rate = 44100 +-picodrive_ramcart = disabled +-picodrive_dacnoise = disabled +-picodrive_input1 = 3 button pad +-picodrive_input2 = 3 button pad +-picodrive_fm_filter = off +-picodrive_audio_filter = disabled +-picodrive_overclk68k = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Button 1 = B +bind Button 2 = A +bind Pause = START diff --git a/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh new file mode 100755 index 000000000..81688be79 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=picodrive + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/SUPA.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/SUPA.pak/default.cfg new file mode 100644 index 000000000..4a77a7b31 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SUPA.pak/default.cfg @@ -0,0 +1,16 @@ +-supafaust_pixel_format = rgb565 +-supafaust_thread_affinity_emu = 0x3 +-supafaust_thread_affinity_ppu = 0xc + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind Y Button = Y +bind X Button = X +bind B Button = B +bind A Button = A +bind L Button = L1 +bind R Button = R1 diff --git a/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh new file mode 100755 index 000000000..331d02280 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=mednafen_supafaust +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg new file mode 100644 index 000000000..dcf767317 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg @@ -0,0 +1,21 @@ +minarch_screen_scaling = Aspect +minarch_cpu_speed = Performance + +-vb_3dmode = anaglyph +-vb_right_analog_to_digital = disabled + +bind L. Up = UP +bind L. Down = DOWN +bind L. Left = LEFT +bind L. Right = RIGHT +bind Select = SELECT +bind Start = START +bind A = A +bind B = B +bind L Button = L1 +bind R Button = R1 +bind Low Battery = NONE:X +bind R. Up = NONE:L2 +bind R. Down = NONE:L3 +bind R. Left = NONE:R2 +bind R. Right = NONE:R3 diff --git a/skeleton/EXTRAS/Emus/h700/VB.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/VB.pak/default.cfg new file mode 100644 index 000000000..a83095a2b --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/VB.pak/default.cfg @@ -0,0 +1,20 @@ +minarch_cpu_speed = Performance + +-vb_3dmode = anaglyph +-vb_right_analog_to_digital = disabled + +bind L. Up = UP +bind L. Down = DOWN +bind L. Left = LEFT +bind L. Right = RIGHT +bind Select = SELECT +bind Start = START +bind A = A +bind B = B +bind L Button = L1 +bind R Button = R1 +bind Low Battery = NONE:X +bind R. Up = NONE:L2 +bind R. Down = NONE:L3 +bind R. Left = NONE:R2 +bind R. Right = NONE:R3 diff --git a/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh new file mode 100755 index 000000000..e5146dd57 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=mednafen_vb +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/EXTRAS/Emus/h700/VIC.pak/default.cfg b/skeleton/EXTRAS/Emus/h700/VIC.pak/default.cfg new file mode 100644 index 000000000..48c64810e --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/VIC.pak/default.cfg @@ -0,0 +1,14 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind X Button = X +bind Y Button = Y +bind B Button = B +bind A Button = A +bind L1 Button = L1 +bind L2 Button = L2 +bind R1 Button = R1 +bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/VIC.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/VIC.pak/launch.sh new file mode 100644 index 000000000..1ff5fe536 --- /dev/null +++ b/skeleton/EXTRAS/Emus/h700/VIC.pak/launch.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +EMU_EXE=vice_xvic +CORES_PATH=$(dirname "$0") + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh new file mode 100755 index 000000000..c7cd4fcde --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd $(dirname "$0") +./battery.elf # &> ./log.txt diff --git a/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh new file mode 100755 index 000000000..34c09b523 --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd $(dirname "$0") +./clock.elf # &> ./log.txt diff --git a/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg b/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg new file mode 100644 index 000000000..c76453190 --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg @@ -0,0 +1,6 @@ +disp_width=640 +disp_height=480 +disp_autoscale=1 +disp_autoscale_dpi=1 +disp_ppu_x=2 +disp_ppu_y=2 diff --git a/skeleton/EXTRAS/Tools/h700/Files.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Files.pak/launch.sh new file mode 100755 index 000000000..af119315d --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Files.pak/launch.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +cd $(dirname "$0") + +HOME="$SDCARD_PATH" +CFG="h700.cfg" + +./NextCommander --config $CFG diff --git a/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh new file mode 100755 index 000000000..86e09ee15 --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd "$(dirname "$0")" +./gametime.elf # &> ./log.txt diff --git a/skeleton/EXTRAS/Tools/h700/Input.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Input.pak/launch.sh new file mode 100755 index 000000000..ca0aefe28 --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Input.pak/launch.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd $(dirname "$0") +./minput.elf diff --git a/skeleton/EXTRAS/Tools/h700/Settings.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Settings.pak/launch.sh new file mode 100644 index 000000000..006467eae --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/Settings.pak/launch.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +SDCARD_PATH="/mnt/SDCARD" +USERDATA_PATH="$SDCARD_PATH/.userdata" +SHARED_USERDATA_PATH="$USERDATA_PATH/shared" + +cd $(dirname "$0") +./settings.elf > settings.log 2>&1 diff --git a/skeleton/SYSTEM/h700/bin/governor.sh b/skeleton/SYSTEM/h700/bin/governor.sh new file mode 100755 index 000000000..3a1723201 --- /dev/null +++ b/skeleton/SYSTEM/h700/bin/governor.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# governor.sh - CPU governor controller for H700 +# Usage: governor.sh +# Modes: auto, performance, powersave + +MODE="$1" +[ -z "$MODE" ] && MODE="auto" + +set_policy() { + local policy_path="$1" + local governor="$2" + local max_type="$3" # "second_max", "max", or "mid" + + [ -f "$policy_path/scaling_available_frequencies" ] || return 0 + FREQS=$(cat "$policy_path/scaling_available_frequencies" | tr ' ' '\n' | grep -v '^$' | sort -n) + MIN_FREQ=$(echo "$FREQS" | head -1) + + case "$max_type" in + second_max) + MAX_FREQ=$(echo "$FREQS" | tail -2 | head -1) + ;; + max) + MAX_FREQ=$(echo "$FREQS" | tail -1) + ;; + mid) + COUNT=$(echo "$FREQS" | wc -l) + MID=$(( (COUNT + 1) / 2 )) + MAX_FREQ=$(echo "$FREQS" | sed -n "${MID}p") + ;; + *) + MAX_FREQ=$(echo "$FREQS" | tail -1) + ;; + esac + + echo "$governor" > "$policy_path/scaling_governor" 2>/dev/null || true + echo "$MIN_FREQ" > "$policy_path/scaling_min_freq" + echo "$MAX_FREQ" > "$policy_path/scaling_max_freq" +} + +case "$MODE" in + auto) + set_policy /sys/devices/system/cpu/cpufreq/policy0 "schedutil" "second_max" + set_policy /sys/devices/system/cpu/cpu0/cpufreq "schedutil" "second_max" + ;; + performance) + set_policy /sys/devices/system/cpu/cpufreq/policy0 "performance" "max" + set_policy /sys/devices/system/cpu/cpu0/cpufreq "performance" "max" + ;; + powersave) + set_policy /sys/devices/system/cpu/cpufreq/policy0 "conservative" "mid" + set_policy /sys/devices/system/cpu/cpu0/cpufreq "conservative" "mid" + ;; + *) + echo "governor.sh: unknown mode '$MODE'" >&2 + echo " Valid modes: auto, performance, powersave" >&2 + exit 1 + ;; +esac diff --git a/skeleton/SYSTEM/h700/bin/reboot_next b/skeleton/SYSTEM/h700/bin/reboot_next new file mode 100755 index 000000000..4abd2b41c --- /dev/null +++ b/skeleton/SYSTEM/h700/bin/reboot_next @@ -0,0 +1,39 @@ +#!/bin/sh + +# Function to terminate all non-essential processes +task_killer() { + for pid in /proc/[0-9]*; do + pid=$(basename "$pid") + + # Ignore critical processes and the script's own process + if [ "$pid" != "1" ] && [ "$pid" != "$$" ]; then + kill $1 "$pid" 2>/dev/null + fi + done +} + +# Attempt graceful shutdown of processes +kill_all_processes() { + echo "Attempting to gracefully shut down processes..." + task_killer -TERM + sleep 0.5 # Wait to allow processes to terminate gracefully + + # Forcefully kill any remaining processes + echo "Forcing termination of remaining processes..." + task_killer -KILL +} + +# Close all possible processes before rebooting +kill_all_processes + +# Synchronize data with storage to minimize data corruption risks +sync + +# Unmount sdcard +swapoff -a +umount -f /etc/profile +umount -l /mnt/SDCARD + +# Shutdown the system +echo "Rebooting the system..." +busybox reboot \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/bin/run_hooks.sh b/skeleton/SYSTEM/h700/bin/run_hooks.sh new file mode 100755 index 000000000..3decb9c11 --- /dev/null +++ b/skeleton/SYSTEM/h700/bin/run_hooks.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# run_hooks.sh - shared hook runner for NextUI +# Usage: run_hooks.sh [--sync-only] +# +# dir-name: directory name under $USERDATA_PATH/.hooks/ (e.g. pre-launch.d, boot.d) +# --sync-only: force all scripts to run synchronously +# +# By default, scripts run in the background. Scripts ending in .sync.sh +# always run synchronously. All background scripts are waited on before exit. + +DIR_NAME="$1" +SYNC_ONLY="${2:-}" + +: "${SDCARD_PATH:=/mnt/SDCARD}" +: "${PLATFORM:=h700}" +: "${USERDATA_PATH:=$SDCARD_PATH/.userdata/$PLATFORM}" + +HOOK_DIR="$USERDATA_PATH/.hooks/$DIR_NAME" +[ -d "$HOOK_DIR" ] || exit 0 + +case "$DIR_NAME" in + pre-*) export HOOK_PHASE="pre" ;; + post-*) export HOOK_PHASE="post" ;; + boot*) export HOOK_PHASE="boot" ;; +esac +export HOOK_CATEGORY="$DIR_NAME" + +for script in "$HOOK_DIR"/*.sh; do + [ -f "$script" ] || continue + if [ "$SYNC_ONLY" = "--sync-only" ] || echo "$script" | grep -q '\.sync\.sh$'; then + ( "$script" ) > /dev/null 2>&1 || true + else + ( "$script" ) > /dev/null 2>&1 & + fi +done +wait diff --git a/skeleton/SYSTEM/h700/bin/setterm b/skeleton/SYSTEM/h700/bin/setterm new file mode 100755 index 000000000..97983f35f --- /dev/null +++ b/skeleton/SYSTEM/h700/bin/setterm @@ -0,0 +1,3 @@ +#!/bin/sh +# generates unnecessary errors when missing +exit 0 diff --git a/skeleton/SYSTEM/h700/bin/suspend b/skeleton/SYSTEM/h700/bin/suspend new file mode 100755 index 000000000..2be85b735 --- /dev/null +++ b/skeleton/SYSTEM/h700/bin/suspend @@ -0,0 +1,103 @@ +#!/bin/sh +set -uo pipefail +set +e +exec 0<&- + +#logfile="/mnt/SDCARD/.userdata/h700/logs/suspend_$(date +%Y%m%d_%H%M%S).log" +#exec >> "$logfile" 2>&1 + +wifid_running= +bluetoothd_running= + +sleep_retval= + +asound_state_dir=/tmp/asound-suspend + +before() { + >&2 echo "Preparing for suspend..." + echo 1 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true + + # Run pre-sleep hooks synchronously before services are stopped. + # Subshell ensures a crashing hook cannot block suspend. + ( "$SYSTEM_PATH/bin/run_hooks.sh" pre-sleep.d --sync-only ) >/dev/null 2>&1 || true + + >&2 echo "Saving mixer state..." + mkdir -p "$asound_state_dir" + alsactl --file "$asound_state_dir/asound.state.pre" store || true + + if pgrep bluetoothd; then + bluetoothd_running=1 + >&2 echo "Stopping bluetoothd..." + "$SYSTEM_PATH/etc/bluetooth/bt_init.sh" stop || true + fi + + if pgrep wpa_supplicant; then + wifid_running=1 + >&2 echo "Stopping wpa_supplicant..." + "$SYSTEM_PATH/etc/wifi/wifi_init.sh" stop || true + fi +} + +after() { + >&2 echo "Resumed from suspend." + echo 0 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true + + # Run post-resume hooks in background immediately after wake. + ( "$SYSTEM_PATH/bin/run_hooks.sh" post-resume.d ) >/dev/null 2>&1 & + + if [ -n "$wifid_running" ]; then + >&2 echo "Starting wpa_supplicant..." + "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start || true + fi + + if [ -n "$bluetoothd_running" ]; then + >&2 echo "Starting bluetoothd..." + "$SYSTEM_PATH/etc/bluetooth/bt_init.sh" start || true + fi + + # >&2 echo "Restoring mixer state..." + # alsactl --file "$asound_state_dir/asound.state.post" store || true + # alsactl --file "$asound_state_dir/asound.state.pre" restore || true +} + +before + +>&2 echo "Suspending..." +sleep_max_tries=5 +for i in $(seq 1 $sleep_max_tries); do + >&2 echo "Deep sleep attempt $i of $sleep_max_tries" + + sleep_time=$(date +%s) + echo mem >/sys/power/state + sleep_retval=$? + + >&2 echo "Deep sleep: kernel returned $sleep_retval" + if [ $sleep_retval -eq 0 ]; then + break + fi + + wake_time=$(date +%s) + time_asleep=$(($wake_time-$sleep_time)) + + # Workaround for a strange false negative case where + # the device sleeps properly but still returns non-zero. + # If unaddressed, the device would sleep again immediately + # after the user tried to wake it. + + # If device has been asleep for longer than a set period, + # ignore the retval and continue with waking the device. + if [ $time_asleep -gt 5 ]; then + >&2 echo "Deep sleep: averting false negative retval - (sleep for $time_asleep secs)" + sleep_retval=0 + break + fi + + + >&2 echo "Deep sleep failed: retrying in 3 seconds" + sleep 3 +done + +# Resume services in background to reduce UI latency +after & + +exit $sleep_retval diff --git a/skeleton/SYSTEM/h700/cores/.keep b/skeleton/SYSTEM/h700/cores/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh new file mode 100755 index 000000000..10c003a9f --- /dev/null +++ b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +DEVICE_NAME="${RGXX_MODEL:-Anbernic RG XX} (NextUI)" + +start_bt() { + rfkill.elf unblock bluetooth 2>/dev/null || rfkill unblock bluetooth 2>/dev/null || true + systemctl start bluetooth 2>/dev/null || true + pidof bluetoothd >/dev/null 2>&1 || bluetoothd >/dev/null 2>&1 & + + hciconfig hci0 up 2>/dev/null || true + + if command -v bluealsa >/dev/null 2>&1 && ! pidof bluealsa >/dev/null 2>&1; then + bluealsa -p a2dp-source >/dev/null 2>&1 & + sleep 1 + fi + + bluetoothctl power on >/dev/null 2>&1 || true + bluetoothctl discoverable on >/dev/null 2>&1 || true + bluetoothctl pairable on >/dev/null 2>&1 || true + bluetoothctl agent NoInputNoOutput >/dev/null 2>&1 || true + bluetoothctl default-agent >/dev/null 2>&1 || true + bluetoothctl system-alias "$DEVICE_NAME" >/dev/null 2>&1 || true +} + +stop_bt() { + bluetoothctl power off >/dev/null 2>&1 || true + killall bluetoothctl 2>/dev/null || true + killall bluealsa 2>/dev/null || true + hciconfig hci0 down 2>/dev/null || true + systemctl stop bluetooth 2>/dev/null || killall bluetoothd 2>/dev/null || true + rfkill.elf block bluetooth 2>/dev/null || rfkill block bluetooth 2>/dev/null || true +} + +case "$1" in + start|"") + start_bt + ;; + stop) + stop_bt + ;; + restart) + stop_bt + sleep 1 + start_bt + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac diff --git a/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh b/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh new file mode 100755 index 000000000..ebf8f7910 --- /dev/null +++ b/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +WIFI_INTERFACE="${WIFI_INTERFACE:-wlan0}" +WIFI_DIR="/tmp/wifi" +WIFI_SOCK_DIR="$WIFI_DIR/sockets" +WPA_SUPPLICANT_CONF="$WIFI_DIR/wpa_supplicant.conf" + +write_default_config() { + mkdir -p "$WIFI_SOCK_DIR" + if [ ! -f "$WPA_SUPPLICANT_CONF" ]; then + cat > "$WPA_SUPPLICANT_CONF" << EOF +ctrl_interface=$WIFI_SOCK_DIR +disable_scan_offload=1 +update_config=1 +wowlan_triggers=any + +EOF + fi +} + +start_dhcp() { + if command -v dhclient >/dev/null 2>&1; then + dhclient -nw "$WIFI_INTERFACE" >/dev/null 2>&1 || true + elif command -v udhcpc >/dev/null 2>&1; then + udhcpc -i "$WIFI_INTERFACE" -b >/dev/null 2>&1 || true + fi +} + +stop_dhcp() { + if command -v dhclient >/dev/null 2>&1; then + dhclient -r "$WIFI_INTERFACE" >/dev/null 2>&1 || true + fi + killall udhcpc 2>/dev/null || true +} + +start() { + systemctl stop NetworkManager 2>/dev/null || true + rfkill.elf unblock wifi 2>/dev/null || rfkill unblock wifi 2>/dev/null || true + ip link set "$WIFI_INTERFACE" up 2>/dev/null || true + write_default_config + + killall wpa_supplicant 2>/dev/null || true + wpa_supplicant -B -i "$WIFI_INTERFACE" -c "$WPA_SUPPLICANT_CONF" -C "$WIFI_SOCK_DIR" >/dev/null 2>&1 + start_dhcp +} + +stop() { + wpa_cli -p "$WIFI_SOCK_DIR" -i "$WIFI_INTERFACE" terminate >/dev/null 2>&1 || true + killall wpa_supplicant 2>/dev/null || true + stop_dhcp + ip link set "$WIFI_INTERFACE" down 2>/dev/null || true + rfkill.elf block wifi 2>/dev/null || rfkill block wifi 2>/dev/null || true +} + +case "$1" in + start|"") + start + ;; + stop) + stop + ;; + restart) + stop + sleep 1 + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac diff --git a/skeleton/SYSTEM/h700/lib/.keep b/skeleton/SYSTEM/h700/lib/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg new file mode 100644 index 000000000..90365a9d1 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg @@ -0,0 +1,20 @@ +fceumm_sndquality = High +fceumm_sndvolume = 10 +-fceumm_aspect = 8:7 PAR +-fceumm_turbo_enable = Player 1 +-fceumm_show_adv_system_options = disabled +-fceumm_show_adv_sound_options = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind Change Disk = NONE:L1 +bind Insert Disk = NONE:R1 +bind Insert Coin = NONE:R2 diff --git a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default.cfg new file mode 100644 index 000000000..90365a9d1 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default.cfg @@ -0,0 +1,20 @@ +fceumm_sndquality = High +fceumm_sndvolume = 10 +-fceumm_aspect = 8:7 PAR +-fceumm_turbo_enable = Player 1 +-fceumm_show_adv_system_options = disabled +-fceumm_show_adv_sound_options = disabled + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind Change Disk = NONE:L1 +bind Insert Disk = NONE:R1 +bind Insert Coin = NONE:R2 diff --git a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh new file mode 100755 index 000000000..280598bbc --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=fceumm + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/Emus/GB.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/GB.pak/default.cfg new file mode 100644 index 000000000..d3e80e7b6 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/GB.pak/default.cfg @@ -0,0 +1,18 @@ +gambatte_gb_colorization = internal +gambatte_gb_internal_palette = TWB64 - Pack 1 +gambatte_gb_palette_twb64_1 = TWB64 038 - Pokemon mini Ver. +gambatte_gb_bootloader = disabled +-gambatte_audio_resampler = sinc + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind Prev. Palette = NONE:L1 +bind Next Palette = NONE:R1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh new file mode 100755 index 000000000..9143f24c9 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=gambatte + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/default.cfg new file mode 100644 index 000000000..ea76e21f6 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/default.cfg @@ -0,0 +1,14 @@ +-gpsp_save_method = libretro + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind L Button = L1 +bind R Button = R1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh new file mode 100755 index 000000000..5678aaca7 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=gpsp + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/default.cfg new file mode 100644 index 000000000..606e7b74c --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/default.cfg @@ -0,0 +1,15 @@ +gambatte_gb_bootloader = disabled +-gambatte_audio_resampler = sinc + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind A Button = A +bind B Button = B +bind A Turbo = NONE:X +bind B Turbo = NONE:Y +bind Prev. Palette = NONE:L1 +bind Next Palette = NONE:R1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh new file mode 100755 index 000000000..9143f24c9 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=gambatte + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/Emus/MD.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/MD.pak/default.cfg new file mode 100644 index 000000000..dac408932 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/MD.pak/default.cfg @@ -0,0 +1,18 @@ +-picodrive_sound_rate = 44100 +-picodrive_smstype = Auto +-picodrive_smsfm = off +-picodrive_smsmapper = Auto +-picodrive_ggghost = off + +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Mode = SELECT +bind Start = START +bind A Button = Y +bind B Button = X:B +bind C Button = A +bind X Button = B:L1 +bind Y Button = L1:X +bind Z Button = R1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh new file mode 100755 index 000000000..81688be79 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=picodrive + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg new file mode 100644 index 000000000..2f461d026 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg @@ -0,0 +1,23 @@ +-pcsx_rearmed_display_internal_fps = disabled +-pcsx_rearmed_show_input_settings = disabled +pcsx_rearmed_dithering = enabled +minarch_rewind_buffer_mb = 128 +minarch_rewind_granularity = 33 +minarch_rewind_compression_speed = 12 +minarch_rewind_compression = On + +minarch_gamepad_type = 1 +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind Circle = A +bind Cross = B +bind Triangle = X +bind Square = Y +bind L1 Button = L1 +bind R1 Button = R1 +bind L2 Button = L2 +bind R2 Button = R2 \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg new file mode 100644 index 000000000..84282b17a --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg @@ -0,0 +1,24 @@ +-pcsx_rearmed_display_internal_fps = disabled +-pcsx_rearmed_show_input_settings = disabled +minarch_rewind_buffer_mb = 128 +minarch_rewind_granularity = 33 +minarch_rewind_compression_speed = 12 +minarch_rewind_compression = On + +pcsx_rearmed_dithering = enabled + +minarch_gamepad_type = 1 +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind Circle = A +bind Cross = B +bind Triangle = X +bind Square = Y +bind L1 Button = L1 +bind R1 Button = R1 +bind L2 Button = L2 +bind R2 Button = R2 diff --git a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh new file mode 100755 index 000000000..e3ba5ac06 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=pcsx_rearmed + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg new file mode 100644 index 000000000..8100f20a1 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg @@ -0,0 +1,12 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind Y Button = Y +bind X Button = X +bind B Button = B +bind A Button = A +bind L Button = L1 +bind R Button = R1 \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default.cfg new file mode 100644 index 000000000..8100f20a1 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default.cfg @@ -0,0 +1,12 @@ +bind Up = UP +bind Down = DOWN +bind Left = LEFT +bind Right = RIGHT +bind Select = SELECT +bind Start = START +bind Y Button = Y +bind X Button = X +bind B Button = B +bind A Button = A +bind L Button = L1 +bind R Button = R1 \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh new file mode 100755 index 000000000..155233127 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +EMU_EXE=snes9x + +############################### + +EMU_TAG=$(basename "$(dirname "$0")" .pak) +ROM="$1" +mkdir -p "$BIOS_PATH/$EMU_TAG" +mkdir -p "$SAVES_PATH/$EMU_TAG" +mkdir -p "$CHEATS_PATH/$EMU_TAG" +HOME="$USERDATA_PATH" +cd "$HOME" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh new file mode 100755 index 000000000..13cd42663 --- /dev/null +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -0,0 +1,148 @@ +#!/bin/sh +# MinUI.pak for Anbernic RG XX / Allwinner H700 + +export PLATFORM="h700" +REAL_SDCARD_PATH="/mnt/sdcard" +COMPAT_SDCARD_PATH="/mnt/SDCARD" + +mkdir -p "$REAL_SDCARD_PATH" +if ! mountpoint -q "$REAL_SDCARD_PATH"; then + mount -t vfat -o rw,utf8,noatime /dev/mmcblk1p1 "$REAL_SDCARD_PATH" 2>/dev/null || true +fi + +if [ ! -e "$COMPAT_SDCARD_PATH" ]; then + ln -s "$REAL_SDCARD_PATH" "$COMPAT_SDCARD_PATH" 2>/dev/null || true +fi + +export SDCARD_PATH="$COMPAT_SDCARD_PATH" +export BIOS_PATH="$SDCARD_PATH/Bios" +export ROMS_PATH="$SDCARD_PATH/Roms" +export SAVES_PATH="$SDCARD_PATH/Saves" +export CHEATS_PATH="$SDCARD_PATH/Cheats" +export SYSTEM_PATH="$SDCARD_PATH/.system/$PLATFORM" +export CORES_PATH="$SYSTEM_PATH/cores" +export USERDATA_PATH="$SDCARD_PATH/.userdata/$PLATFORM" +export SHARED_USERDATA_PATH="$SDCARD_PATH/.userdata/shared" +export LOGS_PATH="$USERDATA_PATH/logs" +export HOOKS_PATH="$USERDATA_PATH/.hooks" +export DATETIME_PATH="$SHARED_USERDATA_PATH/datetime.txt" +export HOME="$USERDATA_PATH" + +export PATH="$SYSTEM_PATH/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" +export LD_LIBRARY_PATH="$SYSTEM_PATH/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" +export SDL_VIDEODRIVER="mali" +export SDL_AUDIODRIVER="alsa" + +if [ -f "/tmp/poweroff" ]; then + poweroff + exit 0 +fi +if [ -f "/tmp/reboot" ]; then + reboot + exit 0 +fi + +mkdir -p "$BIOS_PATH" "$ROMS_PATH" "$SAVES_PATH" "$CHEATS_PATH" +mkdir -p "$USERDATA_PATH" "$LOGS_PATH" "$HOOKS_PATH" "$SHARED_USERDATA_PATH/.minui" + +export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" +case "$RGXX_MODEL" in + RG28xx) export DEVICE="rg28xx" ;; + RG34xx*|RG34XX*) export DEVICE="rg34xx" ;; + RGcubexx) export DEVICE="cube" ;; + *) export DEVICE="rg40xx" ;; +esac +export IS_NEXT="yes" + +if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then + echo "stockmod muOS override files are present; stock boot target must be selected for TF1 dmenu.bin autoboot." > "$LOGS_PATH/stockmod-warning.txt" +fi + +killall brightCtrl.bin cexpert 2>/dev/null || true +systemctl stop NetworkManager 2>/dev/null || true +loginctl show-logind >/dev/null 2>&1 && mkdir -p /run/systemd/system 2>/dev/null || true + +if [ -f "$SYSTEM_PATH/dat/dmenu.bin" ] && [ -d /mnt/mmc ]; then + if ! cmp -s "$SYSTEM_PATH/dat/dmenu.bin" /mnt/mmc/dmenu.bin 2>/dev/null; then + cp "$SYSTEM_PATH/dat/dmenu.bin" /mnt/mmc/dmenu.bin 2>/dev/null || true + sync + fi +fi + +rm -rf "$SDCARD_PATH/.shadercache" +echo 0 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true + +sh "$SYSTEM_PATH/bin/governor.sh" "auto" + +keymon.elf > "$LOGS_PATH/keymon.txt" 2>&1 & +batmon.elf > "$LOGS_PATH/batmon.txt" 2>&1 & + +rm -f "$USERDATA_PATH/.asoundrc" +audiomon.elf > "$LOGS_PATH/audiomon.txt" 2>&1 & + +bluetoothon=$(nextval.elf bluetooth | sed -n 's/.*"bluetooth": \([0-9]*\).*/\1/p') +if [ "$bluetoothon" = "0" ]; then + "$SYSTEM_PATH/etc/bluetooth/bt_init.sh" stop > /dev/null 2>&1 & +else + "$SYSTEM_PATH/etc/bluetooth/bt_init.sh" start > /dev/null 2>&1 & +fi + +wifion=$(nextval.elf wifi | sed -n 's/.*"wifi": \([0-9]*\).*/\1/p') +if [ "$wifion" = "0" ]; then + "$SYSTEM_PATH/etc/wifi/wifi_init.sh" stop > /dev/null 2>&1 & +else + "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start > /dev/null 2>&1 & +fi + +AUTO_PATH="$USERDATA_PATH/auto.sh" +if [ -f "$AUTO_PATH" ]; then + "$AUTO_PATH" +fi +"$SYSTEM_PATH/bin/run_hooks.sh" boot.d + +cd "$(dirname "$0")" +killall -9 show2.elf > /dev/null 2>&1 || true + +parse_hook_cmd() { + HOOK_CMD="$1" + HOOK_EMU_PATH=$(echo "$HOOK_CMD" | sed "s/^'\\([^']*\\)'.*/\\1/") + _remainder=$(echo "$HOOK_CMD" | sed "s/^'[^']*'//") + if echo "$_remainder" | grep -q "'"; then + HOOK_TYPE="rom" + HOOK_ROM_PATH=$(echo "$_remainder" | sed "s/.*'\\([^']*\\)'.*/\\1/") + else + HOOK_TYPE="pak" + HOOK_ROM_PATH="" + fi + [ -f /tmp/last.txt ] && HOOK_LAST=$(cat /tmp/last.txt) || HOOK_LAST="" + export HOOK_CMD HOOK_EMU_PATH HOOK_TYPE HOOK_ROM_PATH HOOK_LAST +} + +EXEC_PATH="/tmp/nextui_exec" +NEXT_PATH="/tmp/next" +touch "$EXEC_PATH" && sync +while [ -f "$EXEC_PATH" ]; do + nextui.elf > "$LOGS_PATH/nextui.txt" 2>&1 + sh "$SYSTEM_PATH/bin/governor.sh" "performance" + + if [ -f "$NEXT_PATH" ]; then + CMD="$(cat "$NEXT_PATH")" + parse_hook_cmd "$CMD" + "$SYSTEM_PATH/bin/run_hooks.sh" pre-launch.d + eval "$CMD" + "$SYSTEM_PATH/bin/run_hooks.sh" post-launch.d + rm -f "$NEXT_PATH" + sh "$SYSTEM_PATH/bin/governor.sh" "performance" + fi + + if [ -f "/tmp/poweroff" ]; then + poweroff + exit 0 + fi + if [ -f "/tmp/reboot" ]; then + reboot + exit 0 + fi +done + +poweroff diff --git a/skeleton/SYSTEM/h700/shaders/colorfix.glsl b/skeleton/SYSTEM/h700/shaders/colorfix.glsl new file mode 100644 index 000000000..20a129919 --- /dev/null +++ b/skeleton/SYSTEM/h700/shaders/colorfix.glsl @@ -0,0 +1,21 @@ +#if defined(VERTEX) +attribute vec2 VertexCoord; +attribute vec2 TexCoord; +varying vec2 vTexCoord; + +void main() { + vTexCoord = TexCoord; + gl_Position = vec4(VertexCoord, 0.0, 1.0); +} +#endif + +#if defined(FRAGMENT) +precision mediump float; +uniform sampler2D Texture; +varying vec2 vTexCoord; + +void main() { + vec4 pixel = texture2D(Texture, vec2(vTexCoord.x, 1.0 - vTexCoord.y)); + gl_FragColor = vec4(pixel.a, pixel.b, pixel.g, pixel.r); +} +#endif \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/shaders/default.glsl b/skeleton/SYSTEM/h700/shaders/default.glsl new file mode 100644 index 000000000..539ab8478 --- /dev/null +++ b/skeleton/SYSTEM/h700/shaders/default.glsl @@ -0,0 +1,21 @@ +#if defined(VERTEX) +attribute vec2 VertexCoord; +attribute vec2 TexCoord; +varying vec2 vTexCoord; + +void main() { + // Flip Y-axis in the vertex shader + vTexCoord = vec2(TexCoord.x, 1.0 - TexCoord.y); // Flip Y + gl_Position = vec4(VertexCoord, 0.0, 1.0); +} +#endif + +#if defined(FRAGMENT) +precision mediump float; +uniform sampler2D Texture; +varying vec2 vTexCoord; + +void main() { + gl_FragColor = texture2D(Texture, vTexCoord); +} +#endif \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/shaders/noshader.glsl b/skeleton/SYSTEM/h700/shaders/noshader.glsl new file mode 100644 index 000000000..c7f94f998 --- /dev/null +++ b/skeleton/SYSTEM/h700/shaders/noshader.glsl @@ -0,0 +1,21 @@ +#if defined(VERTEX) +attribute vec2 VertexCoord; +attribute vec2 TexCoord; +varying vec2 vTexCoord; + +void main() { + // Flip Y-axis in the vertex shader + vTexCoord = vec2(TexCoord.x, TexCoord.y); // Flip Y + gl_Position = vec4(VertexCoord, 0.0, 1.0); +} +#endif + +#if defined(FRAGMENT) +precision mediump float; +uniform sampler2D Texture; +varying vec2 vTexCoord; + +void main() { + gl_FragColor = texture2D(Texture, vTexCoord); +} +#endif \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/shaders/overlay.glsl b/skeleton/SYSTEM/h700/shaders/overlay.glsl new file mode 100644 index 000000000..5672d1a90 --- /dev/null +++ b/skeleton/SYSTEM/h700/shaders/overlay.glsl @@ -0,0 +1,20 @@ +#if defined(VERTEX) +attribute vec2 VertexCoord; +attribute vec2 TexCoord; +varying vec2 vTexCoord; + +void main() { + vTexCoord = TexCoord; + gl_Position = vec4(VertexCoord, 0.0, 1.0); +} +#endif + +#if defined(FRAGMENT) +precision mediump float; +uniform sampler2D Texture; +varying vec2 vTexCoord; + +void main() { + gl_FragColor = texture2D(Texture, vec2(vTexCoord.x, 1.0 - vTexCoord.y)); +} +#endif \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/shaders/pixellate.glsl b/skeleton/SYSTEM/h700/shaders/pixellate.glsl new file mode 100644 index 000000000..aa248462f --- /dev/null +++ b/skeleton/SYSTEM/h700/shaders/pixellate.glsl @@ -0,0 +1,143 @@ +// Pixellate Shader +// Copyright (c) 2011, 2012 Fes +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// (Fes gave their permission to have this shader distributed under this +// licence in this forum post: +// http://board.byuu.org/viewtopic.php?p=57295#p57295 + +// Parameter lines go here: +#pragma parameter INTERPOLATE_IN_LINEAR_GAMMA "Linear Gamma Weight" 1.0 0.0 1.0 1.0 + +#if defined(VERTEX) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING out +#define COMPAT_ATTRIBUTE in +#define COMPAT_TEXTURE texture +#else +#define COMPAT_VARYING varying +#define COMPAT_ATTRIBUTE attribute +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#define COMPAT_PRECISION mediump +#else +#define COMPAT_PRECISION +#endif + +COMPAT_ATTRIBUTE vec4 VertexCoord; +COMPAT_ATTRIBUTE vec4 COLOR; +COMPAT_ATTRIBUTE vec4 TexCoord; +COMPAT_VARYING vec4 COL0; +COMPAT_VARYING vec4 TEX0; + +uniform mat4 MVPMatrix; +uniform COMPAT_PRECISION int FrameDirection; +uniform COMPAT_PRECISION int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; + +// vertex compatibility #defines +#define vTexCoord TEX0.xy +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define outsize vec4(OutputSize, 1.0 / OutputSize) + +void main() +{ + gl_Position = MVPMatrix * VertexCoord; + COL0 = COLOR; + TEX0.xy = TexCoord.xy; +} + +#elif defined(FRAGMENT) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING in +#define COMPAT_TEXTURE texture +out vec4 FragColor; +#else +#define COMPAT_VARYING varying +#define FragColor gl_FragColor +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif +#define COMPAT_PRECISION highp +#else +#define COMPAT_PRECISION +#endif + +uniform COMPAT_PRECISION int FrameDirection; +uniform COMPAT_PRECISION int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +uniform sampler2D Texture; +COMPAT_VARYING vec4 TEX0; + +// fragment compatibility #defines +#define Source Texture +#define vTexCoord TEX0.xy + +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define outsize vec4(OutputSize, 1.0 / OutputSize) + +#ifdef PARAMETER_UNIFORM +uniform COMPAT_PRECISION float INTERPOLATE_IN_LINEAR_GAMMA; +#else +#define INTERPOLATE_IN_LINEAR_GAMMA 1.0 +#endif + +void main() +{ + vec2 texelSize = SourceSize.zw; + + vec2 range = vec2(abs(InputSize.x / (outsize.x * SourceSize.x)), abs(InputSize.y / (outsize.y * SourceSize.y))); + range = range / 2.0 * 0.999; + + float left = vTexCoord.x - range.x; + float top = vTexCoord.y + range.y; + float right = vTexCoord.x + range.x; + float bottom = vTexCoord.y - range.y; + + vec3 topLeftColor = COMPAT_TEXTURE(Source, (floor(vec2(left, top) / texelSize) + 0.5) * texelSize).rgb; + vec3 bottomRightColor = COMPAT_TEXTURE(Source, (floor(vec2(right, bottom) / texelSize) + 0.5) * texelSize).rgb; + vec3 bottomLeftColor = COMPAT_TEXTURE(Source, (floor(vec2(left, bottom) / texelSize) + 0.5) * texelSize).rgb; + vec3 topRightColor = COMPAT_TEXTURE(Source, (floor(vec2(right, top) / texelSize) + 0.5) * texelSize).rgb; + + if (INTERPOLATE_IN_LINEAR_GAMMA > 0.5){ + topLeftColor = pow(topLeftColor, vec3(2.2)); + bottomRightColor = pow(bottomRightColor, vec3(2.2)); + bottomLeftColor = pow(bottomLeftColor, vec3(2.2)); + topRightColor = pow(topRightColor, vec3(2.2)); + } + + vec2 border = clamp(floor((vTexCoord / texelSize) + vec2(0.5)) * texelSize, vec2(left, bottom), vec2(right, top)); + + float totalArea = 4.0 * range.x * range.y; + + vec3 averageColor; + averageColor = ((border.x - left) * (top - border.y) / totalArea) * topLeftColor; + averageColor += ((right - border.x) * (border.y - bottom) / totalArea) * bottomRightColor; + averageColor += ((border.x - left) * (border.y - bottom) / totalArea) * bottomLeftColor; + averageColor += ((right - border.x) * (top - border.y) / totalArea) * topRightColor; + + FragColor = (INTERPOLATE_IN_LINEAR_GAMMA > 0.5) ? vec4(pow(averageColor, vec3(1.0 / 2.2)), 1.0) : vec4(averageColor, 1.0); +} +#endif diff --git a/skeleton/SYSTEM/h700/system-brick.cfg b/skeleton/SYSTEM/h700/system-brick.cfg new file mode 100644 index 000000000..3a0888cc5 --- /dev/null +++ b/skeleton/SYSTEM/h700/system-brick.cfg @@ -0,0 +1,19 @@ +minarch_screen_scaling = Aspect +minarch_nrofshaders = 0 +minarch_shader1 = stock.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = 2 +minarch_shader2 = stock.glsl +minarch_shader2_filter = LINEAR +minarch_shader2_srctype = relative +minarch_shader2_scaletype = relative +minarch_shader2_upscale = 1 +minarch_shader3 = stock.glsl +minarch_shader3_filter = NEAREST +minarch_shader3_srctype = source +minarch_shader3_scaletype = source +minarch_shader3_upscale = screen +minarch_scale_filter = NEAREST +-minarch_thread_video = Off diff --git a/skeleton/SYSTEM/h700/system.cfg b/skeleton/SYSTEM/h700/system.cfg new file mode 100644 index 000000000..3a0888cc5 --- /dev/null +++ b/skeleton/SYSTEM/h700/system.cfg @@ -0,0 +1,19 @@ +minarch_screen_scaling = Aspect +minarch_nrofshaders = 0 +minarch_shader1 = stock.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = 2 +minarch_shader2 = stock.glsl +minarch_shader2_filter = LINEAR +minarch_shader2_srctype = relative +minarch_shader2_scaletype = relative +minarch_shader2_upscale = 1 +minarch_shader3 = stock.glsl +minarch_shader3_filter = NEAREST +minarch_shader3_srctype = source +minarch_shader3_scaletype = source +minarch_shader3_upscale = screen +minarch_scale_filter = NEAREST +-minarch_thread_video = Off diff --git a/workspace/all/settings/makefile b/workspace/all/settings/makefile index ea854f1c8..4924f7576 100644 --- a/workspace/all/settings/makefile +++ b/workspace/all/settings/makefile @@ -44,6 +44,12 @@ CXXFLAGS += -DHAS_BTAGENT CXXSOURCE += btagent.cpp CXXFLAGS += $$(pkg-config --cflags --libs gio-2.0 glib-2.0) endif +ifeq ($(PLATFORM), h700) +# drop as soon as we use btagent on all platforms +CXXFLAGS += -DHAS_BTAGENT +CXXSOURCE += btagent.cpp +CXXFLAGS += $$(pkg-config --cflags --libs gio-2.0 glib-2.0) +endif PRODUCT= build/$(PLATFORM)/$(TARGET).elf diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index 7a3eeda49..f4fd55f09 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -241,7 +241,8 @@ namespace { enum Vendor { Unknown, Trimui, - Miyoo + Miyoo, + Anbernic }; enum Model { @@ -250,14 +251,19 @@ namespace { BrickPro, SmartPro, SmartProS, - Flip + Flip, + RG40XX, + RG34XX, + RG28XX, + RGCubeXX }; enum Platform { UnknownPlatform, tg5040, tg5050, - my355 + my355, + h700 }; DeviceInfo() { @@ -283,6 +289,22 @@ namespace { m_vendor = Trimui; m_model = Flip; m_platform = my355; + } else if(exactMatch("rg40xx", device)) { + m_vendor = Anbernic; + m_model = RG40XX; + m_platform = h700; + } else if(exactMatch("rg34xx", device)) { + m_vendor = Anbernic; + m_model = RG34XX; + m_platform = h700; + } else if(exactMatch("rg28xx", device)) { + m_vendor = Anbernic; + m_model = RG28XX; + m_platform = h700; + } else if(exactMatch("cube", device)) { + m_vendor = Anbernic; + m_model = RGCubeXX; + m_platform = h700; } } } @@ -292,19 +314,19 @@ namespace { Platform getPlatform() const { return m_platform; } bool hasColorTemperature() const { - return m_platform == tg5040; + return m_platform == tg5040 || m_platform == h700; } bool hasContrastSaturation() const { - return m_platform == my355 || m_platform == tg5040; + return m_platform == my355 || m_platform == tg5040 || m_platform == h700; } bool hasExposure() const { - return m_platform == tg5040; + return m_platform == tg5040 || m_platform == h700; } bool hasDisplayCal() const { - return m_platform == tg5040; + return m_platform == tg5040 || m_platform == h700; } bool hasActiveCooling() const { @@ -316,15 +338,15 @@ namespace { } bool hasAnalogSticks() const { - return m_model == SmartPro || m_model == SmartProS || m_model == BrickPro; + return m_model == SmartPro || m_model == SmartProS || m_model == BrickPro || m_model == RG40XX || m_model == RGCubeXX; } bool hasWifi() const { - return m_platform == tg5050 || m_platform == tg5040 || m_platform == my355; + return m_platform == tg5050 || m_platform == tg5040 || m_platform == my355 || m_platform == h700; } bool hasBluetooth() const { - return m_platform == tg5050 || m_platform == tg5040 || m_platform == my355; + return m_platform == tg5050 || m_platform == tg5040 || m_platform == my355 || m_platform == h700; } private: diff --git a/workspace/h700/boot/boot.sh b/workspace/h700/boot/boot.sh new file mode 100755 index 000000000..eeaec317f --- /dev/null +++ b/workspace/h700/boot/boot.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +TF1_PATH=/mnt/mmc +TF2_PATH=/mnt/sdcard +COMPAT_PATH=/mnt/SDCARD +PLATFORM=h700 +SYSTEM_PATH="$TF2_PATH/.system/$PLATFORM" +UPDATE_PATH="$TF2_PATH/MinUI.zip" +LOG_PATH="$TF1_PATH/nextui-h700.log" + +log() { + echo "$@" >> "$LOG_PATH" 2>/dev/null || true +} + +mount_tf2() { + mkdir -p "$TF2_PATH" + if mountpoint -q "$TF2_PATH"; then + return 0 + fi + mount -t vfat -o rw,utf8,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null +} + +ensure_compat_path() { + if [ ! -e "$COMPAT_PATH" ]; then + ln -s "$TF2_PATH" "$COMPAT_PATH" 2>/dev/null || true + fi +} + +extract_payload() { + if [ -x /tmp/nextui-h700-unzip ]; then + return 0 + fi + + LINE=$(($(grep -na '^BINARY' "$0" | cut -d ':' -f 1 | tail -1) + 1)) + tail -n +"$LINE" "$0" > /tmp/nextui-h700-data.tar.gz + mkdir -p /tmp/nextui-h700 + tar -xzf /tmp/nextui-h700-data.tar.gz -C /tmp/nextui-h700 >/dev/null 2>&1 || return 1 + cp /tmp/nextui-h700/unzip /tmp/nextui-h700-unzip + chmod +x /tmp/nextui-h700-unzip +} + +fallback_stock() { + log "falling back to stock frontend" + if [ -x /mnt/vendor/bin/dmenu.bin ]; then + exec /mnt/vendor/bin/dmenu.bin + fi + exit 1 +} + +if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then + log "stockmod muOS override is present; NextUI requires the stock boot target" +fi + +if ! mount_tf2; then + log "TF2 mount failed" + fallback_stock +fi + +ensure_compat_path + +if [ -f "$UPDATE_PATH" ]; then + log "install/update zip detected" + extract_payload || fallback_stock + /tmp/nextui-h700-unzip -o "$UPDATE_PATH" -d "$TF2_PATH" >> "$LOG_PATH" 2>&1 + rm -f "$UPDATE_PATH" + + if [ -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ]; then + "$TF2_PATH/.tmp_update/$PLATFORM.sh" >> "$LOG_PATH" 2>&1 + elif [ -x "$SYSTEM_PATH/bin/install.sh" ]; then + "$SYSTEM_PATH/bin/install.sh" >> "$LOG_PATH" 2>&1 + fi +fi + +if [ -x "$SYSTEM_PATH/paks/MinUI.pak/launch.sh" ]; then + exec "$SYSTEM_PATH/paks/MinUI.pak/launch.sh" +fi + +log "NextUI launch script missing" +fallback_stock diff --git a/workspace/h700/boot/build.sh b/workspace/h700/boot/build.sh new file mode 100755 index 000000000..d67535740 --- /dev/null +++ b/workspace/h700/boot/build.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +SOURCE=boot.sh +TARGET=dmenu.bin + +mkdir -p output +cp ../other/unzip60/unzip ./output/ + +cd output || exit 1 +tar -czf data unzip +cat ../$SOURCE > $TARGET +echo BINARY >> $TARGET +cat data >> $TARGET +echo >> $TARGET +chmod +x $TARGET diff --git a/workspace/h700/cores/makefile b/workspace/h700/cores/makefile new file mode 100755 index 000000000..a224ff179 --- /dev/null +++ b/workspace/h700/cores/makefile @@ -0,0 +1,131 @@ +CORES= a2600 +CORES+= a5200 +CORES+= a7800 +CORES+= handy +CORES+= c64 +CORES+= c128 +CORES+= fake-08 +CORES+= fbneo +CORES+= fceumm +CORES+= gambatte +CORES+= gpsp +CORES+= libretro-cap32 +CORES+= libretro-uae +CORES+= mednafen_pce_fast +CORES+= mednafen_supafaust +CORES+= mednafen_vb +CORES+= mgba +CORES+= pcsx_rearmed +CORES+= pet +CORES+= picodrive +CORES+= plus4 +CORES+= pokemini +CORES+= race +CORES+= snes9x +CORES+= vic +CORES+= prboom +CORES+= bluemsx +CORES+= gearcoleco + +############################### + +# optional core vars +# *_REPO= +# *_HASH= +# *_CORE= +# *_FLAGS= +# *_MAKEFILE= +# *_BUILD_PATH= +# *_SUBMODULES= + +a2600_REPO = https://github.com/libretro/stella2014-libretro +a2600_CORE = stella2014_libretro.so + +a5200_CORE = a5200_libretro.so + +a7800_CORE = prosystem_libretro.so +a7800_REPO = https://github.com/libretro/prosystem-libretro + +handy_REPO = https://github.com/libretro/libretro-handy + +fbneo_REPO = https://github.com/libretro/FBNeo +fbneo_CORE = fbneo_libretro.so +fbneo_BUILD_PATH = fbneo/src/burner/libretro +fbneo_MAKE = make +fbneo_HASH = 6a5cc250c2db8d874a06ee86e302a2a78918b4c1 + +mednafen_pce_fast_REPO = https://github.com/libretro/beetle-pce-fast-libretro +mednafen_vb_REPO = https://github.com/libretro/beetle-vb-libretro + +fake-08_REPO = https://github.com/jtothebell/fake-08 +fake-08_CORE = fake08_libretro.so +fake-08_BUILD_PATH = fake-08/platform/libretro + +fceumm_REPO = https://github.com/libretro/libretro-fceumm + +gambatte_REPO = https://github.com/libretro/gambatte-libretro + +mednafen_supafaust_REPO = https://github.com/libretro/supafaust + +pcsx_rearmed_MAKEFILE = Makefile.libretro +# pcsx has a disabled submodule for gnulib, which takes forever to check out and is unused - skil checkout +pcsx_rearmed_SUBMODULES = frontend/libpicofe + +picodrive_REPO = https://github.com/irixxxx/picodrive +picodrive_MAKEFILE = Makefile.libretro +# No background Audio on Sega CD +# https://github.com/LoveRetro/NextUI/issues/68 +picodrive_HASH = b0be121b7d58d6ee1ee2809974e62893c80a8264 + +pokemini_REPO = https://github.com/libretro/PokeMini +pokemini_MAKEFILE = Makefile.libretro +# Our patchfile doesn't work on latest Pokemon mini commits, pinning to last working hash for now +pokemini_HASH = 78656d4615691c393e65e48672ce5fff5b1f97d3 + +prboom_REPO = https://github.com/libretro/libretro-prboom + +snes9x2005_plus_REPO = https://github.com/libretro/snes9x2005 +snes9x2005_plus_FLAGS = USE_BLARGG_APU=1 + +snes9x_REPO = https://github.com/libretro/snes9x +snes9x_CORE = snes9x_libretro.so +snes9x_BUILD_PATH = snes9x/libretro + +libretro-uae_REPO = https://github.com/libretro/libretro-uae +libretro-uae_BRANCH = 2.6.1 +libretro-uae_CORE = puae2021_libretro.so + +libretro-cap32_REPO = https://github.com/libretro/libretro-cap32 +libretro-cap32_CORE = cap32_libretro.so + +c64_REPO = https://github.com/libretro/vice-libretro +c64_CORE = vice_x64_libretro.so +c64_FLAGS = EMUTYPE=x64 + +c128_REPO = https://github.com/libretro/vice-libretro +c128_CORE = vice_x128_libretro.so +c128_FLAGS = EMUTYPE=x128 + +vic_REPO = https://github.com/libretro/vice-libretro +vic_CORE = vice_xvic_libretro.so +vic_FLAGS = EMUTYPE=xvic + +pet_REPO = https://github.com/libretro/vice-libretro +pet_CORE = vice_xpet_libretro.so +pet_FLAGS = EMUTYPE=xpet + +plus4_REPO = https://github.com/libretro/vice-libretro +plus4_CORE = vice_xplus4_libretro.so +plus4_FLAGS = EMUTYPE=xplus4 + +bluemsx_REPO = https://github.com/libretro/blueMSX-libretro +bluemsx_CORE = bluemsx_libretro.so +bluemsx_MAKEFILE = Makefile.libretro + +gearcoleco_REPO = https://github.com/drhelius/Gearcoleco.git +gearcoleco_CORE = gearcoleco_libretro.so +gearcoleco_BUILD_PATH = gearcoleco/platforms/libretro + +############################### + +include ../../all/cores/makefile diff --git a/workspace/h700/cores/patches/a2600.patch b/workspace/h700/cores/patches/a2600.patch new file mode 100644 index 000000000..b4ce3be9f --- /dev/null +++ b/workspace/h700/cores/patches/a2600.patch @@ -0,0 +1,24 @@ +diff --git a/Makefile b/Makefile +index a22eb5d..c55c8cf 100644 +--- a/Makefile ++++ b/Makefile +@@ -383,6 +383,19 @@ else ifeq ($(platform), miyoo) + FLAGS += -fomit-frame-pointer -march=armv5te -mtune=arm926ej-s + fpic := -fPIC + ++# target platform h700 trimUI brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=link.T ++ FLAGS += -DARM -DALIGN_DWORD -falign-functions=16 -pipe -fstack-protector ++ FLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ fpic := -fPIC ++ HAVE_NEON = 1 ++ + # Windows MSVC 2003 Xbox 1 + else ifeq ($(platform), xbox1_msvc2003) + TARGET := $(TARGET_NAME)_libretro_xdk1.lib diff --git a/workspace/h700/cores/patches/a5200.patch b/workspace/h700/cores/patches/a5200.patch new file mode 100644 index 000000000..ed62d8633 --- /dev/null +++ b/workspace/h700/cores/patches/a5200.patch @@ -0,0 +1,23 @@ +diff --git a/Makefile b/Makefile +index 67a7e1f..184ec33 100644 +--- a/Makefile ++++ b/Makefile +@@ -326,6 +326,18 @@ else ifeq ($(platform), miyoo) + FLAGS += -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s + fpic := -fPIC + ++# target platform h700 trimUI brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=link.T ++ FLAGS += -fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ fpic := -fPIC ++ HAVE_NEON = 1 ++ + # Raspberry Pi 1 + else ifeq ($(platform), rpi1) + TARGET := $(TARGET_NAME)_libretro.so diff --git a/workspace/h700/cores/patches/a7800.patch b/workspace/h700/cores/patches/a7800.patch new file mode 100644 index 000000000..7b07efb9b --- /dev/null +++ b/workspace/h700/cores/patches/a7800.patch @@ -0,0 +1,23 @@ +diff --git a/Makefile b/Makefile +index dc2a31c..2a8bca2 100644 +--- a/Makefile ++++ b/Makefile +@@ -328,6 +328,18 @@ else ifeq ($(platform), miyoo) + FLAGS += -fomit-frame-pointer -ffast-math -march=armv5te -mtune=arm926ej-s + fpic := -fPIC + ++# target platform h700 trimUI brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=link.T ++ FLAGS += -fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ fpic := -fPIC ++ HAVE_NEON = 1 ++ + # Raspberry Pi 1 + else ifeq ($(platform), rpi1) + TARGET := $(TARGET_NAME)_libretro.so diff --git a/workspace/h700/cores/patches/bluemsx.patch b/workspace/h700/cores/patches/bluemsx.patch new file mode 100644 index 000000000..f1ab4b2bd --- /dev/null +++ b/workspace/h700/cores/patches/bluemsx.patch @@ -0,0 +1,30 @@ +diff --git a/Makefile.libretro b/Makefile.libretro +index 6f412c7..9a8a14a 100644 +--- a/Makefile.libretro ++++ b/Makefile.libretro +@@ -188,6 +188,25 @@ else ifeq ($(platform), classic_armv8_a35) + LDFLAGS += -marm -mcpu=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard -Ofast -flto -fuse-linker-plugin + ####################################### + ++# (Trimui Brick/Smart Pro) ### ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ fpic := -fPIC ++ SHARED := -shared -Wl,-version-script=link.T -Wl,-no-undefined ++ CFLAGS += -Ofast \ ++ -fuse-linker-plugin \ ++ -fno-stack-protector -fno-ident -fomit-frame-pointer \ ++ -fmerge-all-constants -ffast-math -funroll-all-loops \ ++ -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CPPFLAGS += $(CFLAGS) ++ HAVE_NEON = 1 ++ LDFLAGS += -lrt ++ LDFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -Ofast -flto -fuse-linker-plugin ++####################################### ++ + # OS X + else ifeq ($(platform), osx) + TARGET := $(TARGET_NAME)_libretro.dylib diff --git a/workspace/h700/cores/patches/c128.patch b/workspace/h700/cores/patches/c128.patch new file mode 100644 index 000000000..6516d1ca5 --- /dev/null +++ b/workspace/h700/cores/patches/c128.patch @@ -0,0 +1,21 @@ +diff --git a/Makefile b/Makefile +index 62cb321..e50aa6e 100644 +--- a/Makefile ++++ b/Makefile +@@ -380,6 +380,16 @@ else ifneq (,$(findstring armv,$(platform))) + endif + CFLAGS += -DARM -marm -DALIGN_DWORD -mthumb-interwork -falign-functions=16 -pipe -fstack-protector + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T ++ HAVE_NEON = 1 ++ CFLAGS += -DARM -DALIGN_DWORD -falign-functions=16 -pipe -fstack-protector ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ + # Wincross64 + else ifeq ($(platform), wincross64) + AR = x86_64-w64-mingw32-ar diff --git a/workspace/h700/cores/patches/c64.patch b/workspace/h700/cores/patches/c64.patch new file mode 100644 index 000000000..6516d1ca5 --- /dev/null +++ b/workspace/h700/cores/patches/c64.patch @@ -0,0 +1,21 @@ +diff --git a/Makefile b/Makefile +index 62cb321..e50aa6e 100644 +--- a/Makefile ++++ b/Makefile +@@ -380,6 +380,16 @@ else ifneq (,$(findstring armv,$(platform))) + endif + CFLAGS += -DARM -marm -DALIGN_DWORD -mthumb-interwork -falign-functions=16 -pipe -fstack-protector + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T ++ HAVE_NEON = 1 ++ CFLAGS += -DARM -DALIGN_DWORD -falign-functions=16 -pipe -fstack-protector ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ + # Wincross64 + else ifeq ($(platform), wincross64) + AR = x86_64-w64-mingw32-ar diff --git a/workspace/h700/cores/patches/fake-08.patch b/workspace/h700/cores/patches/fake-08.patch new file mode 100644 index 000000000..8d9bbf454 --- /dev/null +++ b/workspace/h700/cores/patches/fake-08.patch @@ -0,0 +1,22 @@ +diff --git forkSrcPrefix/platform/libretro/Makefile forkDstPrefix/platform/libretro/Makefile +index be0f1b46bb3ab10be4a9f896f5e8841dd630b35b..f6b4d892627ec2a81b01ddb4da7f0c7a8022221f 100644 +--- forkSrcPrefix/platform/libretro/Makefile ++++ forkDstPrefix/platform/libretro/Makefile +@@ -123,7 +123,16 @@ else ifeq ($(platform), miyoomini) + CXXFLAGS += -marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7ve -D_NEED_FULL_PATH_ + fpic := -fPIC + SHARED := -shared -Wl,--version-script=link.T +- ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ STRIP = $(CROSS_COMPILE)strip ++ CXXFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=link.T + else ifeq ($(platform), gcw0) + TARGET := $(TARGET_NAME)_libretro_gcw0.so + CC = /opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc diff --git a/workspace/h700/cores/patches/fbneo.patch b/workspace/h700/cores/patches/fbneo.patch new file mode 100644 index 000000000..60ed40322 --- /dev/null +++ b/workspace/h700/cores/patches/fbneo.patch @@ -0,0 +1,108 @@ +diff --git a/src/burner/libretro/Makefile b/src/burner/libretro/Makefile +old mode 100644 +new mode 100755 +index 0b7d646c7..2784aa150 +--- a/src/burner/libretro/Makefile ++++ b/src/burner/libretro/Makefile +@@ -346,6 +346,22 @@ else ifeq ($(platform), classic_armv7_a7) + CFLAGS += $(PLATFORM_FLAGS) + CXXFLAGS += $(PLATFORM_FLAGS) + ++# target platform h700 trimUI brick ++else ifneq (,$(findstring h700,$(platform))) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CXX=$(CROSS_COMPILE)g++ ++ fpic := -fPIC ++ SHARED := -shared -Wl,-no-undefined -Wl,--version-script=$(VERSION_SCRIPT) ++ PLATFORM_FLAGS := -O3 -Ofast -DNDEBUG=1 -fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a+simd ++ USE_EXPERIMENTAL_FLAGS = 0 ++ HAVE_NEON = 1 ++ USE_CYCLONE = 1 ++ ARCH = arm ++ ENDIANNESS_DEFINES := -DLSB_FIRST ++ LDFLAGS += -lstdc++ -static-libgcc -static-libstdc++ -lpthread -lm -flto ++ CFLAGS += $(PLATFORM_FLAGS) ++ CXXFLAGS += $(PLATFORM_FLAGS) ++ + # (armv8 a35, hard point, neon based) ### + # Playstation Classic + else ifeq ($(platform), classic_armv8_a35) +diff --git a/src/burner/libretro/libretro.cpp b/src/burner/libretro/libretro.cpp +index 3726ec60f..30a6c8cd6 100644 +--- a/src/burner/libretro/libretro.cpp ++++ b/src/burner/libretro/libretro.cpp +@@ -78,7 +78,7 @@ INT32 nAudSegLen = 0; + + static UINT8* pVidImage = NULL; + static bool bVidImageNeedRealloc = false; +-static bool bRotationDone = false; ++static bool bRotationDone = true; + static int16_t *pAudBuffer = NULL; + static char text_missing_files[2048] = ""; + +@@ -1550,8 +1550,46 @@ void retro_run() + // current frame will be corrupted, let's dupe instead + pBurnDraw = NULL; + } ++ // get flags ++ UINT32 flags = BurnDrvGetFlags(); ++ ++ if (pBurnDraw && flags & BDF_ORIENTATION_VERTICAL) { ++ int y=0; ++ ++ UINT8 *pTMP = (UINT8*)malloc(nGameWidth * nGameHeight * nBurnBpp); ++ memcpy(pTMP, pBurnDraw, nGameWidth * nGameHeight * nBurnBpp); ++ ++ int newGameWidth = nGameHeight; ++ int newGameHeight = nGameWidth; ++ int newBurnPitch = newGameWidth * nBurnBpp; ++ ++ if ((BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL)) ++ while (y < newGameHeight) { ++ int x = 0; ++ ++ if ( flags & BDF_ORIENTATION_FLIPPED ) { ++ while (x < newGameWidth) ++ { ++ for (int i = 0; i < nBurnBpp; i++) ++ pBurnDraw[x * nBurnBpp + y * newBurnPitch + i] = pTMP[(nGameHeight - x - 1) * nBurnPitch + y * nBurnBpp + i]; ++ x++; ++ } ++ } else { ++ while (x < newGameWidth) ++ { ++ for (int i = 0; i < nBurnBpp; i++) ++ pBurnDraw[x * nBurnBpp + y * newBurnPitch + i] = pTMP[x * nBurnPitch + (nGameWidth - y - 1) * nBurnBpp + i]; ++ x++; ++ } ++ } ++ y++; ++ } ++ free(pTMP); ++ video_cb(pBurnDraw, newGameWidth, newGameHeight, newBurnPitch); ++ } else { ++ video_cb(pBurnDraw, nGameWidth, nGameHeight, nBurnPitch); ++ } + +- video_cb(pBurnDraw, nGameWidth, nGameHeight, nBurnPitch); + + bool updated = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) +@@ -1567,7 +1605,7 @@ void retro_run() + // change orientation/geometry if vertical mode was toggled on/off + if (old_nVerticalMode != nVerticalMode) + { +- SetRotation(); ++ //SetRotation(); + struct retro_system_av_info av_info; + retro_get_system_av_info(&av_info); + environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info); +@@ -2184,7 +2222,7 @@ static bool retro_load_game_common() + + // Initializing display, autorotate if needed + BurnDrvGetFullSize(&nGameWidth, &nGameHeight); +- SetRotation(); ++ //SetRotation(); + SetColorDepth(); + + VideoBufferInit(); diff --git a/workspace/h700/cores/patches/fceumm.patch b/workspace/h700/cores/patches/fceumm.patch new file mode 100644 index 000000000..90a637c06 --- /dev/null +++ b/workspace/h700/cores/patches/fceumm.patch @@ -0,0 +1,28 @@ +diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro +index 036c41f48b087c99b2276b2d41a71d661fd85145..891eb96ceeb1da868d6d2ed40392b51b65dcbb20 100644 +--- forkSrcPrefix/Makefile.libretro ++++ forkDstPrefix/Makefile.libretro +@@ -461,6 +461,23 @@ else ifeq ($(platform), miyoo) + PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s + EXTERNAL_ZLIB = 1 + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=src/drivers/libretro/link.T -Wl,-no-undefined ++ LDFLAGS += -fPIC -flto ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -fomit-frame-pointer -ffast-math -fPIC -flto ++ OPTIMIZE := -Ofast -DNDEBUG ++ EXTERNAL_ZLIB = 1 ++ HAVE_NTSC = 0 ++ ifeq (,$(DEBUG)) ++ # LDFLAGS += -s ++ endif ++ + # Windows MSVC 2017 all architectures + else ifneq (,$(findstring windows_msvc2017,$(platform))) + CC = cl.exe diff --git a/workspace/h700/cores/patches/gambatte.patch b/workspace/h700/cores/patches/gambatte.patch new file mode 100644 index 000000000..841b073ed --- /dev/null +++ b/workspace/h700/cores/patches/gambatte.patch @@ -0,0 +1,24 @@ +diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro +index ffaba21e7a88f90786d818ab550b68acd05738bf..2095b2f843eaf6be9abec24ce3da69b551da86a6 100644 +--- forkSrcPrefix/Makefile.libretro ++++ forkDstPrefix/Makefile.libretro +@@ -381,6 +381,19 @@ else ifeq ($(platform), gcw0) + CFLAGS += -fomit-frame-pointer -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float + CXXFLAGS += $(CFLAGS) + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=$(version_script) ++ LDFLAGS += -fPIC -flto ++ PLATFORM_DEFINES := -DCC_RESAMPLER -DCC_RESAMPLER_NO_HIGHPASS ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -fomit-frame-pointer -ffast-math -fPIC -flto ++ CXXFLAGS += $(CFLAGS) ++ + # RETROFW + else ifeq ($(platform), retrofw) + TARGET := $(TARGET_NAME)_libretro.so diff --git a/workspace/h700/cores/patches/gearcoleco.patch b/workspace/h700/cores/patches/gearcoleco.patch new file mode 100644 index 000000000..f43dfd6be --- /dev/null +++ b/workspace/h700/cores/patches/gearcoleco.patch @@ -0,0 +1,29 @@ +diff --git a/platforms/libretro/Makefile b/platforms/libretro/Makefile +index 581ee84..d9db102 100644 +--- a/platforms/libretro/Makefile ++++ b/platforms/libretro/Makefile +@@ -274,6 +274,24 @@ else ifeq ($(platform), miyoo) + PLATFORM_DEFINES := -DCC_RESAMPLER -DCC_RESAMPLER_NO_HIGHPASS + CFLAGS += -fomit-frame-pointer -ffast-math -march=armv5te -mtune=arm926ej-s + CXXFLAGS += $(CFLAGS) ++# TrimUI Brick/Smart Pro ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ fpic := -fPIC ++ SHARED := -shared -Wl,-version-script=$(CORE_DIR)/link.T ++ PLATFORM_DEFINES := -DCC_RESAMPLER -DCC_RESAMPLER_NO_HIGHPASS ++ CFLAGS += -Ofast \ ++ -fuse-linker-plugin \ ++ -fno-stack-protector -fno-ident -fomit-frame-pointer \ ++ -fmerge-all-constants -ffast-math -funroll-all-loops \ ++ -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CXXFLAGS += $(CFLAGS) ++ HAVE_NEON = 1 ++ USE_DYNAREC = 1 ++ LDFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -Ofast -flto -fuse-linker-plugin + # PS2 + else ifeq ($(platform), ps2) + TARGET := $(TARGET_NAME)_libretro_$(platform).a diff --git a/workspace/h700/cores/patches/gpsp.patch b/workspace/h700/cores/patches/gpsp.patch new file mode 100644 index 000000000..5857b3ad9 --- /dev/null +++ b/workspace/h700/cores/patches/gpsp.patch @@ -0,0 +1,26 @@ +diff --git forkSrcPrefix/Makefile forkDstPrefix/Makefile +index dc4b60dec7f70a153dbc2eb849cd5acfc90f9d4d..94c7f8dd037284153b6858730a10b6aaaafd5ad4 100644 +--- forkSrcPrefix/Makefile ++++ forkDstPrefix/Makefile +@@ -524,6 +524,21 @@ else ifeq ($(platform), miyoomini) + ARCH = arm + BUILTIN_GPU = neon + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=link.T ++ fpic := -fPIC -DPIC ++ CFLAGS += -fomit-frame-pointer -ffast-math ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ ARCH = arm64 ++ CPU_ARCH := arm64 ++ MMAP_JIT_CACHE = 1 ++ HAVE_DYNAREC = 1 ++ + # Windows + else + TARGET := $(TARGET_NAME)_libretro.dll diff --git a/workspace/h700/cores/patches/handy.patch b/workspace/h700/cores/patches/handy.patch new file mode 100644 index 000000000..b1024fca7 --- /dev/null +++ b/workspace/h700/cores/patches/handy.patch @@ -0,0 +1,22 @@ +diff --git a/Makefile b/Makefile +index 088c344..9573f27 100644 +--- a/Makefile ++++ b/Makefile +@@ -270,6 +270,17 @@ else ifeq ($(platform), gcw0) + SHARED := -shared -Wl,--no-undefined -Wl,-version-script=$(LIBRETRO_DIR)/link.T + FLAGS += -DDINGUX -fomit-frame-pointer -ffast-math -march=armv5te -mtune=arm926ej-s + ++# target platform h700 trimUI brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined -Wl,-version-script=$(LIBRETRO_DIR)/link.T ++ FLAGS += -fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ HAVE_NEON = 1 ++ + # Nintendo Switch (libnx) + else ifeq ($(platform), libnx) + include $(DEVKITPRO)/libnx/switch_rules diff --git a/workspace/h700/cores/patches/libretro-cap32.patch b/workspace/h700/cores/patches/libretro-cap32.patch new file mode 100644 index 000000000..45add2b00 --- /dev/null +++ b/workspace/h700/cores/patches/libretro-cap32.patch @@ -0,0 +1,29 @@ +diff --git a/Makefile b/Makefile +index 1aa1720..228fb6b 100644 +--- a/Makefile ++++ b/Makefile +@@ -390,6 +390,24 @@ else ifeq ($(platform), miyoo) + CFLAGS += -funsafe-math-optimizations -fsingle-precision-constant -fexpensive-optimizations + CFLAGS += -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=link.T -Wl,-no-undefined ++ LDFLAGS += -fPIC -flto ++ CFLAGS := -DFRONTEND_SUPPORTS_RGB565 -DINLINE="inline" -DM16BPP ++ CFLAGS += -ffast-math ++ CFLAGS += -falign-functions=1 -falign-jumps=1 -falign-loops=1 ++ CFLAGS += -fomit-frame-pointer -ffast-math ++ CFLAGS += -funsafe-math-optimizations -fsingle-precision-constant -fexpensive-optimizations ++ CFLAGS += -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -fomit-frame-pointer -ffast-math -fPIC -flto ++ OPTIMIZE := -Ofast -DNDEBUG ++ + # emscripten + else ifeq ($(platform), emscripten) + TARGET := $(TARGET_NAME)_libretro_$(platform).bc diff --git a/workspace/h700/cores/patches/libretro-uae.patch b/workspace/h700/cores/patches/libretro-uae.patch new file mode 100644 index 000000000..6c0e513cd --- /dev/null +++ b/workspace/h700/cores/patches/libretro-uae.patch @@ -0,0 +1,45 @@ +diff --git a/Makefile b/Makefile +index 7e5ff625..d0e5bdf9 100644 +--- a/Makefile ++++ b/Makefile +@@ -37,6 +37,18 @@ ifneq (,$(findstring unix,$(platform))) + endif + endif + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined ++ LDFLAGS += -lm -lpthread -ldl ++ LDFLAGS += -fPIC -flto ++ fpic := -fPIC ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a+crc+simd ++ CFLAGS += -fomit-frame-pointer -ffast-math -fPIC -flto ++ CFLAGS += -Ofast -flto=4 -fmerge-all-constants -fno-math-errno ++ CXXFLAGS += $(CFLAGS) ++ + # Raspberry Pi 4 + else ifneq (,$(findstring rpi4,$(platform))) + TARGET := $(TARGET_NAME)_libretro.so +diff --git a/sources/src/misc.c b/sources/src/misc.c +index a97b28bc..b328969d 100644 +--- a/sources/src/misc.c ++++ b/sources/src/misc.c +@@ -543,7 +543,7 @@ char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src, int defchar) + char *ua_copy (char *dst, int maxlen, const char *src) + { + dst[0] = 0; +- strncpy (dst, src, maxlen); ++ strncpy (dst, src, maxlen & 0xffffffff); + return dst; + } + +@@ -555,7 +555,7 @@ TCHAR *au (const char *s) + TCHAR *au_copy (TCHAR *dst, int maxlen, const char *src) + { + dst[0] = 0; +- memcpy (dst, src, maxlen); ++ memcpy (dst, src, maxlen & 0xffffffff); + return dst; + } + diff --git a/workspace/h700/cores/patches/mednafen_pce_fast.patch b/workspace/h700/cores/patches/mednafen_pce_fast.patch new file mode 100644 index 000000000..c2ca9beb9 --- /dev/null +++ b/workspace/h700/cores/patches/mednafen_pce_fast.patch @@ -0,0 +1,25 @@ +diff --git forkSrcPrefix/Makefile forkDstPrefix/Makefile +index 5b54403d915e46cb0df8f428355665fbe26e05b4..f72733d9689aa78795ce8b9d777b0ab9fcc5b65e 100644 +--- forkSrcPrefix/Makefile ++++ forkDstPrefix/Makefile +@@ -380,6 +380,20 @@ else ifeq ($(platform), miyoo) + CXXFLAGS += -std=c++11 + CFLAGS += -std=gnu11 + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T ++ LDFLAGS += -lrt ++ FLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ FLAGS += -fomit-frame-pointer -ffast-math -D_GNU_SOURCE ++ CXXFLAGS += -std=c++11 ++ CFLAGS += -std=gnu11 ++ + # Windows MSVC 2017 all architectures + else ifneq (,$(findstring windows_msvc2017,$(platform))) + diff --git a/workspace/h700/cores/patches/mednafen_supafaust.patch b/workspace/h700/cores/patches/mednafen_supafaust.patch new file mode 100644 index 000000000..b99224544 --- /dev/null +++ b/workspace/h700/cores/patches/mednafen_supafaust.patch @@ -0,0 +1,34 @@ +diff --git forkSrcPrefix/Makefile forkDstPrefix/Makefile +index f34a01587cda48cc28ebdfd7f00151b06ea88c42..6966d3c4802b200dea33bdbe8e96b2082a36d577 100644 +--- forkSrcPrefix/Makefile ++++ forkDstPrefix/Makefile +@@ -88,6 +88,29 @@ else ifeq ($(platform), classic_armv8_a35) + ARCH = arm + CFLAGS += -march=armv8-a + LDFLAGS += -static-libgcc -static-libstdc++ ++ ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ STRIP = $(CROSS_COMPILE)strip ++ NEED_BPP := 16 ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -Ofast \ ++ -flto=4 -fwhole-program -fuse-linker-plugin \ ++ -fdata-sections -ffunction-sections -Wl,--gc-sections \ ++ -fno-stack-protector -fno-ident -fomit-frame-pointer \ ++ -falign-functions=1 -falign-jumps=1 -falign-loops=1 \ ++ -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \ ++ -fmerge-all-constants -fno-math-errno ++ CXXFLAGS += $(CFLAGS) ++ HAVE_NEON = 1 ++ ARCH = arm64 ++ + ####################################### + + else ifeq ($(platform), osx) diff --git a/workspace/h700/cores/patches/mednafen_vb.patch b/workspace/h700/cores/patches/mednafen_vb.patch new file mode 100644 index 000000000..a6ea64e00 --- /dev/null +++ b/workspace/h700/cores/patches/mednafen_vb.patch @@ -0,0 +1,29 @@ +diff --git forkSrcPrefix/Makefile forkDstPrefix/Makefile +index c3d5d3b30d71a8f9ed332482fa2af1c21b02605d..5e710154e499ddd7b1ae699122c38753b0f4bb4c 100644 +--- forkSrcPrefix/Makefile ++++ forkDstPrefix/Makefile +@@ -217,6 +217,24 @@ else ifneq (,$(filter $(platform), ps3 psl1ght)) + endif + FLAGS += -D__PS3__ + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ NEED_BPP := 16 ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T ++ LDFLAGS += -lrt ++ CFLAGS += -fomit-frame-pointer -ffast-math -fPIC -flto ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CPPFLAGS += $(CFLAGS) ++ LDFLAGS += -flto ++ ifeq (,$(DEBUG)) ++ LDFLAGS += -s ++ endif ++ + # PSP + else ifeq ($(platform), psp1) + TARGET := $(TARGET_NAME)_libretro_$(platform).a diff --git a/workspace/h700/cores/patches/mgba.patch b/workspace/h700/cores/patches/mgba.patch new file mode 100644 index 000000000..780b6cc6f --- /dev/null +++ b/workspace/h700/cores/patches/mgba.patch @@ -0,0 +1,31 @@ +diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro +index 108148f4579f4727146e5b8c1e05ef7382654208..35e6399147a4ef75947ecb2ad4a94f0820ef24d0 100644 +--- forkSrcPrefix/Makefile.libretro ++++ forkDstPrefix/Makefile.libretro +@@ -417,6 +417,26 @@ else ifeq ($(platform), miyoo) + CFLAGS += -fno-common -ftree-vectorize -funswitch-loops + DEFINES += -std=c99 + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=link.T ++ fpic := -fPIC ++ PLATFORM_DEFINES += -D_GNU_SOURCE -DHAVE_STRTOF_L -DHAVE_LOCALE ++ CFLAGS += -fomit-frame-pointer -ffast-math ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -fno-common -ftree-vectorize -funswitch-loops ++ HAVE_NEON = 1 ++ ARCH = arm64 ++ BUILTIN_GPU = neon ++ CPU_ARCH := arm ++ MMAP_JIT_CACHE = 1 ++ HAVE_DYNAREC = 1 ++ DEFINES += -std=c99 ++ + # Windows + else + TARGET := $(TARGET_NAME)_libretro.dll diff --git a/workspace/h700/cores/patches/pcsx_rearmed.patch b/workspace/h700/cores/patches/pcsx_rearmed.patch new file mode 100644 index 000000000..732843eb2 --- /dev/null +++ b/workspace/h700/cores/patches/pcsx_rearmed.patch @@ -0,0 +1,30 @@ +diff --git a/Makefile.libretro b/Makefile.libretro +index 2197946c..df72d03d +--- a/Makefile.libretro ++++ b/Makefile.libretro +@@ -518,6 +518,25 @@ else ifeq ($(platform), rpi4_64) + fpic := -fPIC + CFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a72 -ftree-vectorize + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a+simd -fomit-frame-pointer ++ CFLAGS += -ffast-math -fdata-sections -ffunction-sections -fsingle-precision-constant -flto -fPIC ++ LDFLAGS += -flto -fPIC ++ ifeq (,$(DEBUG)) ++ # LDFLAGS += -s ++ endif ++ CPU_ARCH := arm64 ++ OPTIMIZE := -O3 -Ofast -DNDEBUG ++ HAVE_NEON = 1 ++ BUILTIN_GPU = neon ++ ARCH = arm64 ++ DYNAREC = ari64 ++ + # Classic Platforms #################### + # Platform affix = classic__<µARCH> + # Help at https://modmyclassic.com/comp diff --git a/workspace/h700/cores/patches/pet.patch b/workspace/h700/cores/patches/pet.patch new file mode 100644 index 000000000..6516d1ca5 --- /dev/null +++ b/workspace/h700/cores/patches/pet.patch @@ -0,0 +1,21 @@ +diff --git a/Makefile b/Makefile +index 62cb321..e50aa6e 100644 +--- a/Makefile ++++ b/Makefile +@@ -380,6 +380,16 @@ else ifneq (,$(findstring armv,$(platform))) + endif + CFLAGS += -DARM -marm -DALIGN_DWORD -mthumb-interwork -falign-functions=16 -pipe -fstack-protector + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T ++ HAVE_NEON = 1 ++ CFLAGS += -DARM -DALIGN_DWORD -falign-functions=16 -pipe -fstack-protector ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ + # Wincross64 + else ifeq ($(platform), wincross64) + AR = x86_64-w64-mingw32-ar diff --git a/workspace/h700/cores/patches/picodrive.patch b/workspace/h700/cores/patches/picodrive.patch new file mode 100644 index 000000000..f31cf87ce --- /dev/null +++ b/workspace/h700/cores/patches/picodrive.patch @@ -0,0 +1,36 @@ +diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro +index 0d1dc08f81a11cef6b3b7238367b1ff27fcf1ead..1f87c76c3242023c4095f0c9087c52765d93c33c 100644 +--- forkSrcPrefix/Makefile.libretro ++++ forkDstPrefix/Makefile.libretro +@@ -497,6 +497,31 @@ else ifeq ($(platform), miyoo) + HAVE_ARMv6 = 0 + LOW_MEMORY = 1 + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--no-undefined ++ DONT_COMPILE_IN_ZLIB = 1 ++ CFLAGS += -Ofast \ ++ -fdata-sections -ffunction-sections -Wl,--gc-sections \ ++ -fno-stack-protector -fno-ident -fomit-frame-pointer \ ++ -falign-functions=1 -falign-jumps=1 -falign-loops=1 \ ++ -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \ ++ -fmerge-all-constants -fno-math-errno ++ CFLAGS += -fPIC -flto ++ CFLAGS += -fomit-frame-pointer -ffast-math -D__GCW0__ ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ LDFLAGS += -flto ++ HAVE_NEON = 1 ++ BUILTIN_GPU = neon ++ ARCH = aarch64 ++ ifeq (,$(DEBUG)) ++ LDFLAGS += -s ++ endif ++ + # Windows MSVC 2017 all architectures + else ifneq (,$(findstring windows_msvc2017,$(platform))) + NO_GCC := 1 diff --git a/workspace/h700/cores/patches/plus4.patch b/workspace/h700/cores/patches/plus4.patch new file mode 100644 index 000000000..6516d1ca5 --- /dev/null +++ b/workspace/h700/cores/patches/plus4.patch @@ -0,0 +1,21 @@ +diff --git a/Makefile b/Makefile +index 62cb321..e50aa6e 100644 +--- a/Makefile ++++ b/Makefile +@@ -380,6 +380,16 @@ else ifneq (,$(findstring armv,$(platform))) + endif + CFLAGS += -DARM -marm -DALIGN_DWORD -mthumb-interwork -falign-functions=16 -pipe -fstack-protector + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T ++ HAVE_NEON = 1 ++ CFLAGS += -DARM -DALIGN_DWORD -falign-functions=16 -pipe -fstack-protector ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ + # Wincross64 + else ifeq ($(platform), wincross64) + AR = x86_64-w64-mingw32-ar diff --git a/workspace/h700/cores/patches/pokemini.patch b/workspace/h700/cores/patches/pokemini.patch new file mode 100644 index 000000000..3d7dfa181 --- /dev/null +++ b/workspace/h700/cores/patches/pokemini.patch @@ -0,0 +1,27 @@ +diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro +index ef2f9e7d1c6041bea8e2c8a61cdd363ed73a7482..ada8785f566af89cc77f5ab2dd9e670b0a998545 100644 +--- forkSrcPrefix/Makefile.libretro ++++ forkDstPrefix/Makefile.libretro +@@ -504,6 +504,22 @@ else ifeq ($(platform), retrofw) + CFLAGS += -ffast-math -fomit-frame-pointer -march=mips32 -mtune=mips32 -mhard-float + CFLAGS += -DDINGUX + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=libretro/link.T -Wl,--no-undefined ++ fpic := -fPIC ++ CFLAGS += -DARM ++ CFLAGS += $(PTHREAD_FLAGS) ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -ffast-math -fomit-frame-pointer ++ CFLAGS += -DDINGUX ++ HAVE_NEON = 1 ++ ARCH = arm64 ++ + else ifeq ($(platform), msvc) + OBJOUT = -Fo + diff --git a/workspace/h700/cores/patches/prboom.patch b/workspace/h700/cores/patches/prboom.patch new file mode 100644 index 000000000..11184040b --- /dev/null +++ b/workspace/h700/cores/patches/prboom.patch @@ -0,0 +1,30 @@ +diff --git a/Makefile b/Makefile +index 3d068a5..7d14f14 100644 +--- a/Makefile ++++ b/Makefile +@@ -378,7 +378,24 @@ else ifeq ($(platform), miyoo) + SHARED := -shared -Wl,--version-script=libretro/link.T -Wl,-no-undefined + CFLAGS += -ffast-math -march=armv5te -mtune=arm926ej-s -fomit-frame-pointer + HAVE_LOW_MEMORY = 1 +- ++# target platform h700 trimUI brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ fpic := -fPIC ++ LDFLAGS += -s $(fpic) -shared -Wl,--version-script=libretro/link.T -Wl,-no-undefined ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CFLAGS += -fomit-frame-pointer -ffast-math -fPIC -flto ++ $(MYARCH) ++ CXXFLAGS += $(CFLAGS) ++ CPPFLAGS += $(CFLAGS) ++ ASFLAGS += $(CFLAGS) ++ HAVE_NEON = 1 ++ HAVE_LOW_MEMORY = 1 ++ CPU_ARCH := arm64 ++ ARM = 1 + # Windows MSVC 2003 Xbox 1 + else ifeq ($(platform), xbox1_msvc2003) + TARGET := $(TARGET_NAME)_libretro_xdk1.lib diff --git a/workspace/h700/cores/patches/race.patch b/workspace/h700/cores/patches/race.patch new file mode 100644 index 000000000..55e331d2d --- /dev/null +++ b/workspace/h700/cores/patches/race.patch @@ -0,0 +1,23 @@ +diff --git forkSrcPrefix/Makefile forkDstPrefix/Makefile +index 792a6d82915c32edd3df6ceec541499f6ca25ac5..dc02b361d7db47e011b6d3addf89cfb31503575a 100644 +--- forkSrcPrefix/Makefile ++++ forkDstPrefix/Makefile +@@ -373,6 +373,18 @@ else ifeq ($(platform), miyoo) + CFLAGS += -fomit-frame-pointer -ffast-math -march=armv5te -mtune=arm926ej-s + CXXFLAGS += $(CFLAGS) + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ fpic := -fPIC ++ SHARED := -shared -Wl,-version-script=$(LIBRETRO_DIR)/link.T ++ PLATFORM_DEFINES := -DCC_RESAMPLER -DCC_RESAMPLER_NO_HIGHPASS ++ CFLAGS += -fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ CXXFLAGS += $(CFLAGS) ++ + # Windows MSVC 2010 x64 + else ifeq ($(platform), windows_msvc2010_x64) + CC = cl.exe diff --git a/workspace/h700/cores/patches/snes9x.patch b/workspace/h700/cores/patches/snes9x.patch new file mode 100644 index 000000000..a7b1c3988 --- /dev/null +++ b/workspace/h700/cores/patches/snes9x.patch @@ -0,0 +1,22 @@ +diff --git a/libretro/Makefile b/libretro/Makefile +index 466fa6b..ec40f1a +--- a/libretro/Makefile ++++ b/libretro/Makefile +@@ -82,6 +82,17 @@ ifneq (,$(findstring unix,$(platform))) + endif + endif + ++# h700 ++else ifneq (,$(findstring h700,$(platform))) ++ CC=$(CROSS_COMPILE)gcc ++ CXX=$(CROSS_COMPILE)g++ ++ CFLAGS += $(LTO) ++ CXXFLAGS += $(LTO) -O3 -Ofast -march=armv8-a+simd -mtune=cortex-a53 -ffast-math ++ LDFLAGS += $(LTO) -lstdc++ -flto ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ LIBS += -lz ++ SHARED := -shared -Wl,--version-script=link.T -Wl,-z,defs + # ODROIDN2 + else ifneq (,$(findstring CortexA73_G12B,$(platform))) + TARGET := $(TARGET_NAME)_libretro.so diff --git a/workspace/h700/cores/patches/snes9x2005_plus.patch b/workspace/h700/cores/patches/snes9x2005_plus.patch new file mode 100644 index 000000000..08ec84a9c --- /dev/null +++ b/workspace/h700/cores/patches/snes9x2005_plus.patch @@ -0,0 +1,36 @@ +diff --git forkSrcPrefix/Makefile forkDstPrefix/Makefile +index 07d5368a8e78a020813732239ec369d83e931ede..009f13b8e61c634de4cb83e97785a10b83b4322d 100644 +--- forkSrcPrefix/Makefile ++++ forkDstPrefix/Makefile +@@ -288,6 +288,31 @@ else ifeq ($(platform), miyoo) + FLAGS += -fomit-frame-pointer -ffast-math -march=armv5te -mtune=arm926ej-s + FLAGS += -DFAST_ALIGNED_LSB_WORD_ACCESS -fno-unroll-loops + ++# TRIMUI SMART PRO ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CC = $(CROSS_COMPILE)gcc ++ CXX = $(CROSS_COMPILE)g++ ++ AR = $(CROSS_COMPILE)ar ++ SHARED := -shared -Wl,--version-script=link.T ++ LIBM := ++ CFLAGS += -Ofast \ ++ -flto=4 -fwhole-program -fuse-linker-plugin \ ++ -fdata-sections -ffunction-sections -Wl,--gc-sections \ ++ -fno-stack-protector -fno-ident -fomit-frame-pointer \ ++ -falign-functions=1 -falign-jumps=1 -falign-loops=1 \ ++ -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \ ++ -fmerge-all-constants -fno-math-errno ++ CFLAGS += -fPIC ++ CFLAGS += -DLSB_FIRST -DFAST_ALIGNED_LSB_WORD_ACCESS -DRIGHTSHIFT_IS_SAR ++ CFLAGS += -std=c99 -fomit-frame-pointer -ffast-math ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ LDFLAGS += -flto ++ OPTIMIZE += -Ofast -DNDEBUG=1 ++ ifeq (,$(DEBUG)) ++ LDFLAGS += -s ++ endif ++ + # (armv7 a7, hard point, neon based) ### + # NESC, SNESC, C64 mini + else ifeq ($(platform), classic_armv7_a7) diff --git a/workspace/h700/cores/patches/vic.patch b/workspace/h700/cores/patches/vic.patch new file mode 100644 index 000000000..6516d1ca5 --- /dev/null +++ b/workspace/h700/cores/patches/vic.patch @@ -0,0 +1,21 @@ +diff --git a/Makefile b/Makefile +index 62cb321..e50aa6e 100644 +--- a/Makefile ++++ b/Makefile +@@ -380,6 +380,16 @@ else ifneq (,$(findstring armv,$(platform))) + endif + CFLAGS += -DARM -marm -DALIGN_DWORD -mthumb-interwork -falign-functions=16 -pipe -fstack-protector + ++# TrimUI Brick ++else ifeq ($(platform), h700) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined ++ LDFLAGS += -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T ++ HAVE_NEON = 1 ++ CFLAGS += -DARM -DALIGN_DWORD -falign-functions=16 -pipe -fstack-protector ++ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a ++ + # Wincross64 + else ifeq ($(platform), wincross64) + AR = x86_64-w64-mingw32-ar diff --git a/workspace/h700/install/boot.sh b/workspace/h700/install/boot.sh new file mode 100755 index 000000000..fe3631409 --- /dev/null +++ b/workspace/h700/install/boot.sh @@ -0,0 +1,68 @@ +#!/bin/sh +# NOTE: becomes .tmp_update/h700.sh + +PLATFORM="h700" +SDCARD_PATH="/mnt/SDCARD" +REAL_SDCARD_PATH="/mnt/sdcard" +UPDATE_PATH="$SDCARD_PATH/MinUI.zip" +PAKZ_PATH="$SDCARD_PATH/*.pakz" +SYSTEM_PATH="$SDCARD_PATH/.system" + +if [ ! -e "$SDCARD_PATH" ]; then + ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true +fi + +export LD_LIBRARY_PATH="$SYSTEM_PATH/$PLATFORM/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" +export PATH="$SYSTEM_PATH/$PLATFORM/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" + +cd "$(dirname "$0")/$PLATFORM" || exit 1 + +show_progress() { + if [ -x ./show2.elf ]; then + ./show2.elf --mode=daemon --image="logo.png" --text="$1" --logoheight=128 --progress=-1 >/dev/null 2>&1 & + fi +} + +show_progress "Installing..." +sh "$SYSTEM_PATH/$PLATFORM/bin/governor.sh" performance 2>/dev/null || true +systemctl stop NetworkManager 2>/dev/null || true +killall brightCtrl.bin cexpert 2>/dev/null || true + +for pakz in $PAKZ_PATH; do + if [ ! -e "$pakz" ]; then continue; fi + echo "TEXT:Extracting $pakz" > /tmp/show2.fifo 2>/dev/null || true + ./unzip -o -d "$SDCARD_PATH" "$pakz" + rm -f "$pakz" + + if [ -f "$SDCARD_PATH/post_install.sh" ]; then + echo "TEXT:Installing $pakz" > /tmp/show2.fifo 2>/dev/null || true + sh "$SDCARD_PATH/post_install.sh" + rm -f "$SDCARD_PATH/post_install.sh" + fi +done + +if [ -f "$UPDATE_PATH" ]; then + if [ -d "$SYSTEM_PATH/$PLATFORM" ]; then + echo "TEXT:Updating NextUI" > /tmp/show2.fifo 2>/dev/null || true + else + echo "TEXT:Installing NextUI" > /tmp/show2.fifo 2>/dev/null || true + fi + + rm -rf "$SYSTEM_PATH/$PLATFORM/bin" + rm -rf "$SYSTEM_PATH/$PLATFORM/lib" + rm -rf "$SYSTEM_PATH/$PLATFORM/paks/MinUI.pak" + + ./unzip -o "$UPDATE_PATH" -d "$SDCARD_PATH" + rm -f "$UPDATE_PATH" +fi + +if [ -x "$SYSTEM_PATH/$PLATFORM/bin/install.sh" ]; then + "$SYSTEM_PATH/$PLATFORM/bin/install.sh" +fi + +LAUNCH_PATH="$SYSTEM_PATH/$PLATFORM/paks/MinUI.pak/launch.sh" +if [ -x "$LAUNCH_PATH" ]; then + exec "$LAUNCH_PATH" +fi + +poweroff diff --git a/workspace/h700/install/logo.png b/workspace/h700/install/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d19816bb31fca061d29cb72db735e2bcbc5ab16c GIT binary patch literal 18240 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 literal 0 HcmV?d00001 diff --git a/workspace/h700/install/update.sh b/workspace/h700/install/update.sh new file mode 100755 index 000000000..53a012cac --- /dev/null +++ b/workspace/h700/install/update.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +SDCARD_PATH="/mnt/SDCARD" +REAL_SDCARD_PATH="/mnt/sdcard" +SYSTEM_PATH="$SDCARD_PATH/.system/h700" +TF1_DMENU="/mnt/mmc/dmenu.bin" +TF2_DMENU="$SYSTEM_PATH/dat/dmenu.bin" + +if [ ! -e "$SDCARD_PATH" ]; then + ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true +fi + +mkdir -p "$SYSTEM_PATH/dat" + +if [ -f "$TF2_DMENU" ] && [ -d /mnt/mmc ]; then + if ! cmp -s "$TF2_DMENU" "$TF1_DMENU" 2>/dev/null; then + cp "$TF2_DMENU" "$TF1_DMENU" 2>/dev/null || true + sync + fi +fi + +exit 0 diff --git a/workspace/h700/keymon/credits.txt b/workspace/h700/keymon/credits.txt new file mode 100644 index 000000000..e885e5dd1 --- /dev/null +++ b/workspace/h700/keymon/credits.txt @@ -0,0 +1,3 @@ +based on eggs custom keymon for Trimui: + https://www.dropbox.com/sh/5e9xwvp672vt8cr/AABUIdw1vLYp9h0waoCUqHPOa/source?dl=0&subfolder_nav_tracking=1 +modified to use libmsettings \ No newline at end of file diff --git a/workspace/h700/keymon/keymon.c b/workspace/h700/keymon/keymon.c new file mode 100644 index 000000000..83a017e34 --- /dev/null +++ b/workspace/h700/keymon/keymon.c @@ -0,0 +1,170 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define VOLUME_MIN 0 +#define VOLUME_MAX 20 +#define BRIGHTNESS_MIN 0 +#define BRIGHTNESS_MAX 10 +#define COLORTEMP_MIN 0 +#define COLORTEMP_MAX 40 + +#define CODE_MENU 312 +#define CODE_MENU_ALT 354 +#define CODE_SELECT 310 +#define CODE_PLUS 115 +#define CODE_MINUS 114 + +#define RELEASED 0 +#define PRESSED 1 +#define REPEAT 2 + +#define INPUT_COUNT 3 + +static int inputs[INPUT_COUNT] = {}; +static volatile int quit = 0; + +static void on_term(int sig) { + (void)sig; + quit = 1; +} + +static uint32_t now_ms(void) { + struct timeval tod; + gettimeofday(&tod, NULL); + return tod.tv_sec * 1000 + tod.tv_usec / 1000; +} + +static void adjust_up(int menu_pressed, int select_pressed) { + uint32_t val; + + if (menu_pressed) { + val = GetBrightness(); + if (val < BRIGHTNESS_MAX) SetBrightness(++val); + } + else if (select_pressed) { + val = GetColortemp(); + if (val < COLORTEMP_MAX) SetColortemp(++val); + } + else { + val = GetVolume(); + if (val < VOLUME_MAX) SetVolume(++val); + } +} + +static void adjust_down(int menu_pressed, int select_pressed) { + uint32_t val; + + if (menu_pressed) { + val = GetBrightness(); + if (val > BRIGHTNESS_MIN) SetBrightness(--val); + } + else if (select_pressed) { + val = GetColortemp(); + if (val > COLORTEMP_MIN) SetColortemp(--val); + } + else { + val = GetVolume(); + if (val > VOLUME_MIN) SetVolume(--val); + } +} + +int main(int argc, char *argv[]) { + (void)argc; + (void)argv; + + struct sigaction sa = {0}; + sa.sa_handler = on_term; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + + InitSettings(); + + char path[32]; + for (int i = 0; i < INPUT_COUNT; i++) { + snprintf(path, sizeof(path), "/dev/input/event%i", i); + inputs[i] = open(path, O_RDONLY | O_NONBLOCK | O_CLOEXEC); + } + + struct input_event ev; + uint32_t then = now_ms(); + uint32_t up_repeat_at = 0; + uint32_t down_repeat_at = 0; + int menu_pressed = 0; + int select_pressed = 0; + int up_pressed = 0; + int up_just_pressed = 0; + int down_pressed = 0; + int down_just_pressed = 0; + + while (!quit) { + uint32_t now = now_ms(); + int ignore = (now - then) > 1000; + + for (int i = 0; i < INPUT_COUNT; i++) { + if (inputs[i] < 0) continue; + + while (read(inputs[i], &ev, sizeof(ev)) == sizeof(ev)) { + if (ignore) continue; + if (ev.type != EV_KEY || ev.value > REPEAT) continue; + + switch (ev.code) { + case CODE_MENU: + case CODE_MENU_ALT: + menu_pressed = ev.value; + break; + case CODE_SELECT: + select_pressed = ev.value; + break; + case CODE_PLUS: + up_pressed = up_just_pressed = ev.value; + if (ev.value) up_repeat_at = now + 300; + break; + case CODE_MINUS: + down_pressed = down_just_pressed = ev.value; + if (ev.value) down_repeat_at = now + 300; + break; + default: + break; + } + } + } + + if (ignore) { + menu_pressed = 0; + select_pressed = 0; + up_pressed = up_just_pressed = 0; + down_pressed = down_just_pressed = 0; + up_repeat_at = 0; + down_repeat_at = 0; + } + + if (up_just_pressed || (up_pressed && now >= up_repeat_at)) { + adjust_up(menu_pressed, select_pressed); + if (up_just_pressed) up_just_pressed = 0; + else up_repeat_at += 100; + } + + if (down_just_pressed || (down_pressed && now >= down_repeat_at)) { + adjust_down(menu_pressed, select_pressed); + if (down_just_pressed) down_just_pressed = 0; + else down_repeat_at += 100; + } + + then = now; + usleep(16666); + } + + for (int i = 0; i < INPUT_COUNT; i++) + if (inputs[i] >= 0) close(inputs[i]); + + QuitSettings(); + return 0; +} diff --git a/workspace/h700/keymon/makefile b/workspace/h700/keymon/makefile new file mode 100755 index 000000000..c2752ebd2 --- /dev/null +++ b/workspace/h700/keymon/makefile @@ -0,0 +1,22 @@ +ifeq (,$(CROSS_COMPILE)) +$(error missing CROSS_COMPILE for this toolchain) +endif + +ifeq (,$(PLATFORM)) +PLATFORM=$(UNION_PLATFORM) +endif + +TARGET = keymon +PRODUCT = $(TARGET).elf + +CC = $(CROSS_COMPILE)gcc +CFLAGS = -Os -lmsettings -lpthread -lrt -ldl -Wl,--gc-sections -s +CFLAGS += -I. -I../../all/common -I../platform/ -I$(PREFIX_LOCAL)/include -L$(PREFIX_LOCAL)/lib -DPLATFORM=\"$(UNION_PLATFORM)\" + +all: $(PREFIX)/include/msettings.h + $(CC) $(TARGET).c -o $(PRODUCT) $(CFLAGS) +clean: + rm -rf $(PRODUCT) + +$(PREFIX)/include/msettings.h: + cd /root/workspace/$(PLATFORM)/libmsettings && make diff --git a/workspace/h700/libmsettings/makefile b/workspace/h700/libmsettings/makefile new file mode 100644 index 000000000..e666406ff --- /dev/null +++ b/workspace/h700/libmsettings/makefile @@ -0,0 +1,33 @@ +ifeq (,$(CROSS_COMPILE)) +$(error missing CROSS_COMPILE for this toolchain) +endif +ifeq (,$(PREFIX)) +$(error missing PREFIX for this toolchain) +endif + +TARGET=msettings + +.PHONY: build +.PHONY: clean + +CC = $(CROSS_COMPILE)gcc + +CFLAGS = -I../../all/common +LDFLAGS = -ltinyalsa -ldl -lrt -lm -s + +OPTM=-Ofast + +build: + $(CC) -c -Werror -fpic "$(TARGET).c" $(CFLAGS) -Wl,--no-as-needed $(LDFLAGS) + $(CC) -c -Werror -fpic "../../all/common/displaycal.c" $(CFLAGS) -Wl,--no-as-needed $(LDFLAGS) + $(CC) -shared -o "lib$(TARGET).so" "$(TARGET).o" "displaycal.o" $(LDFLAGS) + mkdir -p "$(PREFIX_LOCAL)/include" + mkdir -p "$(PREFIX_LOCAL)/lib" + cp "$(TARGET).h" "$(PREFIX_LOCAL)/include" + cp "lib$(TARGET).so" "$(PREFIX_LOCAL)/lib" + +clean: + rm -f *.o + rm -f "lib$(TARGET).so" + rm -f $(PREFIX_LOCAL)/include/$(TARGET).h + rm -f $(PREFIX_LOCAL)/lib/lib$(TARGET).so diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c new file mode 100644 index 000000000..c4b1c15d7 --- /dev/null +++ b/workspace/h700/libmsettings/msettings.c @@ -0,0 +1,1302 @@ +// h700 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "displaycal.h" +#include "msettings.h" + +/////////////////////////////////////// + +// Legacy MinUI settings +typedef struct SettingsV3 { + int version; // future proofing + int brightness; + int headphones; + int speaker; + int mute; + int unused[2]; + int jack; +} SettingsV3; + +// First NextUI settings format +typedef struct SettingsV4 { + int version; // future proofing + int brightness; + int colortemperature; // 0-20 + int headphones; + int speaker; + int mute; + int unused[2]; + int jack; +} SettingsV4; + +// Second NextUI settings format +typedef struct SettingsV5 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; +} SettingsV5; + +// Third NextUI settings format +typedef struct SettingsV6 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int contrast; + int saturation; + int exposure; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; +} SettingsV6; + +typedef struct SettingsV7 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int contrast; + int saturation; + int exposure; + int mutedbrightness; + int mutedcolortemperature; + int mutedcontrast; + int mutedsaturation; + int mutedexposure; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; +} SettingsV7; + +typedef struct SettingsV8 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int contrast; + int saturation; + int exposure; + int toggled_brightness; + int toggled_colortemperature; + int toggled_contrast; + int toggled_saturation; + int toggled_exposure; + int toggled_volume; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; +} SettingsV8; + +typedef struct SettingsV9 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int contrast; + int saturation; + int exposure; + int toggled_brightness; + int toggled_colortemperature; + int toggled_contrast; + int toggled_saturation; + int toggled_exposure; + int toggled_volume; + int disable_dpad_on_mute; + int emulate_joystick_on_mute; + int turbo_a; + int turbo_b; + int turbo_x; + int turbo_y; + int turbo_l1; + int turbo_l2; + int turbo_r1; + int turbo_r2; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; +} SettingsV9; + +typedef struct SettingsV10 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int contrast; + int saturation; + int exposure; + int toggled_brightness; + int toggled_colortemperature; + int toggled_contrast; + int toggled_saturation; + int toggled_exposure; + int toggled_volume; + int disable_dpad_on_mute; + int emulate_joystick_on_mute; + int turbo_a; + int turbo_b; + int turbo_x; + int turbo_y; + int turbo_l1; + int turbo_l2; + int turbo_r1; + int turbo_r2; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; + int audiosink; // was bluetooth true/false before +} SettingsV10; + +typedef struct SettingsV11 { + int version; // future proofing + int brightness; + int colortemperature; + int headphones; + int speaker; + int mute; + int contrast; + int saturation; + int exposure; + int toggled_brightness; + int toggled_colortemperature; + int toggled_contrast; + int toggled_saturation; + int toggled_exposure; + int toggled_volume; + int disable_dpad_on_mute; + int emulate_joystick_on_mute; + int turbo_a; + int turbo_b; + int turbo_x; + int turbo_y; + int turbo_l1; + int turbo_l2; + int turbo_r1; + int turbo_r2; + int unused[2]; // for future use + // NOTE: doesn't really need to be persisted but still needs to be shared + int jack; + int audiosink; // was bluetooth true/false before + int displaycal_enabled; + int displaycal_red_gain; + int displaycal_green_gain; + int displaycal_blue_gain; +} SettingsV11; + +// When incrementing SETTINGS_VERSION, update the Settings typedef and add +// backwards compatibility to InitSettings! +#define SETTINGS_VERSION 11 +typedef SettingsV11 Settings; +static Settings DefaultSettings = { + .version = SETTINGS_VERSION, + .brightness = SETTINGS_DEFAULT_BRIGHTNESS, + .colortemperature = SETTINGS_DEFAULT_COLORTEMP, + .headphones = SETTINGS_DEFAULT_HEADPHONE_VOLUME, + .speaker = SETTINGS_DEFAULT_VOLUME, + .mute = 0, + .contrast = SETTINGS_DEFAULT_CONTRAST, + .saturation = SETTINGS_DEFAULT_SATURATION, + .exposure = SETTINGS_DEFAULT_EXPOSURE, + .toggled_brightness = SETTINGS_DEFAULT_MUTE_NO_CHANGE, + .toggled_colortemperature = SETTINGS_DEFAULT_MUTE_NO_CHANGE, + .toggled_contrast = SETTINGS_DEFAULT_MUTE_NO_CHANGE, + .toggled_saturation = SETTINGS_DEFAULT_MUTE_NO_CHANGE, + .toggled_exposure = SETTINGS_DEFAULT_MUTE_NO_CHANGE, + .toggled_volume = 0, // mute is default + .disable_dpad_on_mute = 0, + .emulate_joystick_on_mute = 0, + .turbo_a = 0, + .turbo_b = 0, + .turbo_x = 0, + .turbo_y = 0, + .turbo_l1 = 0, + .turbo_l2 = 0, + .turbo_r1 = 0, + .turbo_r2 = 0, + .jack = 0, + .audiosink = AUDIO_SINK_DEFAULT, + .displaycal_enabled = DISPLAYCAL_DEFAULT_ENABLED, + .displaycal_red_gain = DISPLAYCAL_DEFAULT_RED_GAIN, + .displaycal_green_gain = DISPLAYCAL_DEFAULT_GREEN_GAIN, + .displaycal_blue_gain = DISPLAYCAL_DEFAULT_BLUE_GAIN, +}; +static Settings* settings; + +#define SHM_KEY "/SharedSettings" +static char SettingsPath[256]; +static int shm_fd = -1; +static int is_host = 0; +static int shm_size = sizeof(Settings); + +int scaleBrightness(int); +int scaleColortemp(int); +int scaleContrast(int); +int scaleSaturation(int); +int scaleExposure(int); +int scaleVolume(int); + +void disableDpad(int); +void emulateJoystick(int); +void turboA(int); +void turboB(int); +void turboX(int); +void turboY(int); +void turboL1(int); +void turboL2(int); +void turboR1(int); +void turboR2(int); + +int getInt(char* path) { + int i = 0; + FILE *file = fopen(path, "r"); + if (file!=NULL) { + fscanf(file, "%i", &i); + fclose(file); + } + return i; +} +void putFile(char* path, char* contents) { + FILE* file = fopen(path, "w"); + if (file) { + fputs(contents, file); + fclose(file); + } +} +void putInt(char* path, int value) { + char buffer[8]; + sprintf(buffer, "%d", value); + putFile(path, buffer); +} + +void touch(char* path) { + close(open(path, O_RDWR|O_CREAT, 0777)); +} +int exactMatch(char* str1, char* str2) { + if (!str1 || !str2) return 0; // NULL isn't safe here + int len1 = strlen(str1); + if (len1!=strlen(str2)) return 0; + return (strncmp(str1,str2,len1)==0); +} + +int peekVersion(const char *filename) { + int version = 0; + FILE *file = fopen(filename, "r"); + if (file) { + fread(&version, sizeof(int), 1, file); + fclose(file); + } + return version; +} + +static void applyDisplayCalDefaultsForDevice(Settings *target) { + DisplayCalDefaults defaults = DisplayCal_getDefaultSettings(DISPLAYCAL_PRESET_DEFAULT); + target->displaycal_enabled = defaults.enabled; + target->displaycal_red_gain = defaults.red_gain; + target->displaycal_green_gain = defaults.green_gain; + target->displaycal_blue_gain = defaults.blue_gain; +} + +void InitSettings(void) { + sprintf(SettingsPath, "%s/msettings.bin", getenv("USERDATA_PATH")); + + shm_fd = shm_open(SHM_KEY, O_RDWR | O_CREAT | O_EXCL, 0644); // see if it exists + if (shm_fd==-1 && errno==EEXIST) { // already exists + // puts("Settings client"); + shm_fd = shm_open(SHM_KEY, O_RDWR, 0644); + settings = mmap(NULL, shm_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); + } + else { // host + // puts("Settings host"); // keymon + is_host = 1; + // we created it so set initial size and populate + ftruncate(shm_fd, shm_size); + settings = mmap(NULL, shm_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); + + // peek the first int from fd, it's the version + int version = peekVersion(SettingsPath); + if(version > 0) { + int fd = open(SettingsPath, O_RDONLY); + if (fd>=0) { + if (version == SETTINGS_VERSION) { + read(fd, settings, shm_size); + } + else { + // initialize with defaults + memcpy(settings, &DefaultSettings, shm_size); + + // overwrite with migrated data + if(version==10) { + printf("Found settings v10.\n"); + SettingsV10 old; + read(fd, &old, sizeof(SettingsV10)); + + memcpy(settings, &old, sizeof(SettingsV10)); + settings->version = SETTINGS_VERSION; + } + else if(version==9) { + printf("Found settings v9.\n"); + SettingsV9 old; + read(fd, &old, sizeof(SettingsV9)); + + settings-> disable_dpad_on_mute = old.disable_dpad_on_mute; + settings-> emulate_joystick_on_mute = old.emulate_joystick_on_mute; + settings-> turbo_a = old.turbo_a; + settings-> turbo_b = old.turbo_b; + settings-> turbo_x = old.turbo_x; + settings-> turbo_y = old.turbo_y; + settings-> turbo_l1 = old.turbo_l1; + settings-> turbo_l2 = old.turbo_l2; + settings-> turbo_r1 = old.turbo_r1; + settings-> turbo_r2 = old.turbo_r2; + + settings->toggled_volume = old.toggled_volume; + + settings->toggled_brightness = old.toggled_brightness; + settings->toggled_colortemperature = old.toggled_colortemperature; + settings->toggled_contrast = old.toggled_contrast; + settings->toggled_exposure = old.toggled_exposure; + settings->toggled_saturation = old.toggled_saturation; + + settings->saturation = old.saturation; + settings->contrast = old.contrast; + settings->exposure = old.exposure; + + settings->colortemperature = old.colortemperature; + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else if(version==8) { + printf("Found settings v8.\n"); + SettingsV8 old; + read(fd, &old, sizeof(SettingsV8)); + + settings->toggled_volume = old.toggled_volume; + + settings->toggled_brightness = old.toggled_brightness; + settings->toggled_colortemperature = old.toggled_colortemperature; + settings->toggled_contrast = old.toggled_contrast; + settings->toggled_exposure = old.toggled_exposure; + settings->toggled_saturation = old.toggled_saturation; + + settings->saturation = old.saturation; + settings->contrast = old.contrast; + settings->exposure = old.exposure; + + settings->colortemperature = old.colortemperature; + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else if(version==7) { + printf("Found settings v7.\n"); + SettingsV7 old; + read(fd, &old, sizeof(SettingsV7)); + + // muted* -> toggled* + settings->toggled_brightness = old.mutedbrightness; + settings->toggled_colortemperature = old.mutedcolortemperature; + settings->toggled_contrast = old.mutedcontrast; + settings->toggled_exposure = old.mutedexposure; + settings->toggled_saturation = old.mutedsaturation; + + settings->saturation = old.saturation; + settings->contrast = old.contrast; + settings->exposure = old.exposure; + + settings->colortemperature = old.colortemperature; + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else if(version==6) { + printf("Found settings v6.\n"); + SettingsV6 old; + read(fd, &old, sizeof(SettingsV6)); + + settings->saturation = old.saturation; + settings->contrast = old.contrast; + settings->exposure = old.exposure; + + settings->colortemperature = old.colortemperature; + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else if(version==5) { + printf("Found settings v5.\n"); + SettingsV5 old; + read(fd, &old, sizeof(SettingsV5)); + + settings->colortemperature = old.colortemperature; + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else if(version==4) { + printf("Found settings v4.\n"); + SettingsV4 old; + read(fd, &old, sizeof(SettingsV4)); + + // colortemp was 0-20 here + settings->colortemperature = old.colortemperature * 2; + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else if(version==3) { + printf("Found settings v3.\n"); + SettingsV3 old; + read(fd, &old, sizeof(SettingsV3)); + + settings->brightness = old.brightness; + settings->headphones = old.headphones; + settings->speaker = old.speaker; + settings->mute = old.mute; + settings->jack = old.jack; + } + else { + printf("Found unsupported settings version: %i.\n", version); + } + } + + close(fd); + } + else { + // load defaults + memcpy(settings, &DefaultSettings, shm_size); + } + } + else { + // load defaults + memcpy(settings, &DefaultSettings, shm_size); + } + + // these shouldn't be persisted + // settings->jack = 0; + settings->mute = 0; + } + // printf("brightness: %i\nspeaker: %i \n", settings->brightness, settings->speaker); + // Make sure the H700 codec is routed to speaker/lineout before NextUI owns volume. + if(GetAudioSink() == AUDIO_SINK_DEFAULT) { + system("amixer -q sset 'SPK' on >/dev/null 2>&1"); + system("amixer -q sset 'LINEOUT' on >/dev/null 2>&1"); + system("amixer -q sset 'OutputL Mixer DACL' on >/dev/null 2>&1"); + system("amixer -q sset 'OutputR Mixer DACR' on >/dev/null 2>&1"); + } + + applyDisplayCalDefaultsForDevice(settings); + + // This will implicitly update all other settings based on FN switch state + SetMute(settings->mute); +} +int InitializedSettings(void) { + return (settings != NULL); +} +void QuitSettings(void) { + munmap(settings, shm_size); + if (is_host) shm_unlink(SHM_KEY); +} +static inline void SaveSettings(void) { + int fd = open(SettingsPath, O_CREAT|O_WRONLY, 0644); + if (fd>=0) { + write(fd, settings, shm_size); + close(fd); + sync(); + } +} + +static inline void applyDisplayCalSettings(void) { + if (settings->displaycal_enabled) + SetRawDisplayCal(1, settings->displaycal_red_gain, settings->displaycal_green_gain, settings->displaycal_blue_gain); +} + +///////// Getters exposed in public API + +int GetBrightness(void) { // 0-10 + if (settings->mute && GetMutedBrightness() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return GetMutedBrightness(); + + return settings->brightness; +} +int GetColortemp(void) { // 0-10 + if (settings->mute && GetMutedColortemp() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return GetMutedColortemp(); + + return settings->colortemperature; +} +int GetVolume(void) { // 0-20 + if (settings->mute && GetMutedVolume() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return GetMutedVolume(); + + if(settings->jack || settings->audiosink != AUDIO_SINK_DEFAULT) + return settings->headphones; + + return settings->speaker; +} +int GetContrast(void) +{ + if (settings->mute && GetMutedContrast() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return GetMutedContrast(); + + return settings->contrast; +} +int GetSaturation(void) +{ + if (settings->mute && GetMutedSaturation() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return GetMutedSaturation(); + + return settings->saturation; +} +int GetExposure(void) +{ + if (settings->mute && GetMutedExposure() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return GetMutedExposure(); + + return settings->exposure; +} +int GetDisplayCalEnabled(void) +{ + return settings->displaycal_enabled; +} +int GetDisplayCalRedGain(void) +{ + return settings->displaycal_red_gain; +} +int GetDisplayCalGreenGain(void) +{ + return settings->displaycal_green_gain; +} +int GetDisplayCalBlueGain(void) +{ + return settings->displaycal_blue_gain; +} +// monitored and set by thread in keymon +int GetJack(void) { + return settings->jack; +} +// monitored and set by thread in audiomon +int GetAudioSink(void) { + return settings->audiosink; +} + +int GetHDMI(void) { + return 0; +}; + +int GetMute(void) { + return settings->mute; +} +int GetMutedBrightness(void) +{ + return settings->toggled_brightness; +} +int GetMutedColortemp(void) +{ + return settings->toggled_colortemperature; +} +int GetMutedContrast(void) +{ + return settings->toggled_contrast; +} +int GetMutedSaturation(void) +{ + return settings->toggled_saturation; +} +int GetMutedExposure(void) +{ + return settings->toggled_exposure; +} +int GetMutedVolume(void) +{ + return settings->toggled_volume; +} +int GetMuteDisablesDpad(void) +{ + return settings->disable_dpad_on_mute; +} +int GetMuteEmulatesJoystick(void) +{ + return settings->emulate_joystick_on_mute; +} +int GetMuteTurboA(void) +{ + return settings->turbo_a; +} +int GetMuteTurboB(void) +{ + return settings->turbo_b; +} +int GetMuteTurboX(void) +{ + return settings->turbo_x; +} +int GetMuteTurboY(void) +{ + return settings->turbo_y; +} +int GetMuteTurboL1(void) +{ + return settings->turbo_l1; +} +int GetMuteTurboL2(void) +{ + return settings->turbo_l2; +} +int GetMuteTurboR1(void) +{ + return settings->turbo_r1; +} +int GetMuteTurboR2(void) +{ + return settings->turbo_r2; +} + +///////// Setters exposed in public API + +void SetBrightness(int value) { + if (settings->mute && GetMutedBrightness() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return SetRawBrightness(scaleBrightness(GetMutedBrightness())); + + SetRawBrightness(scaleBrightness(value)); + settings->brightness = value; + SaveSettings(); +} +void SetColortemp(int value) { + if (settings->mute && GetMutedColortemp() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return SetRawColortemp(scaleColortemp(GetMutedColortemp())); + + SetRawColortemp(scaleColortemp(value)); + settings->colortemperature = value; + SaveSettings(); +} +void SetContrast(int value) { + if (settings->mute && GetMutedContrast() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return SetRawContrast(scaleContrast(GetMutedContrast())); + + SetRawContrast(scaleContrast(value)); + settings->contrast = value; + SaveSettings(); +} +void SetSaturation(int value) { + if (settings->mute && GetMutedSaturation() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return SetRawSaturation(scaleSaturation(GetMutedSaturation())); + + SetRawSaturation(scaleSaturation(value)); + settings->saturation = value; + SaveSettings(); +} +void SetExposure(int value){ + if (settings->mute && GetMutedExposure() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return SetRawExposure(scaleExposure(GetMutedExposure())); + + SetRawExposure(scaleExposure(value)); + settings->exposure = value; + SaveSettings(); +} +void SetDisplayCalEnabled(int is_enabled) { + int was_enabled = settings->displaycal_enabled; + is_enabled = (is_enabled != 0); + settings->displaycal_enabled = is_enabled; + + // Disabling only needs hardware writes when we are turning an active LUT off. + if (is_enabled) + applyDisplayCalSettings(); + else if (was_enabled) + SetRawDisplayCal(0, settings->displaycal_red_gain, settings->displaycal_green_gain, settings->displaycal_blue_gain); + SaveSettings(); +} +void SetDisplayCalRedGain(int value) { + value = DisplayCal_clampGainValue(value); + settings->displaycal_red_gain = value; + applyDisplayCalSettings(); + SaveSettings(); +} +void SetDisplayCalGreenGain(int value) { + value = DisplayCal_clampGainValue(value); + settings->displaycal_green_gain = value; + applyDisplayCalSettings(); + SaveSettings(); +} +void SetDisplayCalBlueGain(int value) { + value = DisplayCal_clampGainValue(value); + settings->displaycal_blue_gain = value; + applyDisplayCalSettings(); + SaveSettings(); +} +void SetVolume(int value) // 0-20 +{ + if (settings->mute && GetMutedVolume() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + return SetRawVolume(scaleVolume(GetMutedVolume())); + + SetRawVolume(scaleVolume(value)); + if (settings->jack || settings->audiosink != AUDIO_SINK_DEFAULT) + settings->headphones = value; + else + settings->speaker = value; + SaveSettings(); +} +// monitored and set by thread in keymon +void SetJack(int value) { + printf("SetJack(%i)\n", value); fflush(stdout); + + settings->jack = value; + SetVolume(GetVolume()); +} +// monitored and set by thread in audiomon +void SetAudioSink(int value) { + printf("SetAudioSink(%i)\n", value); fflush(stdout); + + settings->audiosink = value; + SetVolume(GetVolume()); +} + +void SetHDMI(int value){}; + +void SetMute(int value) { + settings->mute = value; + + SetVolume(GetVolume()); + SetBrightness(GetBrightness()); + SetColortemp(GetColortemp()); + SetContrast(GetContrast()); + SetSaturation(GetSaturation()); + SetExposure(GetExposure()); + applyDisplayCalSettings(); + + if(GetMuteTurboA()) + turboA(settings->mute); + if(GetMuteTurboB()) + turboB(settings->mute); + if(GetMuteTurboX()) + turboX(settings->mute); + if(GetMuteTurboY()) + turboY(settings->mute); + if(GetMuteTurboL1()) + turboL1(settings->mute); + if(GetMuteTurboL2()) + turboL2(settings->mute); + if(GetMuteTurboR1()) + turboR1(settings->mute); + if(GetMuteTurboR2()) + turboR2(settings->mute); +} + +void SetMutedBrightness(int value) +{ + settings->toggled_brightness = value; + SaveSettings(); +} + +void SetMutedColortemp(int value) +{ + settings->toggled_colortemperature = value; + SaveSettings(); +} + +void SetMutedContrast(int value) +{ + settings->toggled_contrast = value; + SaveSettings(); +} + +void SetMutedSaturation(int value) +{ + settings->toggled_saturation = value; + SaveSettings(); +} + +void SetMutedExposure(int value) +{ + settings->toggled_exposure = value; + SaveSettings(); +} + +void SetMutedVolume(int value) +{ + settings->toggled_volume = value; + SaveSettings(); +} + +void SetMuteDisablesDpad(int value) +{ + settings->disable_dpad_on_mute = value; + SaveSettings(); +} +void SetMuteEmulatesJoystick(int value) +{ + settings->emulate_joystick_on_mute = value; + SaveSettings(); +} + +void SetMuteTurboA(int value) +{ + settings->turbo_a = value; + SaveSettings(); +} + +void SetMuteTurboB(int value) +{ + settings->turbo_b = value; + SaveSettings(); +} + +void SetMuteTurboX(int value) +{ + settings->turbo_x = value; + SaveSettings(); +} + +void SetMuteTurboY(int value) +{ + settings->turbo_y = value; + SaveSettings(); +} + +void SetMuteTurboL1(int value) +{ + settings->turbo_l1 = value; + SaveSettings(); +} + +void SetMuteTurboL2(int value) +{ + settings->turbo_l2 = value; + SaveSettings(); +} + +void SetMuteTurboR1(int value) +{ + settings->turbo_r1 = value; + SaveSettings(); +} + +void SetMuteTurboR2(int value) +{ + settings->turbo_r2 = value; + SaveSettings(); +} + +///////// H700 has no stock input daemon modifiers yet. + +void disableDpad(int value) { +} + +void emulateJoystick(int value) { +} + +void turboA(int value) { +} +void turboB(int value) { +} +void turboX(int value) { +} +void turboY(int value) { +} +void turboL1(int value) { +} +void turboL2(int value) { +} +void turboR1(int value) { +} +void turboR2(int value) { +} + +///////// Platform specific scaling + +int scaleVolume(int value) { + return value * 5; // scale 0-20 to 0-100 +} + +int scaleBrightness(int value) { + int raw; + switch (value) { + case 0: raw=4; break; + case 1: raw=6; break; + case 2: raw=10; break; + case 3: raw=16; break; + case 4: raw=32; break; + case 5: raw=48; break; + case 6: raw=64; break; + case 7: raw=96; break; + case 8: raw=128; break; + case 9: raw=192; break; + case 10: raw=255; break; + default: raw=64; break; + } + return raw; +} +int scaleColortemp(int value) { + int raw; + + switch (value) { + case 0: raw=-200; break; // 8 + case 1: raw=-190; break; // 8 + case 2: raw=-180; break; // 16 + case 3: raw=-170; break; // 16 + case 4: raw=-160; break; // 24 + case 5: raw=-150; break; // 24 + case 6: raw=-140; break; // 32 + case 7: raw=-130; break; // 32 + case 8: raw=-120; break; // 32 + case 9: raw=-110; break; // 64 + case 10: raw=-100; break; // 0 + case 11: raw=-90; break; // 8 + case 12: raw=-80; break; // 8 + case 13: raw=-70; break; // 16 + case 14: raw=-60; break; // 16 + case 15: raw=-50; break; // 24 + case 16: raw=-40; break; // 24 + case 17: raw=-30; break; // 32 + case 18: raw=-20; break; // 32 + case 19: raw=-10; break; // 32 + case 20: raw=0; break; // 64 + case 21: raw=10; break; // 0 + case 22: raw=20; break; // 8 + case 23: raw=30; break; // 8 + case 24: raw=40; break; // 16 + case 25: raw=50; break; // 16 + case 26: raw=60; break; // 24 + case 27: raw=70; break; // 24 + case 28: raw=80; break; // 32 + case 29: raw=90; break; // 32 + case 30: raw=100; break; // 32 + case 31: raw=110; break; // 64 + case 32: raw=120; break; // 0 + case 33: raw=130; break; // 8 + case 34: raw=140; break; // 8 + case 35: raw=150; break; // 16 + case 36: raw=160; break; // 16 + case 37: raw=170; break; // 24 + case 38: raw=180; break; // 24 + case 39: raw=190; break; // 32 + case 40: raw=200; break; // 32 + } + return raw; +} +int scaleContrast(int value) { + int raw; + + switch (value) { + // dont offer -5/ raw 0, looks like it might turn off the display completely? + case -4: raw=10; break; + case -3: raw=20; break; + case -2: raw=30; break; + case -1: raw=40; break; + case 0: raw=50; break; + case 1: raw=60; break; + case 2: raw=70; break; + case 3: raw=80; break; + case 4: raw=90; break; + case 5: raw=100; break; + } + return raw; +} +int scaleSaturation(int value) { + int raw; + + switch (value) { + case -5: raw=0; break; + case -4: raw=10; break; + case -3: raw=20; break; + case -2: raw=30; break; + case -1: raw=40; break; + case 0: raw=50; break; + case 1: raw=60; break; + case 2: raw=70; break; + case 3: raw=80; break; + case 4: raw=90; break; + case 5: raw=100; break; + } + return raw; +} +int scaleExposure(int value) { + int raw; + + switch (value) { + // stock OS also avoids setting anything lower, so we do the same here. + case -4: raw=10; break; + case -3: raw=20; break; + case -2: raw=30; break; + case -1: raw=40; break; + case 0: raw=50; break; + case 1: raw=60; break; + case 2: raw=70; break; + case 3: raw=80; break; + case 4: raw=90; break; + case 5: raw=100; break; + } + return raw; +} + +///////// Platform specific, unscaled accessors + +#define DISP_LCD_SET_BRIGHTNESS 0x102 +void SetRawBrightness(int val) { // 0 - 255 + printf("SetRawBrightness(%i)\n", val); fflush(stdout); + + int fd = open("/dev/disp", O_RDWR); + if (fd >= 0) { + unsigned long param[4]={0,val,0,0}; + ioctl(fd, DISP_LCD_SET_BRIGHTNESS, ¶m); + close(fd); + } +} +void SetRawColortemp(int val) { // 0 - 255 + printf("SetRawColortemp(%i)\n", val); fflush(stdout); + + FILE *fd = fopen("/sys/class/disp/disp/attr/color_temperature", "w"); + if (fd) { + fprintf(fd, "%i", val); + fclose(fd); + } +} + +// Find the first A2DP playback volume control via amixer +static int get_a2dp_simple_control_name(char *buf, size_t buflen) { + FILE *fp = popen("amixer scontrols", "r"); + if (!fp) return 0; + + char line[256]; + while (fgets(line, sizeof(line), fp)) { + char *start = strchr(line, '\''); + char *end = strrchr(line, '\''); + if (start && end && end > start) { + size_t len = end - start - 1; + if (len < buflen) { + strncpy(buf, start + 1, len); + buf[len] = '\0'; + if (strstr(buf, "A2DP")) { // first A2DP simple control + pclose(fp); + char esc_buf[128]; + char *src = buf; + char *dst = esc_buf; + while(*src && (dst - esc_buf) < (sizeof(esc_buf) - 4)) { + if(*src == '\"') { + *dst++ = '\\'; + *dst++ = '\"'; + } else { + *dst++ = *src; + } + src++; + } + *dst = '\0'; + strncpy(buf, esc_buf, buflen); + buf[buflen - 1] = '\0'; + return 1; + } + } + } + } + + pclose(fp); + return 0; +} + +static int get_usbc_card_num() { + FILE *fp = popen("cat /proc/asound/cards", "r"); + if (!fp) return -1; + + char line[256]; + while (fgets(line, sizeof(line), fp)) { + if (strstr(line, "audiocodec") == NULL) { // skip the built-in codec + int card_num; + if (sscanf(line, " %d ", &card_num) == 1) { + pclose(fp); + return card_num; + } + } + } + + pclose(fp); + return -1; +} + +static int get_audiocodec_card_num() { + FILE *fp = popen("cat /proc/asound/cards", "r"); + if (!fp) return -1; + + char line[256]; + while (fgets(line, sizeof(line), fp)) { + if (strstr(line, "audiocodec") != NULL) { // look for the built-in codec + int card_num; + if (sscanf(line, " %d ", &card_num) == 1) { + pclose(fp); + return card_num; + } + } + } + + pclose(fp); + return -1; +} + +void SetRawVolume(int val) { // in: 0-100 + if (settings->mute && GetMutedVolume() != SETTINGS_DEFAULT_MUTE_NO_CHANGE) + val = scaleVolume(GetMutedVolume()); + + if (GetAudioSink() == AUDIO_SINK_BLUETOOTH) { + // bluealsa is a mixer plugin, not exposed as a separate card + char ctl_name[128] = {0}; + if (get_a2dp_simple_control_name(ctl_name, sizeof(ctl_name))) { + char cmd[256]; + // Update volume on the device + snprintf(cmd, sizeof(cmd), "amixer sset \"%s\" -M %d%% &> /dev/null", ctl_name, val); + system(cmd); + //printf("Set '%s' to %d%%\n", ctl_name, val); fflush(stdout); + } + } + else if (GetAudioSink() == AUDIO_SINK_USBDAC) { + // USB DAC path: grab the first card that is not called "audiocodec" + int card_num = get_usbc_card_num(); + if(card_num < 0) { + printf("Failed to find USB audio card\n"); fflush(stdout); + return; + } + + struct mixer *mixer = mixer_open(card_num); + if (!mixer) { + printf("Failed to open mixer\n"); fflush(stdout); + return; + } + + const unsigned int num_controls = mixer_get_num_ctls(mixer); + for (unsigned int i = 0; i < num_controls; i++) { + struct mixer_ctl *ctl = mixer_get_ctl(mixer, i); + const char *name = mixer_ctl_get_name(ctl); + if (!name) continue; + + if ((strstr(name, "PCM") || strstr(name, "Playback")) && (strstr(name, "Volume") || strstr(name, "volume"))) { + if (mixer_ctl_get_type(ctl) == MIXER_CTL_TYPE_INT) { + int min = mixer_ctl_get_range_min(ctl); + int max = mixer_ctl_get_range_max(ctl); + int volume = min + (val * (max - min)) / 100; + unsigned int num_values = mixer_ctl_get_num_values(ctl); + for (unsigned int i = 0; i < num_values; i++) + mixer_ctl_set_value(ctl, i, volume); + } + break; + } + } + mixer_close(mixer); + } + else { + // Speaker path: grab the card that is called "audiocodec" + int card_num = get_audiocodec_card_num(); + if(card_num < 0) { + card_num = 0; // fallback to card 0 if we can't find it + } + + struct mixer *mixer = mixer_open(card_num); + if (!mixer) { + printf("Failed to open mixer\n"); fflush(stdout); + return; + } + + struct mixer_ctl *digital = mixer_get_ctl_by_name(mixer, "digital volume"); + if (digital) { + mixer_ctl_set_percent(digital, 0, 100 - val); // reversed mapping + //printf("Set 'digital volume' to %d%%\n", val); fflush(stdout); + } + + struct mixer_ctl *lineout = mixer_get_ctl_by_name(mixer, "lineout volume"); + if (lineout) { + mixer_ctl_set_percent(lineout, 0, val); + //printf("Set 'lineout volume' to %d%%\n", val); fflush(stdout); + } + + struct mixer_ctl *spk = mixer_get_ctl_by_name(mixer, "SPK"); + if (spk) + mixer_ctl_set_value(spk, 0, val == 0 ? 0 : 1); + + struct mixer_ctl *lineout_switch = mixer_get_ctl_by_name(mixer, "LINEOUT"); + if (lineout_switch) + mixer_ctl_set_value(lineout_switch, 0, val == 0 ? 0 : 1); + + mixer_close(mixer); + } +} + +void SetRawContrast(int val){ + printf("SetRawContrast(%i)\n", val); fflush(stdout); + + FILE *fd = fopen("/sys/class/disp/disp/attr/enhance_contrast", "w"); + if (fd) { + fprintf(fd, "%i", val); + fclose(fd); + } +} +void SetRawSaturation(int val){ + printf("SetRawSaturation(%i)\n", val); fflush(stdout); + + FILE *fd = fopen("/sys/class/disp/disp/attr/enhance_saturation", "w"); + if (fd) { + fprintf(fd, "%i", val); + fclose(fd); + } +} +void SetRawExposure(int val){ + printf("SetRawExposure(%i)\n", val); fflush(stdout); + + FILE *fd = fopen("/sys/class/disp/disp/attr/enhance_bright", "w"); + if (fd) { + fprintf(fd, "%i", val); + fclose(fd); + } +} +void SetRawDisplayCal(int enabled, int red_gain, int green_gain, int blue_gain) { + printf("SetRawDisplayCal(%i,%i,%i,%i)\n", enabled, red_gain, green_gain, blue_gain); fflush(stdout); + + int ret = enabled + ? DisplayCal_enableWithValues(red_gain, green_gain, blue_gain) + : DisplayCal_disable(); + if (ret != 0) { + fprintf(stderr, "SetRawDisplayCal failed to %s display calibration: %i\n", + enabled ? "enable" : "disable", ret); + fflush(stderr); + } +} diff --git a/workspace/h700/libmsettings/msettings.h b/workspace/h700/libmsettings/msettings.h new file mode 100644 index 000000000..db46458bf --- /dev/null +++ b/workspace/h700/libmsettings/msettings.h @@ -0,0 +1,108 @@ +#ifndef __msettings_h__ +#define __msettings_h__ + +#define SETTINGS_DEFAULT_BRIGHTNESS 2 +#define SETTINGS_DEFAULT_COLORTEMP 20 +#define SETTINGS_DEFAULT_CONTRAST 0 +#define SETTINGS_DEFAULT_SATURATION 0 +#define SETTINGS_DEFAULT_EXPOSURE 0 +#define SETTINGS_DEFAULT_VOLUME 8 +#define SETTINGS_DEFAULT_HEADPHONE_VOLUME 4 +#define SETTINGS_DEFAULT_FAN_SPEED 0 + +#define SETTINGS_DEFAULT_MUTE_NO_CHANGE -69 + +void InitSettings(void); +void QuitSettings(void); +int InitializedSettings(void); + +int GetBrightness(void); +int GetColortemp(void); +int GetContrast(void); +int GetSaturation(void); +int GetExposure(void); +int GetDisplayCalEnabled(void); +int GetDisplayCalRedGain(void); +int GetDisplayCalGreenGain(void); +int GetDisplayCalBlueGain(void); +int GetVolume(void); + +void SetRawBrightness(int value); // 0-255 +void SetRawColortemp(int value); // 0-255 +void SetRawContrast(int value); // 0-100 +void SetRawSaturation(int value); // 0-100 +void SetRawExposure(int value); // 0-100 +void SetRawDisplayCal(int enabled, int red_gain, int green_gain, int blue_gain); +void SetRawVolume(int value); // 0-100 + +void SetBrightness(int value); // 0-10 +void SetColortemp(int value); // 0-40 +void SetContrast(int value); // -4-5 +void SetSaturation(int value); // -5-5 +void SetExposure(int value); // -4-5 +void SetDisplayCalEnabled(int value); // 0-1 +void SetDisplayCalRedGain(int value); // 0-200, 100 is neutral +void SetDisplayCalGreenGain(int value); // 0-200, 100 is neutral +void SetDisplayCalBlueGain(int value); // 0-200, 100 is neutral +void SetVolume(int value); // 0-20 + +int GetJack(void); +void SetJack(int value); // 0-1 + +#define AUDIO_SINK_DEFAULT 0 // use system default, usually speaker (or jack if plugged in) +#define AUDIO_SINK_BLUETOOTH 1 // software control via bluealsa, not a separate card +#define AUDIO_SINK_USBDAC 2 // assumes being exposed as card 1 to alsa +int GetAudioSink(void); +void SetAudioSink(int value); + +int GetHDMI(void); +void SetHDMI(int value); // 0-1 + +int GetMute(void); +void SetMute(int value); // 0-1 + +// unused +inline int GetFanSpeed(void) { + return 0; +} +inline void SetFanSpeed(int value) { + // do nothing +} + +// custom mute mode persistence layer + +int GetMutedBrightness(void); +int GetMutedColortemp(void); +int GetMutedContrast(void); +int GetMutedSaturation(void); +int GetMutedExposure(void); +int GetMutedVolume(void); +int GetMuteDisablesDpad(void); +int GetMuteEmulatesJoystick(void); +int GetMuteTurboA(void); +int GetMuteTurboB(void); +int GetMuteTurboX(void); +int GetMuteTurboY(void); +int GetMuteTurboL1(void); +int GetMuteTurboL2(void); +int GetMuteTurboR1(void); +int GetMuteTurboR2(void); + +void SetMutedBrightness(int); +void SetMutedColortemp(int); +void SetMutedContrast(int); +void SetMutedSaturation(int); +void SetMutedExposure(int); +void SetMutedVolume(int); +void SetMuteDisablesDpad(int); +void SetMuteEmulatesJoystick(int); +void SetMuteTurboA(int); +void SetMuteTurboB(int); +void SetMuteTurboX(int); +void SetMuteTurboY(int); +void SetMuteTurboL1(int); +void SetMuteTurboL2(int); +void SetMuteTurboR1(int); +void SetMuteTurboR2(int); + +#endif // __msettings_h__ diff --git a/workspace/h700/makefile b/workspace/h700/makefile new file mode 100644 index 000000000..8ff785c8d --- /dev/null +++ b/workspace/h700/makefile @@ -0,0 +1,57 @@ +########################################################### + +ifeq (,$(PLATFORM)) +PLATFORM=$(UNION_PLATFORM) +endif + +ifeq (,$(PLATFORM)) +$(error please specify PLATFORM, eg. PLATFORM=rgb30 make) +endif + +########################################################### + +REQUIRES_EVTEST=other/evtest +REQUIRES_JSTEST=other/jstest +REQUIRES_UNZIP60=other/unzip60 +REQUIRES_FILEMGR=other/NextCommander +REQUIRES_SDL2=other/sdl2 + +all: readmes + +early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) $(REQUIRES_SDL2) + mkdir -p other + cd $(REQUIRES_FILEMGR) && make -j PLATFORM=tg5040 + cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c + cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c + cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip + cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-power --disable-filesystem --disable-sensor --disable-locale --disable-loadso --enable-shared --disable-static && make -j && make install + mkdir -p $(REQUIRES_SDL2)/output + cp -a $(PREFIX_LOCAL)/lib/libSDL2*.so* $(REQUIRES_SDL2)/output/ + cp -a $(PREFIX)/lib/libSDL2_image*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true + cp -a $(PREFIX)/lib/libSDL2_ttf*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true + cd boot && sh build.sh + +clean: + cd $(REQUIRES_FILEMGR) && make clean PLATFORM=tg5040 + cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart clean + if [ -f $(REQUIRES_SDL2)/Makefile ]; then cd $(REQUIRES_SDL2) && make clean; fi + rm -rf boot/output + +########################################################### + +$(REQUIRES_FILEMGR): + git clone --depth 1 https://github.com/LoveRetro/NextCommander.git $(REQUIRES_FILEMGR) + +$(REQUIRES_EVTEST): + git clone --depth 1 https://github.com/freedesktop-unofficial-mirror/evtest.git $(REQUIRES_EVTEST) + +$(REQUIRES_JSTEST): + git clone --depth 1 https://github.com/datrh/joyutils.git $(REQUIRES_JSTEST) + +$(REQUIRES_UNZIP60): + git clone --depth 1 https://github.com/shauninman/unzip60.git $(REQUIRES_UNZIP60) + +$(REQUIRES_SDL2): + git clone --depth 1 https://github.com/JohnnyonFlame/SDL-malifbdev-rot.git $(REQUIRES_SDL2) + +include ../all/readmes/makefile diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy new file mode 100644 index 000000000..60d6a43ef --- /dev/null +++ b/workspace/h700/platform/makefile.copy @@ -0,0 +1,20 @@ +$(PLATFORM): + mkdir -p ./build/BASE/h700 + cp ./workspace/$@/boot/output/dmenu.bin ./build/BASE/h700/ + + # installer + cp ./workspace/$@/install/boot.sh ./build/BOOT/common/$@.sh + cp ./workspace/$@/install/update.sh ./build/SYSTEM/$@/bin/install.sh + mkdir -p ./build/SYSTEM/$@/dat + cp ./workspace/$@/boot/output/dmenu.bin ./build/SYSTEM/$@/dat/ + mkdir -p ./build/BOOT/common/$@/ + cp ./workspace/$@/install/*.png ./build/BOOT/common/$@/ + cp ./workspace/all/show2/build/$@/show2.elf ./build/BOOT/common/$@/ + cp ./workspace/$@/other/unzip60/unzip ./build/BOOT/common/$@/ + cp -a ./workspace/$@/other/sdl2/output/libSDL2*.so* ./build/SYSTEM/$@/lib/ + # rfkill + cp ./workspace/$@/rfkill/rfkill.elf ./build/SYSTEM/$@/bin/ + + # extras + cp ./workspace/$@/other/NextCommander/output/NextCommander ./build/EXTRAS/Tools/$@/Files.pak/ + cp -r ./workspace/$@/other/NextCommander/res ./build/EXTRAS/Tools/$@/Files.pak/ diff --git a/workspace/h700/platform/makefile.env b/workspace/h700/platform/makefile.env new file mode 100644 index 000000000..3f65d9129 --- /dev/null +++ b/workspace/h700/platform/makefile.env @@ -0,0 +1,24 @@ +# h700 +OPT = -O3 -Ofast -fomit-frame-pointer +# -mtune/-march/-mpcu +# "When porting from x86 to Arm, you should replace any occurrences of -march +# with -mcpu and remove any instances of -mtune. +# This will have the desired effect of simultaneously tuning for the target +# architecture and microarchitecture." +# https://developer.arm.com/community/arm-community-blogs/b/tools-software-ides-blog/posts/compiler-flags-across-architectures-march-mtune-and-mcpu +CFLAGS = -mcpu=cortex-a53 -flto +SDL = SDL2 +GL = GLES +# legacy linux paths +CFLAGS += -I$(PREFIX_LOCAL)/include -I$(PREFIX)/include +LDFLAGS = -L$(PREFIX_LOCAL)/lib -L$(PREFIX)/lib +# multiarch support +CFLAGS += -I$(PREFIX)/include/$(CROSS_TRIPLE) +LDFLAGS += -L$(PREFIX_LOCAL)/lib/$(CROSS_TRIPLE) -L$(PREFIX)/lib/$(CROSS_TRIPLE) +# pkg-config +export PKG_CONFIG_PATH := $(PREFIX_LOCAL)/lib/pkgconfig:$(PREFIX_LOCAL)/lib/$(CROSS_TRIPLE)/pkgconfig:$(PKG_CONFIG_PATH) +CFLAGS += $$(pkg-config --cflags sdl2 glesv2) +LDFLAGS += $$(pkg-config --libs sdl2 glesv2) +# not handled by pkg-config +CFLAGS += -DUSE_$(SDL) -DUSE_$(GL) -DGL_GLEXT_PROTOTYPES +LDFLAGS += -l$(SDL)_image -l$(SDL)_ttf -lpthread -ldl -lm -lz diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c new file mode 100644 index 000000000..1883946bc --- /dev/null +++ b/workspace/h700/platform/platform.c @@ -0,0 +1,610 @@ +// h700 +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "defines.h" +#include "platform.h" +#include "api.h" +#include "utils.h" + +#include "scaler.h" +#include +#include +#include + +#include +#include + +int is_rg28xx = 0; +int is_rg34xx = 0; +int is_cube = 0; + +static void detect_device(void) { + char *device = getenv("DEVICE"); + char *model = getenv("RGXX_MODEL"); + + is_rg28xx = exactMatch("rg28xx", device) || exactMatch("RG28xx", model); + is_rg34xx = exactMatch("rg34xx", device) || exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model); + is_cube = exactMatch("cube", device) || exactMatch("RGcubexx", model); +} + +void PLAT_initPlatform(void) { + detect_device(); +} + +static SDL_Joystick **joysticks = NULL; +static int num_joysticks = 0; +void PLAT_initInput(void) { + detect_device(); + if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) < 0) + LOG_error("Failed initializing joysticks: %s\n", SDL_GetError()); + num_joysticks = SDL_NumJoysticks(); + if (num_joysticks > 0) { + joysticks = (SDL_Joystick **)malloc(sizeof(SDL_Joystick *) * num_joysticks); + for (int i = 0; i < num_joysticks; i++) { + joysticks[i] = SDL_JoystickOpen(i); + LOG_info("Opening joystick %d: %s\n", i, SDL_JoystickName(joysticks[i])); + } + } +} + +void PLAT_quitInput(void) { + if (joysticks) { + for (int i = 0; i < num_joysticks; i++) { + if (SDL_JoystickGetAttached(joysticks[i])) { + LOG_info("Closing joystick %d: %s\n", i, SDL_JoystickName(joysticks[i])); + SDL_JoystickClose(joysticks[i]); + } + } + free(joysticks); + joysticks = NULL; + num_joysticks = 0; + } + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); +} + +void PLAT_updateInput(const SDL_Event *event) { + switch (event->type) { + case SDL_JOYDEVICEADDED: { + int device_index = event->jdevice.which; + SDL_Joystick *new_joy = SDL_JoystickOpen(device_index); + if (new_joy) { + joysticks = realloc(joysticks, sizeof(SDL_Joystick *) * (num_joysticks + 1)); + joysticks[num_joysticks++] = new_joy; + LOG_info("Joystick added at index %d: %s\n", device_index, SDL_JoystickName(new_joy)); + } else { + LOG_error("Failed to open added joystick at index %d: %s\n", device_index, SDL_GetError()); + } + break; + } + + case SDL_JOYDEVICEREMOVED: { + SDL_JoystickID removed_id = event->jdevice.which; + for (int i = 0; i < num_joysticks; ++i) { + if (SDL_JoystickInstanceID(joysticks[i]) == removed_id) { + LOG_info("Joystick removed: %s\n", SDL_JoystickName(joysticks[i])); + SDL_JoystickClose(joysticks[i]); + + // Shift down the remaining entries + for (int j = i; j < num_joysticks - 1; ++j) + joysticks[j] = joysticks[j + 1]; + num_joysticks--; + + if (num_joysticks == 0) { + free(joysticks); + joysticks = NULL; + } else { + joysticks = realloc(joysticks, sizeof(SDL_Joystick *) * num_joysticks); + } + break; + } + } + break; + } + + default: + break; + } +} + +void PLAT_getBatteryStatus(int* is_charging, int* charge) { + PLAT_getBatteryStatusFine(is_charging, charge); + + // worry less about battery and more about the game you're playing + if (*charge>80) *charge = 100; + else if (*charge>60) *charge = 80; + else if (*charge>40) *charge = 60; + else if (*charge>20) *charge = 40; + else if (*charge>10) *charge = 20; + else *charge = 10; +} + +void PLAT_getCPUTemp() { + perf.cpu_temp = getInt("/sys/devices/virtual/thermal/thermal_zone0/temp")/1000; +} + +void PLAT_getCPUSpeed() +{ + perf.cpu_speed = getInt("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")/1000; +} + +void PLAT_getGPUTemp() { + perf.gpu_temp = getInt("/sys/devices/virtual/thermal/thermal_zone2/temp")/1000; +} + +void PLAT_getGPUSpeed() { + perf.gpu_speed = 660; // MHz +} + +static struct WIFI_connection connection = { + .valid = false, + .freq = -1, + .link_speed = -1, + .noise = -1, + .rssi = -1, + .ip = {0}, + .ssid = {0}, +}; + +static inline void connection_reset(struct WIFI_connection *connection_info) +{ + connection_info->valid = false; + connection_info->freq = -1; + connection_info->link_speed = -1; + connection_info->noise = -1; + connection_info->rssi = -1; + *connection_info->ip = '\0'; + *connection_info->ssid = '\0'; +} + +static bool bluetoothConnected = false; + +void PLAT_getNetworkStatus(int* is_online) +{ + if(WIFI_enabled()) + WIFI_connectionInfo(&connection); + else + connection_reset(&connection); + + if(is_online) + *is_online = (connection.valid && connection.ssid[0] != '\0'); + + if(BT_enabled()) { + bluetoothConnected = PLAT_bluetoothConnected(); + } + else + bluetoothConnected = false; +} + +void PLAT_getBatteryStatusFine(int *is_charging, int *charge) +{ + if(is_charging) { + int charger_present = getInt("/sys/class/power_supply/axp2202-usb/online"); + *is_charging = (charger_present == 1); + } + if(charge) { + *charge = getInt("/sys/class/power_supply/axp2202-battery/capacity"); + } +} + +void PLAT_enableBacklight(int enable) { + if (enable) { + putInt("/sys/class/graphics/fb0/blank", 0); + SetBrightness(GetBrightness()); + } + else { + SetRawBrightness(0); + putInt("/sys/class/graphics/fb0/blank", 1); + } +} + +void PLAT_powerOff(int reboot) { + if (CFG_getHaptics()) { + VIB_singlePulse(VIB_bootStrength, VIB_bootDuration_ms); + } + system("rm -f /tmp/nextui_exec && sync"); + sleep(2); + + SetRawVolume(MUTE_VOLUME_RAW); + PLAT_enableBacklight(0); + SND_quit(); + VIB_quit(); + PWR_quit(); + GFX_quit(); + + system("cat /dev/zero > /dev/fb0 2>/dev/null"); + if(reboot > 0) + touch("/tmp/reboot"); + else + touch("/tmp/poweroff"); + sync(); + exit(0); +} + +int PLAT_supportsDeepSleep(void) { return 1; } + +#define LID_PATH "/sys/class/power_supply/axp2202-battery/hallkey" +#define EV_KEY 0x01 + +struct input_event { + struct timeval time; + uint16_t type; + uint16_t code; + int32_t value; +}; + +void PLAT_initLid(void) { + lid.has_lid = exists(LID_PATH); + if (lid.has_lid) + lid.is_open = getInt(LID_PATH); +} + +int PLAT_lidChanged(int* state) { + if (!lid.has_lid) return 0; + + int lid_open = getInt(LID_PATH); + if (lid_open != lid.is_open) { + lid.is_open = lid_open; + if (state) *state = lid_open; + return 1; + } + return 0; +} + +int PLAT_shouldWake(void) { + int lid_open = 1; + if (lid.has_lid && PLAT_lidChanged(&lid_open) && lid_open) + return 1; + + int fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK | O_CLOEXEC); + if (fd < 0) return 0; + + struct input_event event; + int should_wake = 0; + while (read(fd, &event, sizeof(event)) == sizeof(event)) { + if (event.type == EV_KEY && event.code == CODE_POWER && event.value == 0) { + if (lid.has_lid && !lid.is_open) { + should_wake = 0; + continue; + } + should_wake = 1; + } + } + close(fd); + return should_wake; +} + +/////////////////////////////// + +double get_time_sec() { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC_RAW, &ts); + return ts.tv_sec + ts.tv_nsec / 1e9; // Convert to seconds +} +double get_process_cpu_time_sec() { + // this gives cpu time in nanoseconds needed to accurately calculate cpu usage in very short time frames. + // unfortunately about 20ms between meassures seems the lowest i can go to get accurate results + // maybe in the future i will find and even more granual way to get cpu time, but might just be a limit of C or Linux alltogether + struct timespec ts; + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); + return ts.tv_sec + ts.tv_nsec / 1e9; // Convert to seconds +} + +static pthread_mutex_t currentcpuinfo; +// a roling average for the display values of about 2 frames, otherwise they are unreadable jumping too fast up and down and stuff to read +#define ROLLING_WINDOW 120 + +void *PLAT_cpu_monitor(void *arg) { + if (!Perf_tryBeginCPUMonitor()) return NULL; + + double prev_real_time = get_time_sec(); + double prev_cpu_time = get_process_cpu_time_sec(); + + double cpu_usage_history[ROLLING_WINDOW] = {0}; + int history_index = 0; + int history_count = 0; + + while (Perf_isCPUMonitorEnabled()) { + double curr_real_time = get_time_sec(); + double curr_cpu_time = get_process_cpu_time_sec(); + + double elapsed_real_time = curr_real_time - prev_real_time; + double elapsed_cpu_time = curr_cpu_time - prev_cpu_time; + + if (elapsed_real_time > 0) { + double cpu_usage = (elapsed_cpu_time / elapsed_real_time) * 100.0; + + pthread_mutex_lock(¤tcpuinfo); + + cpu_usage_history[history_index] = cpu_usage; + history_index = (history_index + 1) % ROLLING_WINDOW; + if (history_count < ROLLING_WINDOW) history_count++; + + double sum_cpu_usage = 0; + for (int i = 0; i < history_count; i++) sum_cpu_usage += cpu_usage_history[i]; + perf.cpu_usage = sum_cpu_usage / history_count; + + pthread_mutex_unlock(¤tcpuinfo); + } + + prev_real_time = curr_real_time; + prev_cpu_time = curr_cpu_time; + usleep(100000); + } + + Perf_endCPUMonitor(); + return NULL; +} + +void PLAT_setCPUSpeed(int speed) { + const char* mode; + switch (speed) { + case CPU_SPEED_AUTO: mode = "auto"; break; + case CPU_SPEED_PERFORMANCE: mode = "performance"; break; + case CPU_SPEED_POWERSAVE: mode = "powersave"; break; + default: return; + } + + const char* system_path = getenv("SYSTEM_PATH"); + if (!system_path) { + LOG_info("WARNING: SYSTEM_PATH not set, cannot run governor script\n"); + return; + } + char cmd[512]; + int n = snprintf(cmd, sizeof(cmd), "sh \"%s/bin/governor.sh\" \"%s\"", system_path, mode); + if (n < 0 || n >= (int)sizeof(cmd)) { + LOG_info("WARNING: SYSTEM_PATH too long for governor script path\n"); + return; + } + int ret = system(cmd); + if (ret != 0) LOG_info("WARNING: governor script exited with status %d for mode '%s'\n", ret, mode); +} + +#define MAX_STRENGTH 0xFFFF +#define MIN_VOLTAGE 500000 +#define MAX_VOLTAGE 3300000 +#define RUMBLE_PATH "/sys/class/power_supply/axp2202-battery/moto" + +void PLAT_setRumble(int strength) { + putInt(RUMBLE_PATH, (strength) ? 1 : 0); +} + +int PLAT_pickSampleRate(int requested, int max) { + // bluetooth: allow limiting the maximum to improve compatibility + if(PLAT_bluetoothConnected()) + return MIN(requested, CFG_getBluetoothSamplingrateLimit()); + + return MIN(requested, max); +} + +void PLAT_overrideMute(int mute) { + system(mute ? "amixer -q sset 'SPK' off" : "amixer -q sset 'SPK' on"); +} + +char* PLAT_getModel(void) { + char* model = getenv("RGXX_MODEL"); + if (model) return model; + return "Anbernic RG XX"; +} + +void PLAT_getOsVersionInfo(char* output_str, size_t max_len) +{ + char os_release[512] = {0}; + char kernel[128] = {0}; + FILE *fp = popen(". /etc/os-release 2>/dev/null; printf '%s' \"$PRETTY_NAME\"", "r"); + if (fp) { + fgets(os_release, sizeof(os_release), fp); + pclose(fp); + } + getFile("/proc/sys/kernel/osrelease", kernel, sizeof(kernel)); + trimTrailingNewlines(os_release); + trimTrailingNewlines(kernel); + snprintf(output_str, max_len, "%s%s%s", os_release[0] ? os_release : "Anbernic stock OS", kernel[0] ? " / Linux " : "", kernel); +} + +bool PLAT_btIsConnected(void) +{ + return bluetoothConnected; +} + +ConnectionStrength PLAT_connectionStrength(void) { + if(!WIFI_enabled() || !connection.valid || connection.rssi == -1) + return SIGNAL_STRENGTH_OFF; + else if (connection.rssi == 0) + return SIGNAL_STRENGTH_DISCONNECTED; + else if (connection.rssi >= -60) + return SIGNAL_STRENGTH_HIGH; + else if (connection.rssi >= -70) + return SIGNAL_STRENGTH_MED; + else + return SIGNAL_STRENGTH_LOW; +} + +void PLAT_initDefaultLeds() { +} +void PLAT_initLeds(LightSettings *lights) +{ +} + +void PLAT_setLedInbrightness(LightSettings *led) +{ +} +void PLAT_setLedBrightness(LightSettings *led) +{ +} +void PLAT_setLedEffect(LightSettings *led) +{ +} +void PLAT_setLedEffectCycles(LightSettings *led) +{ +} +void PLAT_setLedEffectSpeed(LightSettings *led) +{ +} +void PLAT_setLedColor(LightSettings *led) +{ +} + +////////////////////////////////////////////// + +bool PLAT_canTurbo(void) { return false; } + +int PLAT_toggleTurbo(int btn_id) +{ + return 0; +} + +void PLAT_clearTurbo() { +} + +////////////////////////////////////////////// + +int PLAT_setDateTime(int y, int m, int d, int h, int i, int s) { + char cmd[512]; + sprintf(cmd, "date -s '%d-%d-%d %d:%d:%d'; hwclock -u -w", y,m,d,h,i,s); + system(cmd); + return 0; // why does this return an int? +} + +#define MAX_LINE_LENGTH 200 +#define ZONE_PATH "/usr/share/zoneinfo" +#define ZONE_TAB_PATH ZONE_PATH "/zone.tab" + +static char cached_timezones[MAX_TIMEZONES][MAX_TZ_LENGTH]; +static int cached_tz_count = -1; + +int compare_timezones(const void *a, const void *b) { + return strcmp((const char *)a, (const char *)b); +} + +void PLAT_initTimezones() { + if (cached_tz_count != -1) { // Already initialized + return; + } + + FILE *file = fopen(ZONE_TAB_PATH, "r"); + if (!file) { + LOG_info("Error opening file %s\n", ZONE_TAB_PATH); + return; + } + + char line[MAX_LINE_LENGTH]; + cached_tz_count = 0; + + while (fgets(line, sizeof(line), file)) { + // Skip comment lines + if (line[0] == '#' || strlen(line) < 3) { + continue; + } + + char *token = strtok(line, "\t"); // Skip country code + if (!token) continue; + + token = strtok(NULL, "\t"); // Skip latitude/longitude + if (!token) continue; + + token = strtok(NULL, "\t\n"); // Extract timezone + if (!token) continue; + + // Check for duplicates before adding + int duplicate = 0; + for (int i = 0; i < cached_tz_count; i++) { + if (strcmp(cached_timezones[i], token) == 0) { + duplicate = 1; + break; + } + } + + if (!duplicate && cached_tz_count < MAX_TIMEZONES) { + strncpy(cached_timezones[cached_tz_count], token, MAX_TZ_LENGTH - 1); + cached_timezones[cached_tz_count][MAX_TZ_LENGTH - 1] = '\0'; // Ensure null-termination + cached_tz_count++; + } + } + + fclose(file); + + // Sort the list alphabetically + qsort(cached_timezones, cached_tz_count, MAX_TZ_LENGTH, compare_timezones); +} + +void PLAT_getTimezones(char timezones[MAX_TIMEZONES][MAX_TZ_LENGTH], int *tz_count) { + if (cached_tz_count == -1) { + LOG_warn("Error: Timezones not initialized. Call PLAT_initTimezones first.\n"); + *tz_count = 0; + return; + } + + memcpy(timezones, cached_timezones, sizeof(cached_timezones)); + *tz_count = cached_tz_count; +} + +char *PLAT_getCurrentTimezone() { + char *output = (char *)malloc(256); + if (!output) { + return NULL; + } + FILE *fp = popen("timedatectl show -p Timezone --value 2>/dev/null", "r"); + if (!fp) { + free(output); + return NULL; + } + fgets(output, 256, fp); + pclose(fp); + trimTrailingNewlines(output); + + return output; +} + +void PLAT_setCurrentTimezone(const char* tz) { + if (cached_tz_count == -1) { + LOG_warn("Error: Timezones not initialized. Call PLAT_initTimezones first.\n"); + return; + } + + char cmd[512]; + snprintf(cmd, sizeof(cmd), "timedatectl set-timezone '%s'", tz); + system(cmd); +} + +bool PLAT_getNetworkTimeSync(void) { + char output[16] = {0}; + FILE *fp = popen("timedatectl show -p NTP --value 2>/dev/null", "r"); + if (!fp) { + return false; + } + fgets(output, sizeof(output), fp); + pclose(fp); + return output[0] == 'y' || output[0] == 'Y'; +} + +void PLAT_setNetworkTimeSync(bool on) { + system(on ? "timedatectl set-ntp true" : "timedatectl set-ntp false"); +} + +///////////////////////// + +// We use the generic video implementation here +#include "generic_video.c" + +///////////////////////// + +// We use the generic wifi implementation here +#define WIFI_SOCK_DIR "/tmp/wifi/sockets" +#include "generic_wifi.c" + +///////////////////////// + +// We use the generic bluetooth implementation here +#include "generic_bt.c" diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h new file mode 100644 index 000000000..8a2067c3d --- /dev/null +++ b/workspace/h700/platform/platform.h @@ -0,0 +1,149 @@ +// h700 + +#ifndef PLATFORM_H +#define PLATFORM_H + +/////////////////////////////// + +#ifdef SDL +# include "sdl.h" +#endif + +/////////////////////////////// + +extern int is_rg28xx; +extern int is_rg34xx; +extern int is_cube; + +/////////////////////////////// + +#define BUTTON_UP BUTTON_NA +#define BUTTON_DOWN BUTTON_NA +#define BUTTON_LEFT BUTTON_NA +#define BUTTON_RIGHT BUTTON_NA + +#define BUTTON_SELECT BUTTON_NA +#define BUTTON_START BUTTON_NA + +#define BUTTON_A BUTTON_NA +#define BUTTON_B BUTTON_NA +#define BUTTON_X BUTTON_NA +#define BUTTON_Y BUTTON_NA + +#define BUTTON_L1 BUTTON_NA +#define BUTTON_R1 BUTTON_NA +#define BUTTON_L2 BUTTON_NA +#define BUTTON_R2 BUTTON_NA +#define BUTTON_L3 BUTTON_NA +#define BUTTON_R3 BUTTON_NA + +#define BUTTON_MENU BUTTON_NA +#define BUTTON_MENU_ALT BUTTON_NA +#define BUTTON_POWER 116 +#define BUTTON_PLUS BUTTON_NA +#define BUTTON_MINUS BUTTON_NA + +/////////////////////////////// + +#define CODE_UP 103 +#define CODE_DOWN 108 +#define CODE_LEFT 105 +#define CODE_RIGHT 106 + +#define CODE_SELECT 310 +#define CODE_START 311 + +#define CODE_A 304 +#define CODE_B 305 +#define CODE_X 307 +#define CODE_Y 306 + +#define CODE_L1 308 +#define CODE_R1 309 +#define CODE_L2 314 +#define CODE_R2 315 +#define CODE_L3 313 +#define CODE_R3 316 + +#define CODE_MENU 312 +#define CODE_MENU_ALT 354 +#define CODE_POWER 116 + +#define CODE_PLUS 115 +#define CODE_MINUS 114 + +/////////////////////////////// + // HATS +#define JOY_UP JOY_NA +#define JOY_DOWN JOY_NA +#define JOY_LEFT JOY_NA +#define JOY_RIGHT JOY_NA + +#define JOY_SELECT 6 +#define JOY_START 7 + +#define JOY_A 0 +#define JOY_B 1 +#define JOY_X 3 +#define JOY_Y 2 + +#define JOY_L1 4 +#define JOY_R1 5 +#define JOY_L2 9 +#define JOY_R2 10 +#define JOY_L3 (is_rg34xx || is_rg28xx ? JOY_NA : 11) +#define JOY_R3 (is_rg34xx || is_rg28xx ? JOY_NA : 12) + +#define JOY_MENU 8 +#define JOY_POWER JOY_NA +#define JOY_PLUS 18 +#define JOY_MINUS 17 + +/////////////////////////////// + +#define AXIS_L2 AXIS_NA +#define AXIS_R2 AXIS_NA + +#define AXIS_LX 0 +#define AXIS_LY 1 +#define AXIS_RX 2 +#define AXIS_RY 3 + +/////////////////////////////// + +#define BTN_RESUME BTN_X +#define BTN_SLEEP BTN_POWER +#define BTN_WAKE BTN_POWER +#define BTN_MOD_VOLUME BTN_NONE +#define BTN_MOD_BRIGHTNESS BTN_MENU +#define BTN_MOD_COLORTEMP BTN_SELECT +#define BTN_MOD_PLUS BTN_PLUS +#define BTN_MOD_MINUS BTN_MINUS + +/////////////////////////////// + +#define FIXED_SCALE 2 +#define FIXED_WIDTH (is_cube?720:(is_rg34xx?720:640)) +#define FIXED_HEIGHT (is_cube?720:480) +#define FIXED_BPP 2 +#define FIXED_DEPTH (FIXED_BPP * 8) +#define FIXED_PITCH (FIXED_WIDTH * FIXED_BPP) +#define FIXED_SIZE (FIXED_PITCH * FIXED_HEIGHT) + +/////////////////////////////// + +#define MAIN_ROW_COUNT (is_cube?8:6) +#define QUICK_SWITCHER_COUNT 3 +#define PADDING 5 + +/////////////////////////////// + +#define SDCARD_PATH "/mnt/SDCARD" +#define MUTE_VOLUME_RAW 0 + +#define SCREEN_FPS 60.0 +#define MAX_LIGHTS 0 + +/////////////////////////////// + +#endif diff --git a/workspace/h700/rfkill/makefile b/workspace/h700/rfkill/makefile new file mode 100644 index 000000000..55c8ade45 --- /dev/null +++ b/workspace/h700/rfkill/makefile @@ -0,0 +1,14 @@ +ifeq (,$(CROSS_COMPILE)) +$(error missing CROSS_COMPILE for this toolchain) +endif + +TARGET = rfkill +PRODUCT = $(TARGET).elf + +CC = $(CROSS_COMPILE)gcc +FLAGS = -Os -lrt -ldl -Wl,--gc-sections -s + +all: + $(CC) $(TARGET).c -o $(PRODUCT) $(FLAGS) +clean: + rm -rf $(PRODUCT) \ No newline at end of file diff --git a/workspace/h700/rfkill/rfkill.c b/workspace/h700/rfkill/rfkill.c new file mode 100644 index 000000000..3a35feae4 --- /dev/null +++ b/workspace/h700/rfkill/rfkill.c @@ -0,0 +1,117 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void show_usage(const char *prog) { + fprintf(stderr, + "Usage:\n" + " %s list [INDEX|TYPE]\n" + " %s block INDEX|TYPE\n" + " %s unblock INDEX|TYPE\n", prog, prog, prog); + exit(EXIT_FAILURE); +} + +int get_rfkill_type(const char *name) { + static const char *types[] = { + "all", "wlan", "bluetooth", "uwb", "wimax", "wwan", "gps", "fm", NULL + }; + if (strcmp(name, "wifi") == 0) name = "wlan"; + if (strcmp(name, "ultrawideband") == 0) name = "uwb"; + + for (int i = 0; types[i]; ++i) { + if (strcmp(name, types[i]) == 0) + return i; + } + return -1; +} + +void list_devices(const char *filter) { + int fd = open("/dev/rfkill", O_RDONLY | O_NONBLOCK); + if (fd < 0) { + perror("/dev/rfkill"); + exit(EXIT_FAILURE); + } + + struct rfkill_event ev; + ssize_t len; + + int rf_type = -1, rf_idx = -1; + if (filter) { + rf_type = get_rfkill_type(filter); + if (rf_type < 0) + rf_idx = atoi(filter); + } + + while ((len = read(fd, &ev, sizeof(ev))) == sizeof(ev)) { + if ((rf_type >= 0 && ev.type != rf_type) || + (rf_idx >= 0 && ev.idx != rf_idx)) + continue; + + char path[128], line[128], name[64] = "", type[64] = ""; + snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%u/uevent", ev.idx); + FILE *f = fopen(path, "r"); + if (!f) continue; + + while (fgets(line, sizeof(line), f)) { + if (sscanf(line, "RFKILL_NAME=%63s", name) == 1) continue; + if (sscanf(line, "RFKILL_TYPE=%63s", type) == 1) continue; + } + fclose(f); + + printf("%u: %s: %s\n", ev.idx, name, type); + printf("\tSoft blocked: %s\n", ev.soft ? "yes" : "no"); + printf("\tHard blocked: %s\n", ev.hard ? "yes" : "no"); + } + + close(fd); +} + +void change_block(const char *target, int block) { + int fd = open("/dev/rfkill", O_WRONLY); + if (fd < 0) { + perror("/dev/rfkill"); + exit(EXIT_FAILURE); + } + + struct rfkill_event ev = {0}; + int type = get_rfkill_type(target); + int idx = (type < 0) ? atoi(target) : -1; + + ev.op = (idx >= 0) ? RFKILL_OP_CHANGE : RFKILL_OP_CHANGE_ALL; + ev.soft = block; + if (type >= 0) ev.type = type; + if (idx >= 0) ev.idx = idx; + + if (write(fd, &ev, sizeof(ev)) != sizeof(ev)) { + perror("write"); + close(fd); + exit(EXIT_FAILURE); + } + + close(fd); +} + +int main(int argc, char **argv) { + if (argc < 2 || argc > 3) + show_usage(argv[0]); + + if (strcmp(argv[1], "list") == 0) { + list_devices(argv[2]); + } else if (strcmp(argv[1], "block") == 0 && argc == 3) { + change_block(argv[2], 1); + } else if (strcmp(argv[1], "unblock") == 0 && argc == 3) { + change_block(argv[2], 0); + } else { + show_usage(argv[0]); + } + + return 0; +} \ No newline at end of file diff --git a/workspace/makefile b/workspace/makefile index f71af4d62..485595e03 100644 --- a/workspace/makefile +++ b/workspace/makefile @@ -34,6 +34,9 @@ ifeq ($(PLATFORM), tg5040) cd ./$(PLATFORM)/rfkill && make all cd ./$(PLATFORM)/btmanager && make all cd ./$(PLATFORM)/poweroff_next/ && make +endif +ifeq ($(PLATFORM), h700) + cd ./$(PLATFORM)/rfkill && make all endif cd ./$(PLATFORM)/libmsettings && make cd ./$(PLATFORM) && make early # eg. other libs @@ -51,8 +54,10 @@ endif cd ./all/syncsettings/ && make cd ./all/nextval/ && make cd ./all/settings/ && make +ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) cd ./all/ledcontrol/ && make cd ./all/bootlogo/ && make +endif cd ./all/audiomon && make all cd ./all/show2/ && make endif @@ -76,8 +81,10 @@ clean: ifneq ($(PLATFORM), desktop) cd ./$(PLATFORM)/keymon && make clean cd ./all/syncsettings/ && make clean +ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) cd ./all/ledcontrol/ && make clean cd ./all/bootlogo/ && make clean +endif cd ./all/show2/ && make clean cd ./all/batmon/ && make clean ifeq ($(PLATFORM), tg5040) @@ -85,6 +92,9 @@ ifeq ($(PLATFORM), tg5040) cd ./$(PLATFORM)/btmanager && make clean cd ./$(PLATFORM)/poweroff_next/ && make clean endif +ifeq ($(PLATFORM), h700) + cd ./$(PLATFORM)/rfkill && make clean +endif endif cd ./$(PLATFORM)/libmsettings && make clean cd ./all/nextui/ && make clean From e1596f671a87c2c54302132397ad4ef0fc5338d1 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 16:30:07 +0200 Subject: [PATCH 05/76] fix(h700): build picodrive core Disable PicoDrive's inherited LTO flags for the H700 target and filter the remaining linker plugin flags after the upstream makefile is included. The tg5040 toolchain otherwise drops the libretro glue objects during the final shared-object link, leaving VFS and logging symbols unresolved. This keeps the H700 core bundle buildable without changing the shared core list. --- workspace/h700/cores/patches/picodrive.patch | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/workspace/h700/cores/patches/picodrive.patch b/workspace/h700/cores/patches/picodrive.patch index f31cf87ce..27667e4d5 100644 --- a/workspace/h700/cores/patches/picodrive.patch +++ b/workspace/h700/cores/patches/picodrive.patch @@ -20,10 +20,9 @@ index 0d1dc08f81a11cef6b3b7238367b1ff27fcf1ead..1f87c76c3242023c4095f0c9087c5276 + -falign-functions=1 -falign-jumps=1 -falign-loops=1 \ + -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \ + -fmerge-all-constants -fno-math-errno -+ CFLAGS += -fPIC -flto ++ CFLAGS += -fPIC + CFLAGS += -fomit-frame-pointer -ffast-math -D__GCW0__ + CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -+ LDFLAGS += -flto + HAVE_NEON = 1 + BUILTIN_GPU = neon + ARCH = aarch64 @@ -34,3 +33,15 @@ index 0d1dc08f81a11cef6b3b7238367b1ff27fcf1ead..1f87c76c3242023c4095f0c9087c5276 # Windows MSVC 2017 all architectures else ifneq (,$(findstring windows_msvc2017,$(platform))) NO_GCC := 1 +@@ -725,6 +750,11 @@ PLATFORM_ZLIB ?= 1 + + include Makefile + ++ifeq ($(platform), h700) ++ CFLAGS := $(filter-out -flto -flto=4 -fuse-linker-plugin -fwhole-program,$(CFLAGS)) ++ LDFLAGS := $(filter-out -flto -flto=4 -fuse-linker-plugin -fwhole-program,$(LDFLAGS)) ++endif ++ + ifeq ($(platform), osx) + pico/cd/libchdr/src/libchdr_chd.o: CFLAGS += -D__MACTYPES__=1 + endif From fb74ab04930c018dbfeddc9995fb85399c224464 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 16:34:31 +0200 Subject: [PATCH 06/76] fix(h700): enable minarch runtime build Include h700 in the existing tg5040-class minarch build filters so the platform gets the RA, CHD, SRM, samplerate, and compression support libraries that the H700 package already stages. Without this, the package target could copy the H700 cores but failed before creating a usable MinUI payload because minarch.elf was never produced. --- workspace/all/minarch/makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workspace/all/minarch/makefile b/workspace/all/minarch/makefile index ae10f2529..ea0abdd15 100644 --- a/workspace/all/minarch/makefile +++ b/workspace/all/minarch/makefile @@ -28,7 +28,7 @@ SOURCE = $(TARGET).c ma_cheats.c ma_rewind.c ma_audio.c ma_input.c \ ../common/notification.c ../../$(PLATFORM)/platform/platform.c # RA support -ifneq (,$(filter $(PLATFORM),tg5040 tg5050 my355 desktop)) +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700 my355 desktop)) # RA source files SOURCE += ../common/http.c ../common/ra_badges.c ../common/ra_offline.c ../common/ra_sync.c ../common/ra_event_queue.c ra_integration.c chd_reader.c endif @@ -66,7 +66,7 @@ LDFLAGS += -lasound endif # RA support: rcheevos and libchdr linking -ifneq (,$(filter $(PLATFORM),tg5040 tg5050 my355 desktop)) +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700 my355 desktop)) LDFLAGS += -lrcheevos -lchdr -lcrypto CFLAGS += -DRC_CLIENT_SUPPORTS_HASH -DHAS_CHEEVOS -DHAS_CHDR ifeq ($(PLATFORM), desktop) @@ -98,7 +98,7 @@ ifeq ($(PLATFORM), desktop) all: clean libretro-common rcheevos libchdr $(PREFIX_LOCAL)/include/msettings.h mkdir -p build/$(PLATFORM) $(CC) $(SOURCE) -o $(PRODUCT) $(CFLAGS) $(LDFLAGS) -else ifneq (,$(filter $(PLATFORM),tg5040 tg5050 my355)) +else ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700 my355)) # Platforms with RA support all: clean libretro-common libsrm.a rcheevos libchdr $(PREFIX_LOCAL)/include/msettings.h mkdir -p build/$(PLATFORM) @@ -157,4 +157,4 @@ libsrm.a: $(OBJECTS) clean: rm -f $(PRODUCT) - rm -f $(OBJECTS) $(LIBRARY) \ No newline at end of file + rm -f $(OBJECTS) $(LIBRARY) From e17ec6c99e9ffcc834626ea3061e23c4d88b6a3b Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 16:58:37 +0200 Subject: [PATCH 07/76] fix(h700): use stock unzip in boot shim Prefer the stock OS unzip binary for the RG40XXV boot shim so the TF2 update payload can be extracted without relying on the embedded tarball helper. Keep the embedded helper as a fallback with explicit logging, and add exFAT/auto mount fallback for TF2 cards that are not already mounted by stock. --- workspace/h700/boot/boot.sh | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/workspace/h700/boot/boot.sh b/workspace/h700/boot/boot.sh index eeaec317f..da7cfa551 100755 --- a/workspace/h700/boot/boot.sh +++ b/workspace/h700/boot/boot.sh @@ -17,7 +17,9 @@ mount_tf2() { if mountpoint -q "$TF2_PATH"; then return 0 fi - mount -t vfat -o rw,utf8,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null + mount -t vfat -o rw,utf8,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null || + mount -t exfat -o rw,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null || + mount -o rw,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null } ensure_compat_path() { @@ -34,11 +36,30 @@ extract_payload() { LINE=$(($(grep -na '^BINARY' "$0" | cut -d ':' -f 1 | tail -1) + 1)) tail -n +"$LINE" "$0" > /tmp/nextui-h700-data.tar.gz mkdir -p /tmp/nextui-h700 - tar -xzf /tmp/nextui-h700-data.tar.gz -C /tmp/nextui-h700 >/dev/null 2>&1 || return 1 + if ! tar -xzf /tmp/nextui-h700-data.tar.gz -C /tmp/nextui-h700 >> "$LOG_PATH" 2>&1; then + log "embedded unzip extraction failed" + return 1 + fi cp /tmp/nextui-h700/unzip /tmp/nextui-h700-unzip chmod +x /tmp/nextui-h700-unzip } +find_unzip() { + for unzip_path in /usr/bin/unzip /bin/unzip /mnt/vendor/bin/unzip /tmp/nextui-h700-unzip; do + if [ -x "$unzip_path" ]; then + echo "$unzip_path" + return 0 + fi + done + + if extract_payload; then + echo /tmp/nextui-h700-unzip + return 0 + fi + + return 1 +} + fallback_stock() { log "falling back to stock frontend" if [ -x /mnt/vendor/bin/dmenu.bin ]; then @@ -60,8 +81,15 @@ ensure_compat_path if [ -f "$UPDATE_PATH" ]; then log "install/update zip detected" - extract_payload || fallback_stock - /tmp/nextui-h700-unzip -o "$UPDATE_PATH" -d "$TF2_PATH" >> "$LOG_PATH" 2>&1 + UNZIP_CMD=$(find_unzip) + if [ -z "$UNZIP_CMD" ]; then + log "unzip helper unavailable" + fallback_stock + fi + if ! "$UNZIP_CMD" -o "$UPDATE_PATH" -d "$TF2_PATH" >> "$LOG_PATH" 2>&1; then + log "MinUI.zip extraction failed" + fallback_stock + fi rm -f "$UPDATE_PATH" if [ -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ]; then From 9358e387b248b0b4baa387403370f20404964bad Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 17:14:44 +0200 Subject: [PATCH 08/76] fix(h700): bundle runtime graphics libraries Package the H700 runtime libraries required by the Mali SDL stack and H700 platform helpers, including libUMP, libtinyalsa, and libasound. Add a debug keep-network flag and launch logging so failed RG40XXV bring-up attempts remain reachable over SSH for diagnosis. --- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 15 +++++++++++++-- workspace/h700/makefile | 3 +++ workspace/h700/platform/makefile.copy | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 13cd42663..5ff5afd22 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -27,6 +27,8 @@ export LOGS_PATH="$USERDATA_PATH/logs" export HOOKS_PATH="$USERDATA_PATH/.hooks" export DATETIME_PATH="$SHARED_USERDATA_PATH/datetime.txt" export HOME="$USERDATA_PATH" +DEBUG_KEEP_NETWORK_PATH="$USERDATA_PATH/debug-keep-network" +LAUNCH_LOG="$LOGS_PATH/launch.txt" export PATH="$SYSTEM_PATH/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" export LD_LIBRARY_PATH="$SYSTEM_PATH/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" @@ -44,6 +46,7 @@ fi mkdir -p "$BIOS_PATH" "$ROMS_PATH" "$SAVES_PATH" "$CHEATS_PATH" mkdir -p "$USERDATA_PATH" "$LOGS_PATH" "$HOOKS_PATH" "$SHARED_USERDATA_PATH/.minui" +echo "launch: starting $(date)" > "$LAUNCH_LOG" export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" case "$RGXX_MODEL" in @@ -59,7 +62,11 @@ if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then fi killall brightCtrl.bin cexpert 2>/dev/null || true -systemctl stop NetworkManager 2>/dev/null || true +if [ -f "$DEBUG_KEEP_NETWORK_PATH" ]; then + echo "launch: keeping stock network services for debug" >> "$LAUNCH_LOG" +else + systemctl stop NetworkManager 2>/dev/null || true +fi loginctl show-logind >/dev/null 2>&1 && mkdir -p /run/systemd/system 2>/dev/null || true if [ -f "$SYSTEM_PATH/dat/dmenu.bin" ] && [ -d /mnt/mmc ]; then @@ -88,7 +95,9 @@ else fi wifion=$(nextval.elf wifi | sed -n 's/.*"wifi": \([0-9]*\).*/\1/p') -if [ "$wifion" = "0" ]; then +if [ -f "$DEBUG_KEEP_NETWORK_PATH" ]; then + echo "launch: skipping NextUI wifi init for debug" >> "$LAUNCH_LOG" +elif [ "$wifion" = "0" ]; then "$SYSTEM_PATH/etc/wifi/wifi_init.sh" stop > /dev/null 2>&1 & else "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start > /dev/null 2>&1 & @@ -122,7 +131,9 @@ EXEC_PATH="/tmp/nextui_exec" NEXT_PATH="/tmp/next" touch "$EXEC_PATH" && sync while [ -f "$EXEC_PATH" ]; do + echo "launch: starting nextui.elf $(date)" >> "$LAUNCH_LOG" nextui.elf > "$LOGS_PATH/nextui.txt" 2>&1 + echo "launch: nextui.elf exited $? $(date)" >> "$LAUNCH_LOG" sh "$SYSTEM_PATH/bin/governor.sh" "performance" if [ -f "$NEXT_PATH" ]; then diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 8ff785c8d..2bb122492 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -29,6 +29,9 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cp -a $(PREFIX_LOCAL)/lib/libSDL2*.so* $(REQUIRES_SDL2)/output/ cp -a $(PREFIX)/lib/libSDL2_image*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -a $(PREFIX)/lib/libSDL2_ttf*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true + cp -a $(PREFIX)/lib/libUMP.so* $(REQUIRES_SDL2)/output/ + cp -a $(PREFIX)/lib/libtinyalsa.so* $(REQUIRES_SDL2)/output/ + cp -a $(PREFIX)/lib/libasound.so* $(REQUIRES_SDL2)/output/ cd boot && sh build.sh clean: diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy index 60d6a43ef..2e483cde2 100644 --- a/workspace/h700/platform/makefile.copy +++ b/workspace/h700/platform/makefile.copy @@ -12,6 +12,9 @@ $(PLATFORM): cp ./workspace/all/show2/build/$@/show2.elf ./build/BOOT/common/$@/ cp ./workspace/$@/other/unzip60/unzip ./build/BOOT/common/$@/ cp -a ./workspace/$@/other/sdl2/output/libSDL2*.so* ./build/SYSTEM/$@/lib/ + cp -a ./workspace/$@/other/sdl2/output/libUMP.so* ./build/SYSTEM/$@/lib/ + cp -a ./workspace/$@/other/sdl2/output/libtinyalsa.so* ./build/SYSTEM/$@/lib/ + cp -a ./workspace/$@/other/sdl2/output/libasound.so* ./build/SYSTEM/$@/lib/ # rfkill cp ./workspace/$@/rfkill/rfkill.elf ./build/SYSTEM/$@/bin/ From 9ceb0a18dcce8fb60abd67a7a974a206b668b484 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 17:56:07 +0200 Subject: [PATCH 09/76] test(h700): harden rg40xxv beta Incorporate the H700 branch review by tightening the RG40XXV boot and update path, delegating fresh MinUI.zip installs through the platform updater, repairing TF2 mount failures when possible, and improving TF1/TF2 compatibility mounts and dmenu self-heal behavior. Rework the H700 SDL/NextCommander build inputs so the custom Mali SDL is pinned and verified, Files.pak is built with H700 paths/buttons, and host libraries such as libasound/EGL/GLES are no longer bundled over the stock OS copies. Harden the platform layer and runtime services with corrected joystick constants, persistent wake input handling, display/audio setting restore, WiFi runtime state separation, Bluetooth audio gating, better crash diagnostics, and removal of leftover Brick defaults that should not ship for H700. --- docs/h700-port/09-branch-review.md | 164 ++++++++++++++++++ docs/h700-port/10-branch-review-supplement.md | 104 +++++++++++ makefile.toolchain | 2 +- skeleton/BASE/README.txt | 8 + .../Emus/h700/CPC.pak/default-brick.cfg | 2 - .../Emus/h700/FBN.pak/default-brick.cfg | 15 -- .../Emus/h700/PUAE.pak/default-brick.cfg | 47 ----- .../EXTRAS/Emus/h700/VB.pak/default-brick.cfg | 21 --- skeleton/SYSTEM/h700/bin/reboot_next | 39 ----- skeleton/SYSTEM/h700/bin/suspend | 19 +- skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh | 47 ++++- .../h700/paks/Emus/FC.pak/default-brick.cfg | 20 --- .../h700/paks/Emus/PS.pak/default-brick.cfg | 23 --- .../h700/paks/Emus/SFC.pak/default-brick.cfg | 12 -- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 79 ++++++++- skeleton/SYSTEM/h700/system-brick.cfg | 19 -- workspace/all/audiomon/audiomon.cpp | 15 ++ workspace/all/common/generic_video.c | 17 +- workspace/all/settings/settings.cpp | 2 +- workspace/all/syncsettings/syncsettings.c | 9 + workspace/h700/boot/boot.sh | 73 ++++++-- workspace/h700/install/boot.sh | 10 +- workspace/h700/install/update.sh | 10 +- workspace/h700/libmsettings/msettings.c | 28 ++- workspace/h700/makefile | 20 ++- .../h700/patches/NextCommander-h700.patch | 51 ++++++ workspace/h700/platform/makefile.copy | 7 +- workspace/h700/platform/platform.c | 42 ++++- workspace/h700/platform/platform.h | 10 +- 29 files changed, 632 insertions(+), 283 deletions(-) create mode 100644 docs/h700-port/09-branch-review.md create mode 100644 docs/h700-port/10-branch-review-supplement.md delete mode 100644 skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg delete mode 100644 skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg delete mode 100644 skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg delete mode 100644 skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg delete mode 100755 skeleton/SYSTEM/h700/bin/reboot_next delete mode 100644 skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg delete mode 100644 skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg delete mode 100644 skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg delete mode 100644 skeleton/SYSTEM/h700/system-brick.cfg create mode 100644 workspace/h700/patches/NextCommander-h700.patch diff --git a/docs/h700-port/09-branch-review.md b/docs/h700-port/09-branch-review.md new file mode 100644 index 000000000..1d954cfd5 --- /dev/null +++ b/docs/h700-port/09-branch-review.md @@ -0,0 +1,164 @@ +# 09 — h700 Branch Review (2026-07-08, branch tip `d8685fff`) + +Review of the `h700` branch against the plan docs and live-probed device facts. +**Verdict: architecturally faithful to the plan and remarkably complete for a first +beta — toolchain reuse, custom SDL2, cores, skeleton, suspend, installer are all +present and mostly correct. A handful of concrete bugs need fixing before/at first +on-device boot; three need a physical device test to settle.** + +## A. Confirmed bugs (verified against live device probes) + +1. **GPU thermal zone wrong** — [platform.c:143](../../workspace/h700/platform/platform.c): + `PLAT_getGPUTemp` reads `thermal_zone2`. Probed on RG40XXV: zone0=cpu, **zone1=gpu**, + zone2=**ve** (video engine), zone3=ddr, zone4=axp2202-battery. Fix: zone1. + (`PLAT_getCPUTemp` zone0 is correct.) + +2. **SDL joystick button indices likely wrong** — [platform.h:92-100](../../workspace/h700/platform/platform.h). + evtest on the live device shows event1 exposes exactly KEY codes + {1, 114, 115, 304–316, 354} — **no d-pad keycodes** (d-pad = ABS hats 16/17). + SDL's linux joystick driver assigns button indices scanning BTN-range codes first + (304→0 … 316→12, 354→13), then low codes (1→14, 114→15, 115→16). Therefore: + - `JOY_PLUS=18 / JOY_MINUS=17` cannot be right → predicted **PLUS(115)=16, MINUS(114)=15** + - Branch maps L2=9(=code 313), R2=10(=314), L3=11(=315), R3=12(=316). The old + *working* port's wiring was **L3=313, L2=314, R2=315, R3=316** → predicted SDL + indices **L3=9, L2=10, R2=11, R3=12**. Branch and old port disagree; one 2-minute + `jstest`/`evtest` session (press L2, L3, R2, R3, Vol+/- and note codes) settles it. + The branch already builds `jstest` + `evtest` in `workspace/h700/other/` — use them. + - Everything else verified consistent: A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 + MENU=8 (per old-port wiring + SDL enumeration), axes LX=0 LY=1 RX=2 RY=3 + (ABS_Z/RX/RY/RZ, signed ±4096, flat=32 — probed). + +3. **`PLAT_shouldWake` can drop the wake press** — [platform.c:265-286](../../workspace/h700/platform/platform.c): + it opens `/dev/input/event0` fresh on every poll and closes it again. evdev only + queues events for *open* fds — a power press+release that lands between polls is + lost entirely, making wake-from-sleep flaky. Fix: open once (static fd, like the + old port's persistent `input_fds`), drain per poll, close in a quit path. + +## B. Must-verify on first device boot (can't be settled from the desk) + +4. **`--disable-loadso` in the SDL2 configure** — [workspace/h700/makefile:26](../../workspace/h700/makefile). + SDL's EGL glue (`SDL_egl.c`) normally dlopens libEGL via SDL_LoadObject; with + loadso disabled, `SDL_GL_CreateContext` in the mali driver may fail outright + ("SDL is compiled without loadso" class errors). It's also *why* libasound now + needs bundling (ALSA gets linked directly instead of dlopened). If the first GL + test fails there, drop `--disable-loadso` (and `--disable-filesystem` while at it + — SDL_GetPrefPath users). NextUI's own GL calls are direct-linked + (`-lGLESv2`, `GL_GLEXT_PROTOTYPES`) and unaffected; only SDL's context creation + path is at risk. + +5. **`digital volume` direction** — [msettings.c:~1240](../../workspace/h700/libmsettings/msettings.c) + uses `set_percent(digital, 100 - val)` (inverted). Probed: range 0–63; the ALSA TLV + metadata (`dBscale-min=0.00dB` at 0, mute=1) suggests 0=mute/quietest — i.e. NOT + inverted — but sunxi `digital volume` is traditionally an attenuator (0=loudest) + and the TLV data looks garbage (step 654dB). 30-second listen test decides; if + inverted is wrong, max volume currently produces silence. + +6. **Bundled `libasound.so` shadowing** — commit `d8685fff` ships tg5040's libasound + into `.system/h700/lib`, which shadows Ubuntu's own (LD_LIBRARY_PATH puts our lib + dir first). The device HAS libasound (alsa-utils work); the tg5040 copy's + compiled-in config path may or may not resolve on Ubuntu. If audio misbehaves, + *delete the bundled libasound* rather than debugging it — the system one is fine + and SDL's direct link only needs the soname. Similarly `libUMP` is an old + Utgard-era lib; Mali-G31/kbase doesn't use UMP — likely shippable dead weight + (harmless, but the unguarded `cp $(PREFIX)/lib/libUMP.so*` fails the build if the + sysroot ever drops it). + +## C. Functional gaps vs plan (from the build/scripts sweep) + +7. **Update flow loses the clean-replace step & pakz-only installs** + ([boot.sh:81-101](../../workspace/h700/boot/boot.sh), [install/boot.sh:52-54](../../workspace/h700/install/boot.sh)): + boot.sh unzips MinUI.zip itself and **deletes the zip before running + `.tmp_update/h700.sh`**, so h700.sh's `rm -rf` of bin/lib/MinUI.pak never fires → + stale files accumulate across updates. And the whole install block only triggers + on MinUI.zip, so `*.pakz` dropped at the SD root (Pak Store flow) are never + processed. Fix: make boot.sh delegate — if `.tmp_update/h700.sh` exists, run it + with the zip still in place (tg5040 model: the installer owns extraction); + self-extract only on true first install; add a `*.pakz` existence trigger. + +8. **WiFi credentials don't survive reboot** — + [wifi_init.sh:4-6](../../skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh) puts + `wpa_supplicant.conf` in `/tmp/wifi/` (tmpfs); `generic_wifi.c` persists networks + via `wpa_cli save_config` → written to tmpfs → gone at poweroff. Point `-c` at + e.g. `$SDCARD_PATH/.userdata/h700/wpa_supplicant.conf` (keep ctrl sockets in + `/tmp/wifi/sockets` — that pairing with platform.c's `WIFI_SOCK_DIR` is correct). + Also `killall wpa_supplicant` should be `systemctl stop wpa_supplicant` (stock + runs it as a systemd unit that may restart). + +9. **BT audio can't work yet: bluealsa neither built nor shipped.** + `bt_init.sh` starts it only `if command -v bluealsa` — silently never true on + Ubuntu 22.04. Pairing/input will work (BlueZ 5.64 + btagent ✔); A2DP needs + bluez-alsa built in the toolchain and shipped in `.system/h700/{bin,lib}` (plan 07). + Decide: ship it, or gate BT-audio UI off for the first beta. + +10. **TF1-write guard ineffective** — [install/update.sh:15](../../workspace/h700/install/update.sh), + launch.sh dmenu refresh: guarded by `[ -d /mnt/mmc ]`, which is true even when + nothing is mounted there → would write dmenu.bin onto the stock **rootfs**, + violating the p1–p7 policy. Use `mountpoint -q /mnt/mmc`. + +11. **No first-boot splash** — boot.sh extraction (potentially ~1 min on FAT) runs on + a dead screen; plan 02 calls for a raw-fb `dd` splash + an "insert NextUI SD + card" image when TF2 is missing. show2 only appears once h700.sh runs. + +12. **DHCP re-association** — `dhclient -nw` is started once; switching networks later + via wpa_cli may not re-DISCOVER. Verify; if flaky, add a `wpa_cli -a` action + script that bounces dhclient on CONNECTED. + +## D. Leftovers & cleanup + +13. `skeleton/SYSTEM/h700/bin/reboot_next` is a byte-identical tg5040 copy (busybox + reboot, `/etc/profile` umount hack). It's dead code on h700 — delete it (launch.sh + correctly uses plain `reboot`/`poweroff`). +14. Dead `-brick` cfgs can never load (minarch selects `default-$DEVICE.cfg`; DEVICE ∈ + rg40xx/rg34xx/rg28xx/cube): `system-brick.cfg`, `paks/Emus/{FC,PS,SFC}.pak/default-brick.cfg`, + `EXTRAS/Emus/h700/{CPC,PUAE,FBN,VB}.pak/default-brick.cfg`. Delete. (Conversely + rg34xx/rg28xx/cube have no device cfgs yet — fine for rg40xx-first, note for later.) +15. NextCommander is built with `PLATFORM=tg5040` → UI metrics tuned for 1280×720; on + 640×480 Files.pak will render oversized. Needs an h700 stanza upstream (the + `FILE_SYSTEM=/dev/mmcblk1p1` it inherits is coincidentally correct). +16. SDL clone is unpinned (`--depth 1` default branch) — pin a commit hash; and assert + `SDL_VIDEO_DRIVER_MALI 1` in the generated config after configure, else a failed + mali check silently produces a dummy-video SDL that "builds fine". +17. Minor: boot.sh `BINARY` sentinel uses `tail -1` (payload bytes could false-match — + `head -1` is safer); no `trap '' USR1` in the shim (stock `launcher.sh stop` sends + SIGUSR1); `LOG_PATH=/mnt/mmc/nextui-h700.log` grows unbounded on TF1 (truncate per + boot / move to TF2); `make PLATFORM=h700 shell` doesn't get the PLATFORM env + override that build targets got; `PLAT_getGPUSpeed()` hardcodes 660 MHz; + `PLAT_enableBacklight` doesn't drive `work_led` (plan 06 nicety); `SCREEN_FPS 60.0` + still needs per-panel measurement; settings.elf glib: sysroot version must be ≤ + device's 2.72 (verify once). + +## E. Done well (verified) + +- **Toolchain reuse** exactly per plan: `TOOLCHAIN_NAME=tg5040` override covers pull/ + clone/init/clean; PLATFORM/UNION_PLATFORM correctly forced into the container + (`PREFIX_LOCAL=/opt/nextui` is a fixed ENV — no tg5040 leakage); no tg5050/tg5040 + regression (additive filters only). +- **Custom SDL2 built and shipped**: SDL-malifbdev-rot with mali+ALSA only, installed + to PREFIX_LOCAL so `pkg-config sdl2` resolves to it; `libSDL2*` bundled to + `.system/h700/lib`; launch.sh sets lib-dir-first LD_LIBRARY_PATH and + `SDL_VIDEODRIVER=mali`. Matches plan 04. +- **Cores**: full 28-core tg5040 list, all 29 patches properly retargeted, picodrive + LTO fix correct, stock output names match packaging. +- **launch.sh**: zero trimui-isms; TF2 mount + `/mnt/SDCARD` compat symlink; DEVICE + detection consistent across launch.sh ↔ platform.c ↔ settings.cpp ("rg40xx"/ + "rg34xx"/"rg28xx"/"cube"); stock daemons killed; `nextui_exec` loop byte-compatible + with tg5040 conventions; systemd-native poweroff/reboot; debug-keep-network toggle. +- **suspend**: faithful tg5040 port — mem-write retry + false-negative workaround, + ALSA state save/restore, wifi/bt stop-before/start-after (covers the verified + "WiFi doesn't auto-recover" issue), hooks, `work_led` sleep indication. +- **governor.sh**: correct policy paths and sane mapping within probed 480–1512 MHz. +- **updater**: device-tree check ordered before the ambiguous `0xd03` case, zero28 + arm guarded — exactly per plan. +- **settings.cpp**: clean Anbernic vendor/model plumbing; colortemp/contrast/exposure/ + displaycal gates extended to h700; displaycal compiled into libmsettings ✔. +- **keymon**: correct codes (MENU 312/354 + SELECT 310 modifiers, vol 114/115), + repeat + sleep-gap handling, reads event0-2. +- **Lid support** (RG34XXSP) already implemented in platform.c via `hallkey` with + closed-lid wake gating. + +## Suggested fix order + +1. A1 (thermal zone), A3 (shouldWake fd), C10 (mountpoint guard), D13/D14 (deletions) — mechanical, do now. +2. C7 (installer flow) + C8 (wpa conf persistence) — before first real install. +3. First on-device boot: settle B4 (loadso), B5 (volume direction), A2 (jstest button map), B6 (libasound), C12 (dhclient). +4. Then: C9 (bluealsa decision), C11 (splash), D15-17 polish. diff --git a/docs/h700-port/10-branch-review-supplement.md b/docs/h700-port/10-branch-review-supplement.md new file mode 100644 index 000000000..9e15f422a --- /dev/null +++ b/docs/h700-port/10-branch-review-supplement.md @@ -0,0 +1,104 @@ +# 10 — h700 Branch Review Supplement (2026-07-08) + +Additive findings **not covered** in [09-branch-review.md](09-branch-review.md). +Use doc 09 as the primary review; this file only extends it. + +**Primary verdict (doc 09):** architecturally faithful to the plan and remarkably +complete for a first beta. This supplement records code-quality issues, validation +debt, and one factual correction to doc 09 §E. + +--- + +## Completion framing + +Doc 09's verdict stands: this is a **faithful, build-complete first beta**, not a +finished port. Against [08-testing-and-rollout.md](08-testing-and-rollout.md): + +- Phases 1–6 are largely implemented in tree +- **Phase 8** (full validation matrix) is entirely open +- **Phase 9** (RG28XX rotation) has not started +- No on-device parity testing is recorded yet + +--- + +## F. Additional findings (not in doc 09) + +**18. `scaleColortemp()` undefined behavior on bad input** — +[workspace/h700/libmsettings/msettings.c](../../workspace/h700/libmsettings/msettings.c): +the switch covers 0–40 but has no `default`; a corrupt settings value returns an +uninitialized `raw`. + +**19. Production debug logging in libmsettings** — `SetRawBrightness`, +`SetRawColortemp`, `SetRawDisplayCal`, `SetJack`, `SetAudioSink`, contrast/ +saturation/exposure all `printf` to stdout on every change. Will flood +`$LOGS_PATH/*.txt` on device; strip or gate behind a debug flag before beta. + +**20. `PLAT_setDateTime()` buffer overflow risk** — +[platform.c](../../workspace/h700/platform/platform.c) uses `sprintf(cmd, ...)` into +a 512-byte stack buffer; the governor path already uses `snprintf`. Align them. + +**21. `PLAT_getModel()` returns `getenv("RGXX_MODEL")` directly** — fragile if +anything retains the pointer across env changes. Low probability at runtime, but a +static copy would be safer. + +**22. HDMI hotplug never wired** — `GetHDMI()` / `SetHDMI()` are no-ops in h700 +`msettings.c`. [00-device-facts.md](00-device-facts.md) confirms +`/sys/class/extcon/hdmi/` exists; `hdmimon()` in minarch/nextui therefore never +fires. Affects HDMI-aware sleep, rumble skip (plan 03), and any HDMI UI. + +**23. `hasMuteToggle()` excludes h700** — [settings.cpp](../../workspace/all/settings/settings.cpp) +gates the FN-switch / mute-advanced UI to tg5040/tg5050 only. H700 has mute via `SPK` +mixer + `PLAT_overrideMute`; users won't see controls the hardware supports. + +**24. Post-resume display state not re-applied** — Plan 06 calls for re-applying +brightness + displaycal gamma LUT after wake (panel may clear LUT). No hook in +`suspend`, `launch.sh`, or a `post-resume.d` default script does this. + +**25. Suspend `after()` races the UI** — +[suspend](../../skeleton/SYSTEM/h700/bin/suspend) runs service restore (`after &`) in +background for wake latency. UI can resume before WiFi/BT are up — relevant for RA +login, Pak Store, settings WiFi pane immediately after wake. + +**26. muOS precedence is warn-only** — [boot.sh](../../workspace/h700/boot/boot.sh) +and [launch.sh](../../skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh) log/write +`stockmod-warning.txt` when `muos1.ini` is present but still boot NextUI. Plan 02 +flags this as a top risk; consider hard-failing or a blocking installer message. + +**27. systemd logind power-key conflict unaddressed** — Plan 06 says verify +`HandlePowerKey=ignore`; `launch.sh` doesn't configure logind. Risk of +double-handling with NextUI's power-key sleep/wake. + +**28. No TF2 filesystem recovery** — Plan 08 calls for a vfat `fsck.fat` hook +(MinUI.pak e2fsck equivalent). Not present in h700 skeleton. + +**29. RG28XX rotation still unimplemented** — Doc 09 D14 notes missing per-device emu +cfgs; worth stating explicitly: `is_rg28xx` is detected but there is no SDL rotation +env, no `PLAT_getDisplayRotation()` hook in `generic_video.c`, and no 480×640 panel +handling beyond logical 640×480. + +**30. 480p UI audit not started** — Plan 04's top risk (first 480p platform in ~2 +years): fonts, pills, quick switcher at 640×480. No evidence of a desktop or on-device +pass. + +**31. No user-facing install docs** — [skeleton/BASE/README.txt](../../skeleton/BASE/README.txt) +has no RG40XX / H700 / `dmenu.bin` section. Install flow exists in code but isn't +documented for end users. + +**32. Correction to doc 09 §E ("suspend")** — §E claims "ALSA state save/restore." +The script **saves** in `before()` but **restore is commented out** in `after()` +(lines 58–60). Save-only is accurate; full restore is not implemented. + +--- + +## G. Suggested additions to doc 09 fix order + +Doc 09's sequence is good. Slot these in: + +| When | Items | +|---|---| +| Before first boot (mechanical) | #18 (`scaleColortemp` default), #19 (strip debug prints) | +| With C7/C8 (installer + WiFi) | #24 (post-resume displaycal/brightness hook) | +| First on-device session | #22 (HDMI extcon probe), #23 (mute UI gate decision), #25 (post-wake WiFi race) | +| Before any public beta | #29–31 (rotation, 480p UI, README) | + +Do **not** re-litigate doc 09 items A1–D17 here — they remain the priority queue. \ No newline at end of file diff --git a/makefile.toolchain b/makefile.toolchain index 95d28ec7e..45ffed8b5 100644 --- a/makefile.toolchain +++ b/makefile.toolchain @@ -33,7 +33,7 @@ LAST_RUNTIME := $(shell cat $(RUNTIME_MARKER) 2>/dev/null) CURRENT_RUNTIME := $(notdir $(CONTAINER_RUNTIME)) all: $(INIT_IF_NECESSARY) - $(CONTAINER_RUNTIME) run -it --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) $(IMAGE_NAME) /bin/bash + $(CONTAINER_RUNTIME) run -it --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -lc 'export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM); cd $(GUEST_WORKSPACE); exec /bin/bash' $(INIT_IF_NECESSARY): $(GIT_IF_NECESSARY) cd toolchains/$(TOOLCHAIN_NAME)-toolchain && make .build diff --git a/skeleton/BASE/README.txt b/skeleton/BASE/README.txt index 5f6b965bd..ccfee2733 100644 --- a/skeleton/BASE/README.txt +++ b/skeleton/BASE/README.txt @@ -36,6 +36,14 @@ TRIMUI SMART PRO / TRIMUI BRICK Copy the "trimui" folder and "MinUI.zip" (without unzipping) to the root of the SD card. +ANBERNIC RG XX H700 (BETA) + +For RG40XXV/RG40XXH-style two-card stock OS setups, copy "MinUI.zip" (without unzipping) to the root of the TF2 card that contains your Roms. + +Then copy "h700/dmenu.bin" to the root of the stock TF1 card's user-visible ROMs partition. Removing that "dmenu.bin" file uninstalls the boot hijack and returns the device to stock boot. + +If your stock card has a stockmod or muOS boot selector, choose the stock frontend target before testing NextUI. muOS override files can prevent the stock dmenu hijack from running. + MIYOO FLIP Copy the "miyoo355" folder and "MinUI.zip" (without unzipping) to the root of the SD card. Put the SD card into the right slot (beneath the power button). diff --git a/skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg deleted file mode 100644 index 9b87cb236..000000000 --- a/skeleton/EXTRAS/Emus/h700/CPC.pak/default-brick.cfg +++ /dev/null @@ -1,2 +0,0 @@ -minarch_screen_scaling = Aspect - diff --git a/skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg deleted file mode 100644 index af5d06f3f..000000000 --- a/skeleton/EXTRAS/Emus/h700/FBN.pak/default-brick.cfg +++ /dev/null @@ -1,15 +0,0 @@ --fbneo-vertical-mode = disabled -bind Up = UP -bind Down = DOWN -bind Left = LEFT -bind Right = RIGHT -bind Select = SELECT -bind Start = START -bind X Button = X -bind Y Button = Y -bind B Button = B -bind A Button = A -bind L1 Button = L1 -bind L2 Button = L2 -bind R1 Button = R1 -bind R2 Button = R2 diff --git a/skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg deleted file mode 100644 index d4d18b9c2..000000000 --- a/skeleton/EXTRAS/Emus/h700/PUAE.pak/default-brick.cfg +++ /dev/null @@ -1,47 +0,0 @@ -minarch_screen_scaling = Aspect -minarch__resampling_quality = Low -minarch_ambient = Off -minarch_screen_effect = None -minarch_screen_sharpness = Crisp -minarch_sync_reference = Auto -minarch_cpu_speed = Performance -minarch_thread_video = Off -minarch_max_ff_speed = 4x -puae_model_options_display = disabled -puae_model_fd = A500 -puae_model_hd = A1200 -puae_model_cd = CD32 -puae_cpu_throttle = 0.0 -puae_cpu_multiplier = 0 -puae_cpu_compatibility = normal -puae_autoloadfastforward = disabled -puae_floppy_speed = 100 -puae_floppy_multidrive = enabled -puae_floppy_write_protection = disabled -puae_floppy_write_redirect = disabled -puae_shared_nvram = disabled -puae_use_boot_hd = disabled -puae_cart_file = none -puae_video_allow_hz_change = locked -puae_video_standard = PAL auto -puae_video_aspect = auto -puae_video_resolution = lores -puae_video_vresolution = auto -puae_crop = auto -puae_crop_mode = horizontal -puae_crop_delay = disabled -puae_vertical_pos = auto -puae_horizontal_pos = auto -puae_immediate_blits = waiting -puae_collision_level = playfields -puae_gfx_flickerfixer = disabled -puae_gfx_framerate = disabled -puae_gfx_gamma = 0 -puae_gfx_colors = 16bit -puae_sound_stereo_separation = 100% -puae_sound_interpol = anti -puae_sound_filter = emulated -puae_sound_filter_type = auto -puae_floppy_sound = 100 -puae_floppy_sound_empty_mute = disabled -puae_floppy_sound_type = internal diff --git a/skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg b/skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg deleted file mode 100644 index dcf767317..000000000 --- a/skeleton/EXTRAS/Emus/h700/VB.pak/default-brick.cfg +++ /dev/null @@ -1,21 +0,0 @@ -minarch_screen_scaling = Aspect -minarch_cpu_speed = Performance - --vb_3dmode = anaglyph --vb_right_analog_to_digital = disabled - -bind L. Up = UP -bind L. Down = DOWN -bind L. Left = LEFT -bind L. Right = RIGHT -bind Select = SELECT -bind Start = START -bind A = A -bind B = B -bind L Button = L1 -bind R Button = R1 -bind Low Battery = NONE:X -bind R. Up = NONE:L2 -bind R. Down = NONE:L3 -bind R. Left = NONE:R2 -bind R. Right = NONE:R3 diff --git a/skeleton/SYSTEM/h700/bin/reboot_next b/skeleton/SYSTEM/h700/bin/reboot_next deleted file mode 100755 index 4abd2b41c..000000000 --- a/skeleton/SYSTEM/h700/bin/reboot_next +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh - -# Function to terminate all non-essential processes -task_killer() { - for pid in /proc/[0-9]*; do - pid=$(basename "$pid") - - # Ignore critical processes and the script's own process - if [ "$pid" != "1" ] && [ "$pid" != "$$" ]; then - kill $1 "$pid" 2>/dev/null - fi - done -} - -# Attempt graceful shutdown of processes -kill_all_processes() { - echo "Attempting to gracefully shut down processes..." - task_killer -TERM - sleep 0.5 # Wait to allow processes to terminate gracefully - - # Forcefully kill any remaining processes - echo "Forcing termination of remaining processes..." - task_killer -KILL -} - -# Close all possible processes before rebooting -kill_all_processes - -# Synchronize data with storage to minimize data corruption risks -sync - -# Unmount sdcard -swapoff -a -umount -f /etc/profile -umount -l /mnt/SDCARD - -# Shutdown the system -echo "Rebooting the system..." -busybox reboot \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/bin/suspend b/skeleton/SYSTEM/h700/bin/suspend index 2be85b735..0b4103a32 100755 --- a/skeleton/SYSTEM/h700/bin/suspend +++ b/skeleton/SYSTEM/h700/bin/suspend @@ -42,8 +42,15 @@ after() { >&2 echo "Resumed from suspend." echo 0 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true - # Run post-resume hooks in background immediately after wake. - ( "$SYSTEM_PATH/bin/run_hooks.sh" post-resume.d ) >/dev/null 2>&1 & + if [ -f "$asound_state_dir/asound.state.pre" ]; then + >&2 echo "Restoring mixer state..." + alsactl --file "$asound_state_dir/asound.state.pre" restore || true + fi + + if [ -x "$SYSTEM_PATH/bin/syncsettings.elf" ]; then + >&2 echo "Restoring display settings..." + "$SYSTEM_PATH/bin/syncsettings.elf" || true + fi if [ -n "$wifid_running" ]; then >&2 echo "Starting wpa_supplicant..." @@ -55,9 +62,8 @@ after() { "$SYSTEM_PATH/etc/bluetooth/bt_init.sh" start || true fi - # >&2 echo "Restoring mixer state..." - # alsactl --file "$asound_state_dir/asound.state.post" store || true - # alsactl --file "$asound_state_dir/asound.state.pre" restore || true + # Run post-resume hooks after core services and display state are restored. + ( "$SYSTEM_PATH/bin/run_hooks.sh" post-resume.d ) >/dev/null 2>&1 & } before @@ -97,7 +103,6 @@ for i in $(seq 1 $sleep_max_tries); do sleep 3 done -# Resume services in background to reduce UI latency -after & +after exit $sleep_retval diff --git a/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh b/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh index ebf8f7910..c679b287e 100755 --- a/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh +++ b/skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh @@ -1,12 +1,16 @@ #!/bin/sh WIFI_INTERFACE="${WIFI_INTERFACE:-wlan0}" -WIFI_DIR="/tmp/wifi" -WIFI_SOCK_DIR="$WIFI_DIR/sockets" -WPA_SUPPLICANT_CONF="$WIFI_DIR/wpa_supplicant.conf" +SDCARD_PATH="${SDCARD_PATH:-/mnt/SDCARD}" +USERDATA_PATH="${USERDATA_PATH:-$SDCARD_PATH/.userdata/h700}" +WIFI_STATE_DIR="$USERDATA_PATH/wifi" +WIFI_RUNTIME_DIR="/tmp/wifi" +WIFI_SOCK_DIR="$WIFI_RUNTIME_DIR/sockets" +WPA_SUPPLICANT_CONF="$WIFI_STATE_DIR/wpa_supplicant.conf" +WPA_ACTION_SCRIPT="$WIFI_RUNTIME_DIR/wpa_action.sh" write_default_config() { - mkdir -p "$WIFI_SOCK_DIR" + mkdir -p "$WIFI_STATE_DIR" "$WIFI_SOCK_DIR" if [ ! -f "$WPA_SUPPLICANT_CONF" ]; then cat > "$WPA_SUPPLICANT_CONF" << EOF ctrl_interface=$WIFI_SOCK_DIR @@ -18,6 +22,35 @@ EOF fi } +write_action_script() { + mkdir -p "$WIFI_RUNTIME_DIR" + cat > "$WPA_ACTION_SCRIPT" << 'EOF' +#!/bin/sh + +IFACE="$1" +EVENT="$2" + +case "$EVENT" in + CONNECTED) + if command -v dhclient >/dev/null 2>&1; then + dhclient -r "$IFACE" >/dev/null 2>&1 || true + dhclient -nw "$IFACE" >/dev/null 2>&1 || true + elif command -v udhcpc >/dev/null 2>&1; then + killall udhcpc 2>/dev/null || true + udhcpc -i "$IFACE" -b >/dev/null 2>&1 || true + fi + ;; + DISCONNECTED) + if command -v dhclient >/dev/null 2>&1; then + dhclient -r "$IFACE" >/dev/null 2>&1 || true + fi + killall udhcpc 2>/dev/null || true + ;; +esac +EOF + chmod +x "$WPA_ACTION_SCRIPT" +} + start_dhcp() { if command -v dhclient >/dev/null 2>&1; then dhclient -nw "$WIFI_INTERFACE" >/dev/null 2>&1 || true @@ -35,17 +68,23 @@ stop_dhcp() { start() { systemctl stop NetworkManager 2>/dev/null || true + systemctl stop wpa_supplicant "wpa_supplicant@$WIFI_INTERFACE.service" 2>/dev/null || true rfkill.elf unblock wifi 2>/dev/null || rfkill unblock wifi 2>/dev/null || true ip link set "$WIFI_INTERFACE" up 2>/dev/null || true write_default_config + write_action_script + killall wpa_cli 2>/dev/null || true killall wpa_supplicant 2>/dev/null || true wpa_supplicant -B -i "$WIFI_INTERFACE" -c "$WPA_SUPPLICANT_CONF" -C "$WIFI_SOCK_DIR" >/dev/null 2>&1 + wpa_cli -B -p "$WIFI_SOCK_DIR" -i "$WIFI_INTERFACE" -a "$WPA_ACTION_SCRIPT" >/dev/null 2>&1 || true start_dhcp } stop() { wpa_cli -p "$WIFI_SOCK_DIR" -i "$WIFI_INTERFACE" terminate >/dev/null 2>&1 || true + killall wpa_cli 2>/dev/null || true + systemctl stop wpa_supplicant "wpa_supplicant@$WIFI_INTERFACE.service" 2>/dev/null || true killall wpa_supplicant 2>/dev/null || true stop_dhcp ip link set "$WIFI_INTERFACE" down 2>/dev/null || true diff --git a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg deleted file mode 100644 index 90365a9d1..000000000 --- a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/default-brick.cfg +++ /dev/null @@ -1,20 +0,0 @@ -fceumm_sndquality = High -fceumm_sndvolume = 10 --fceumm_aspect = 8:7 PAR --fceumm_turbo_enable = Player 1 --fceumm_show_adv_system_options = disabled --fceumm_show_adv_sound_options = disabled - -bind Up = UP -bind Down = DOWN -bind Left = LEFT -bind Right = RIGHT -bind Select = SELECT -bind Start = START -bind A Button = A -bind B Button = B -bind A Turbo = NONE:X -bind B Turbo = NONE:Y -bind Change Disk = NONE:L1 -bind Insert Disk = NONE:R1 -bind Insert Coin = NONE:R2 diff --git a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg deleted file mode 100644 index 2f461d026..000000000 --- a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default-brick.cfg +++ /dev/null @@ -1,23 +0,0 @@ --pcsx_rearmed_display_internal_fps = disabled --pcsx_rearmed_show_input_settings = disabled -pcsx_rearmed_dithering = enabled -minarch_rewind_buffer_mb = 128 -minarch_rewind_granularity = 33 -minarch_rewind_compression_speed = 12 -minarch_rewind_compression = On - -minarch_gamepad_type = 1 -bind Up = UP -bind Down = DOWN -bind Left = LEFT -bind Right = RIGHT -bind Select = SELECT -bind Start = START -bind Circle = A -bind Cross = B -bind Triangle = X -bind Square = Y -bind L1 Button = L1 -bind R1 Button = R1 -bind L2 Button = L2 -bind R2 Button = R2 \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg deleted file mode 100644 index 8100f20a1..000000000 --- a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/default-brick.cfg +++ /dev/null @@ -1,12 +0,0 @@ -bind Up = UP -bind Down = DOWN -bind Left = LEFT -bind Right = RIGHT -bind Select = SELECT -bind Start = START -bind Y Button = Y -bind X Button = X -bind B Button = B -bind A Button = A -bind L Button = L1 -bind R Button = R1 \ No newline at end of file diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 5ff5afd22..2086a4463 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -10,8 +10,12 @@ if ! mountpoint -q "$REAL_SDCARD_PATH"; then mount -t vfat -o rw,utf8,noatime /dev/mmcblk1p1 "$REAL_SDCARD_PATH" 2>/dev/null || true fi -if [ ! -e "$COMPAT_SDCARD_PATH" ]; then - ln -s "$REAL_SDCARD_PATH" "$COMPAT_SDCARD_PATH" 2>/dev/null || true +if ! mountpoint -q "$COMPAT_SDCARD_PATH" && [ ! -L "$COMPAT_SDCARD_PATH" ]; then + if [ -e "$COMPAT_SDCARD_PATH" ]; then + mount --bind "$REAL_SDCARD_PATH" "$COMPAT_SDCARD_PATH" 2>/dev/null || true + else + ln -s "$REAL_SDCARD_PATH" "$COMPAT_SDCARD_PATH" 2>/dev/null || true + fi fi export SDCARD_PATH="$COMPAT_SDCARD_PATH" @@ -31,10 +35,46 @@ DEBUG_KEEP_NETWORK_PATH="$USERDATA_PATH/debug-keep-network" LAUNCH_LOG="$LOGS_PATH/launch.txt" export PATH="$SYSTEM_PATH/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" -export LD_LIBRARY_PATH="$SYSTEM_PATH/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" +export LD_LIBRARY_PATH="$SYSTEM_PATH/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" export SDL_VIDEODRIVER="mali" export SDL_AUDIODRIVER="alsa" +for egl_path in /usr/lib/libEGL.so /usr/lib/libEGL.so.1 /usr/lib/libEGL.so.1.4.0 /usr/lib/aarch64-linux-gnu/libEGL.so /usr/lib/aarch64-linux-gnu/libEGL.so.1; do + if [ -e "$egl_path" ]; then + export SDL_VIDEO_EGL_DRIVER="$egl_path" + break + fi +done +for gles_path in /usr/lib/libGLESv2.so /usr/lib/libGLESv2.so.2 /usr/lib/libGLESv2.so.2.1.0 /usr/lib/aarch64-linux-gnu/libGLESv2.so /usr/lib/aarch64-linux-gnu/libGLESv2.so.2; do + if [ -e "$gles_path" ]; then + export SDL_VIDEO_GL_DRIVER="$gles_path" + break + fi +done + +start_debug_network() { + echo "launch: starting stock network services for debug" >> "$LAUNCH_LOG" + rfkill.elf unblock wifi >> "$LAUNCH_LOG" 2>&1 || rfkill unblock wifi >> "$LAUNCH_LOG" 2>&1 || true + systemctl start NetworkManager >> "$LAUNCH_LOG" 2>&1 || true + nmcli networking on >> "$LAUNCH_LOG" 2>&1 || true + nmcli radio wifi on >> "$LAUNCH_LOG" 2>&1 || true + systemctl start ssh >> "$LAUNCH_LOG" 2>&1 || + systemctl start sshd >> "$LAUNCH_LOG" 2>&1 || + /usr/sbin/sshd >> "$LAUNCH_LOG" 2>&1 || + true + sleep 2 + ip addr show >> "$LAUNCH_LOG" 2>&1 || true +} + +log_runtime_state() { + echo "launch: runtime state $(date)" >> "$LAUNCH_LOG" + echo "launch: DEVICE=$DEVICE RGXX_MODEL=$RGXX_MODEL" >> "$LAUNCH_LOG" + echo "launch: LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> "$LAUNCH_LOG" + ldd "$SYSTEM_PATH/bin/nextui.elf" >> "$LAUNCH_LOG" 2>&1 || true + ldd "$SYSTEM_PATH/lib/libSDL2-2.0.so.0" >> "$LAUNCH_LOG" 2>&1 || true + ls -l /usr/lib/libEGL.so* /usr/lib/libGLESv2.so* /usr/lib/aarch64-linux-gnu/libEGL.so* /usr/lib/aarch64-linux-gnu/libGLESv2.so* "$SYSTEM_PATH/lib"/libUMP.so* >> "$LAUNCH_LOG" 2>&1 || true +} + if [ -f "/tmp/poweroff" ]; then poweroff exit 0 @@ -55,7 +95,11 @@ case "$RGXX_MODEL" in RGcubexx) export DEVICE="cube" ;; *) export DEVICE="rg40xx" ;; esac +if [ "$DEVICE" = "rg28xx" ]; then + export SDL_ROTATION="${SDL_ROTATION:-1}" +fi export IS_NEXT="yes" +log_runtime_state if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then echo "stockmod muOS override files are present; stock boot target must be selected for TF1 dmenu.bin autoboot." > "$LOGS_PATH/stockmod-warning.txt" @@ -63,13 +107,21 @@ fi killall brightCtrl.bin cexpert 2>/dev/null || true if [ -f "$DEBUG_KEEP_NETWORK_PATH" ]; then - echo "launch: keeping stock network services for debug" >> "$LAUNCH_LOG" + start_debug_network else systemctl stop NetworkManager 2>/dev/null || true fi -loginctl show-logind >/dev/null 2>&1 && mkdir -p /run/systemd/system 2>/dev/null || true +if loginctl show-logind >/dev/null 2>&1; then + mkdir -p /run/systemd/logind.conf.d /run/systemd/system 2>/dev/null || true + cat > /run/systemd/logind.conf.d/nextui-h700.conf << EOF +[Login] +HandlePowerKey=ignore +HandlePowerKeyLongPress=ignore +EOF + systemctl restart systemd-logind 2>/dev/null || true +fi -if [ -f "$SYSTEM_PATH/dat/dmenu.bin" ] && [ -d /mnt/mmc ]; then +if [ -f "$SYSTEM_PATH/dat/dmenu.bin" ] && mountpoint -q /mnt/mmc; then if ! cmp -s "$SYSTEM_PATH/dat/dmenu.bin" /mnt/mmc/dmenu.bin 2>/dev/null; then cp "$SYSTEM_PATH/dat/dmenu.bin" /mnt/mmc/dmenu.bin 2>/dev/null || true sync @@ -129,11 +181,24 @@ parse_hook_cmd() { EXEC_PATH="/tmp/nextui_exec" NEXT_PATH="/tmp/next" +CRASH_COUNT=0 touch "$EXEC_PATH" && sync while [ -f "$EXEC_PATH" ]; do echo "launch: starting nextui.elf $(date)" >> "$LAUNCH_LOG" nextui.elf > "$LOGS_PATH/nextui.txt" 2>&1 - echo "launch: nextui.elf exited $? $(date)" >> "$LAUNCH_LOG" + EXIT_CODE=$? + echo "launch: nextui.elf exited $EXIT_CODE $(date)" >> "$LAUNCH_LOG" + if [ "$EXIT_CODE" != "0" ]; then + CRASH_COUNT=$((CRASH_COUNT + 1)) + if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] && [ "$CRASH_COUNT" -ge 5 ]; then + echo "launch: debug crash limit reached; keeping system up" >> "$LAUNCH_LOG" + rm -f "$EXEC_PATH" + sleep 300 + continue + fi + else + CRASH_COUNT=0 + fi sh "$SYSTEM_PATH/bin/governor.sh" "performance" if [ -f "$NEXT_PATH" ]; then diff --git a/skeleton/SYSTEM/h700/system-brick.cfg b/skeleton/SYSTEM/h700/system-brick.cfg deleted file mode 100644 index 3a0888cc5..000000000 --- a/skeleton/SYSTEM/h700/system-brick.cfg +++ /dev/null @@ -1,19 +0,0 @@ -minarch_screen_scaling = Aspect -minarch_nrofshaders = 0 -minarch_shader1 = stock.glsl -minarch_shader1_filter = NEAREST -minarch_shader1_srctype = source -minarch_shader1_scaletype = source -minarch_shader1_upscale = 2 -minarch_shader2 = stock.glsl -minarch_shader2_filter = LINEAR -minarch_shader2_srctype = relative -minarch_shader2_scaletype = relative -minarch_shader2_upscale = 1 -minarch_shader3 = stock.glsl -minarch_shader3_filter = NEAREST -minarch_shader3_srctype = source -minarch_shader3_scaletype = source -minarch_shader3_upscale = screen -minarch_scale_filter = NEAREST --minarch_thread_video = Off diff --git a/workspace/all/audiomon/audiomon.cpp b/workspace/all/audiomon/audiomon.cpp index 6fafd66f7..8e70c961b 100644 --- a/workspace/all/audiomon/audiomon.cpp +++ b/workspace/all/audiomon/audiomon.cpp @@ -39,6 +39,17 @@ void log(const std::string& msg) { else std::cout << msg << std::endl; } +bool commandExists(const char *command) { + std::string cmd = "command -v "; + cmd += command; + cmd += " >/dev/null 2>&1"; + return std::system(cmd.c_str()) == 0; +} + +bool bluetoothAudioAvailable() { + return commandExists("bluealsa"); +} + void ensureDirExists(const std::string& path) { mkdir(path.c_str(), 0755); } @@ -202,6 +213,10 @@ bool hasUUID(DBusConnection* conn, const std::string& path, const std::string& u void handleDeviceConnected(DBusConnection* conn, const std::string& path) { std::string mac = pathToMac(path); if (hasUUID(conn, path, UUID_A2DP)) { + if (!bluetoothAudioAvailable()) { + log("Audio device connected but bluealsa is unavailable: " + mac); + return; + } log("Audio device connected: " + mac); writeAudioFile(mac, DEVICE_BLUETOOTH); SetAudioSink(AUDIO_SINK_BLUETOOTH); diff --git a/workspace/all/common/generic_video.c b/workspace/all/common/generic_video.c index 00cb0cbf8..56b4b5e24 100644 --- a/workspace/all/common/generic_video.c +++ b/workspace/all/common/generic_video.c @@ -615,7 +615,10 @@ SDL_Surface* PLAT_initVideo(void) { #endif SDL_LogSetOutputFunction(sdl_log_stdout, NULL); //SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE); - SDL_InitSubSystem(SDL_INIT_VIDEO); + if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { + LOG_error("SDL_InitSubSystem(SDL_INIT_VIDEO) failed: %s\n", SDL_GetError()); + exit(1); + } SDL_ShowCursor(0); // SDL_version compiled; @@ -654,7 +657,15 @@ SDL_Surface* PLAT_initVideo(void) { SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION,"1"); vid.window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w,h, SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN); + if (!vid.window) { + LOG_error("SDL_CreateWindow failed: %s\n", SDL_GetError()); + exit(1); + } vid.renderer = SDL_CreateRenderer(vid.window,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC); + if (!vid.renderer) { + LOG_error("SDL_CreateRenderer failed: %s\n", SDL_GetError()); + exit(1); + } SDL_SetRenderDrawBlendMode(vid.renderer, SDL_BLENDMODE_BLEND); SDL_RendererInfo info; SDL_GetRendererInfo(vid.renderer, &info); @@ -677,6 +688,10 @@ SDL_Surface* PLAT_initVideo(void) { } vid.gl_context = SDL_GL_CreateContext(vid.window); + if (!vid.gl_context) { + LOG_error("SDL_GL_CreateContext failed: %s\n", SDL_GetError()); + exit(1); + } SDL_GL_MakeCurrent(vid.window, vid.gl_context); glViewport(0, 0, w, h); diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index f4fd55f09..a41e07469 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -334,7 +334,7 @@ namespace { } bool hasMuteToggle() const { - return m_platform == tg5050 || m_platform == tg5040; + return m_platform == tg5050 || m_platform == tg5040 || m_platform == h700; } bool hasAnalogSticks() const { diff --git a/workspace/all/syncsettings/syncsettings.c b/workspace/all/syncsettings/syncsettings.c index 2bf4c5934..e0410705f 100644 --- a/workspace/all/syncsettings/syncsettings.c +++ b/workspace/all/syncsettings/syncsettings.c @@ -8,5 +8,14 @@ int main (int argc, char *argv[]) { sleep(1); SetVolume(GetVolume()); SetBrightness(GetBrightness()); + SetColortemp(GetColortemp()); + SetContrast(GetContrast()); + SetSaturation(GetSaturation()); + SetExposure(GetExposure()); + SetRawDisplayCal( + GetDisplayCalEnabled(), + GetDisplayCalRedGain(), + GetDisplayCalGreenGain(), + GetDisplayCalBlueGain()); return 0; } diff --git a/workspace/h700/boot/boot.sh b/workspace/h700/boot/boot.sh index da7cfa551..9d58cbd92 100755 --- a/workspace/h700/boot/boot.sh +++ b/workspace/h700/boot/boot.sh @@ -6,12 +6,26 @@ COMPAT_PATH=/mnt/SDCARD PLATFORM=h700 SYSTEM_PATH="$TF2_PATH/.system/$PLATFORM" UPDATE_PATH="$TF2_PATH/MinUI.zip" -LOG_PATH="$TF1_PATH/nextui-h700.log" +LOG_PATH=/tmp/nextui-h700.log + +trap '' USR1 + +if mountpoint -q "$TF1_PATH"; then + LOG_PATH="$TF1_PATH/nextui-h700.log" +fi +: > "$LOG_PATH" 2>/dev/null || true log() { echo "$@" >> "$LOG_PATH" 2>/dev/null || true } +has_pakz() { + for pakz in "$TF2_PATH"/*.pakz; do + [ -e "$pakz" ] && return 0 + done + return 1 +} + mount_tf2() { mkdir -p "$TF2_PATH" if mountpoint -q "$TF2_PATH"; then @@ -22,8 +36,28 @@ mount_tf2() { mount -o rw,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null } +repair_tf2() { + FSTYPE=$(blkid -o value -s TYPE /dev/mmcblk1p1 2>/dev/null) + case "$FSTYPE" in + vfat|msdos|fat) + command -v fsck.fat >/dev/null 2>&1 && fsck.fat -a /dev/mmcblk1p1 >> "$LOG_PATH" 2>&1 || true + ;; + exfat) + command -v fsck.exfat >/dev/null 2>&1 && fsck.exfat -a /dev/mmcblk1p1 >> "$LOG_PATH" 2>&1 || true + ;; + esac +} + ensure_compat_path() { - if [ ! -e "$COMPAT_PATH" ]; then + if mountpoint -q "$COMPAT_PATH"; then + return 0 + fi + if [ -L "$COMPAT_PATH" ]; then + return 0 + fi + if [ -e "$COMPAT_PATH" ]; then + mount --bind "$TF2_PATH" "$COMPAT_PATH" 2>/dev/null || true + else ln -s "$TF2_PATH" "$COMPAT_PATH" 2>/dev/null || true fi } @@ -33,7 +67,7 @@ extract_payload() { return 0 fi - LINE=$(($(grep -na '^BINARY' "$0" | cut -d ':' -f 1 | tail -1) + 1)) + LINE=$(($(grep -na '^BINARY' "$0" | cut -d ':' -f 1 | head -1) + 1)) tail -n +"$LINE" "$0" > /tmp/nextui-h700-data.tar.gz mkdir -p /tmp/nextui-h700 if ! tar -xzf /tmp/nextui-h700-data.tar.gz -C /tmp/nextui-h700 >> "$LOG_PATH" 2>&1; then @@ -72,6 +106,10 @@ if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then log "stockmod muOS override is present; NextUI requires the stock boot target" fi +if ! mount_tf2; then + repair_tf2 +fi + if ! mount_tf2; then log "TF2 mount failed" fallback_stock @@ -81,22 +119,23 @@ ensure_compat_path if [ -f "$UPDATE_PATH" ]; then log "install/update zip detected" - UNZIP_CMD=$(find_unzip) - if [ -z "$UNZIP_CMD" ]; then - log "unzip helper unavailable" - fallback_stock - fi - if ! "$UNZIP_CMD" -o "$UPDATE_PATH" -d "$TF2_PATH" >> "$LOG_PATH" 2>&1; then - log "MinUI.zip extraction failed" - fallback_stock + if [ ! -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ]; then + UNZIP_CMD=$(find_unzip) + if [ -z "$UNZIP_CMD" ]; then + log "unzip helper unavailable" + fallback_stock + fi + if ! "$UNZIP_CMD" -o "$UPDATE_PATH" ".tmp_update/*" -d "$TF2_PATH" >> "$LOG_PATH" 2>&1; then + log "updater bootstrap extraction failed" + fallback_stock + fi fi - rm -f "$UPDATE_PATH" +fi - if [ -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ]; then - "$TF2_PATH/.tmp_update/$PLATFORM.sh" >> "$LOG_PATH" 2>&1 - elif [ -x "$SYSTEM_PATH/bin/install.sh" ]; then - "$SYSTEM_PATH/bin/install.sh" >> "$LOG_PATH" 2>&1 - fi +if [ -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ] && { [ -f "$UPDATE_PATH" ] || has_pakz; }; then + "$TF2_PATH/.tmp_update/$PLATFORM.sh" >> "$LOG_PATH" 2>&1 +elif [ -x "$SYSTEM_PATH/bin/install.sh" ] && [ -f "$UPDATE_PATH" ]; then + "$SYSTEM_PATH/bin/install.sh" >> "$LOG_PATH" 2>&1 fi if [ -x "$SYSTEM_PATH/paks/MinUI.pak/launch.sh" ]; then diff --git a/workspace/h700/install/boot.sh b/workspace/h700/install/boot.sh index fe3631409..a89ba0d55 100755 --- a/workspace/h700/install/boot.sh +++ b/workspace/h700/install/boot.sh @@ -8,11 +8,15 @@ UPDATE_PATH="$SDCARD_PATH/MinUI.zip" PAKZ_PATH="$SDCARD_PATH/*.pakz" SYSTEM_PATH="$SDCARD_PATH/.system" -if [ ! -e "$SDCARD_PATH" ]; then - ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true +if ! mountpoint -q "$SDCARD_PATH" && [ ! -L "$SDCARD_PATH" ]; then + if [ -e "$SDCARD_PATH" ]; then + mount --bind "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true + else + ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true + fi fi -export LD_LIBRARY_PATH="$SYSTEM_PATH/$PLATFORM/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" +export LD_LIBRARY_PATH="$SYSTEM_PATH/$PLATFORM/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" export PATH="$SYSTEM_PATH/$PLATFORM/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" cd "$(dirname "$0")/$PLATFORM" || exit 1 diff --git a/workspace/h700/install/update.sh b/workspace/h700/install/update.sh index 53a012cac..46cc35c18 100755 --- a/workspace/h700/install/update.sh +++ b/workspace/h700/install/update.sh @@ -6,13 +6,17 @@ SYSTEM_PATH="$SDCARD_PATH/.system/h700" TF1_DMENU="/mnt/mmc/dmenu.bin" TF2_DMENU="$SYSTEM_PATH/dat/dmenu.bin" -if [ ! -e "$SDCARD_PATH" ]; then - ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true +if ! mountpoint -q "$SDCARD_PATH" && [ ! -L "$SDCARD_PATH" ]; then + if [ -e "$SDCARD_PATH" ]; then + mount --bind "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true + else + ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true + fi fi mkdir -p "$SYSTEM_PATH/dat" -if [ -f "$TF2_DMENU" ] && [ -d /mnt/mmc ]; then +if [ -f "$TF2_DMENU" ] && mountpoint -q /mnt/mmc; then if ! cmp -s "$TF2_DMENU" "$TF1_DMENU" 2>/dev/null; then cp "$TF2_DMENU" "$TF1_DMENU" 2>/dev/null || true sync diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index c4b1c15d7..0575e4024 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -625,6 +625,12 @@ int GetAudioSink(void) { } int GetHDMI(void) { + if (getInt("/sys/class/extcon/hdmi/state") > 0) + return 1; + if (getInt("/sys/class/extcon/hdmi/cable.0/state") > 0) + return 1; + if (getInt("/sys/class/extcon/hdmi/cable.1/state") > 0) + return 1; return 0; }; @@ -782,20 +788,16 @@ void SetVolume(int value) // 0-20 } // monitored and set by thread in keymon void SetJack(int value) { - printf("SetJack(%i)\n", value); fflush(stdout); - settings->jack = value; SetVolume(GetVolume()); } // monitored and set by thread in audiomon void SetAudioSink(int value) { - printf("SetAudioSink(%i)\n", value); fflush(stdout); - settings->audiosink = value; SetVolume(GetVolume()); } -void SetHDMI(int value){}; +void SetHDMI(int value){} void SetMute(int value) { settings->mute = value; @@ -1015,6 +1017,7 @@ int scaleColortemp(int value) { case 38: raw=180; break; // 24 case 39: raw=190; break; // 32 case 40: raw=200; break; // 32 + default: raw=0; break; } return raw; } @@ -1033,6 +1036,7 @@ int scaleContrast(int value) { case 3: raw=80; break; case 4: raw=90; break; case 5: raw=100; break; + default: raw=50; break; } return raw; } @@ -1051,6 +1055,7 @@ int scaleSaturation(int value) { case 3: raw=80; break; case 4: raw=90; break; case 5: raw=100; break; + default: raw=50; break; } return raw; } @@ -1069,6 +1074,7 @@ int scaleExposure(int value) { case 3: raw=80; break; case 4: raw=90; break; case 5: raw=100; break; + default: raw=50; break; } return raw; } @@ -1077,8 +1083,6 @@ int scaleExposure(int value) { #define DISP_LCD_SET_BRIGHTNESS 0x102 void SetRawBrightness(int val) { // 0 - 255 - printf("SetRawBrightness(%i)\n", val); fflush(stdout); - int fd = open("/dev/disp", O_RDWR); if (fd >= 0) { unsigned long param[4]={0,val,0,0}; @@ -1087,8 +1091,6 @@ void SetRawBrightness(int val) { // 0 - 255 } } void SetRawColortemp(int val) { // 0 - 255 - printf("SetRawColortemp(%i)\n", val); fflush(stdout); - FILE *fd = fopen("/sys/class/disp/disp/attr/color_temperature", "w"); if (fd) { fprintf(fd, "%i", val); @@ -1262,8 +1264,6 @@ void SetRawVolume(int val) { // in: 0-100 } void SetRawContrast(int val){ - printf("SetRawContrast(%i)\n", val); fflush(stdout); - FILE *fd = fopen("/sys/class/disp/disp/attr/enhance_contrast", "w"); if (fd) { fprintf(fd, "%i", val); @@ -1271,8 +1271,6 @@ void SetRawContrast(int val){ } } void SetRawSaturation(int val){ - printf("SetRawSaturation(%i)\n", val); fflush(stdout); - FILE *fd = fopen("/sys/class/disp/disp/attr/enhance_saturation", "w"); if (fd) { fprintf(fd, "%i", val); @@ -1280,8 +1278,6 @@ void SetRawSaturation(int val){ } } void SetRawExposure(int val){ - printf("SetRawExposure(%i)\n", val); fflush(stdout); - FILE *fd = fopen("/sys/class/disp/disp/attr/enhance_bright", "w"); if (fd) { fprintf(fd, "%i", val); @@ -1289,8 +1285,6 @@ void SetRawExposure(int val){ } } void SetRawDisplayCal(int enabled, int red_gain, int green_gain, int blue_gain) { - printf("SetRawDisplayCal(%i,%i,%i,%i)\n", enabled, red_gain, green_gain, blue_gain); fflush(stdout); - int ret = enabled ? DisplayCal_enableWithValues(red_gain, green_gain, blue_gain) : DisplayCal_disable(); diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 2bb122492..5dfad05c5 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -15,27 +15,32 @@ REQUIRES_JSTEST=other/jstest REQUIRES_UNZIP60=other/unzip60 REQUIRES_FILEMGR=other/NextCommander REQUIRES_SDL2=other/sdl2 +SDL2_COMMIT=d4a7d7503524cc469fe775242f3f925d4dd56c88 +FILEMGR_PATCH=patches/NextCommander-h700.patch all: readmes early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) $(REQUIRES_SDL2) mkdir -p other - cd $(REQUIRES_FILEMGR) && make -j PLATFORM=tg5040 + cd $(REQUIRES_FILEMGR) && ([ -f .patched-h700 ] || (git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch .patched-h700)) + cd $(REQUIRES_FILEMGR) && ([ -f output/.platform-h700 ] || make clean PLATFORM=h700) + cd $(REQUIRES_FILEMGR) && make -j PLATFORM=h700 && touch output/.platform-h700 cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip - cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-power --disable-filesystem --disable-sensor --disable-locale --disable-loadso --enable-shared --disable-static && make -j && make install + cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static + grep -q '^#define SDL_VIDEO_DRIVER_MALI 1' $(REQUIRES_SDL2)/include/SDL_config.h + cd $(REQUIRES_SDL2) && make -j && make install mkdir -p $(REQUIRES_SDL2)/output cp -a $(PREFIX_LOCAL)/lib/libSDL2*.so* $(REQUIRES_SDL2)/output/ cp -a $(PREFIX)/lib/libSDL2_image*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -a $(PREFIX)/lib/libSDL2_ttf*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true - cp -a $(PREFIX)/lib/libUMP.so* $(REQUIRES_SDL2)/output/ - cp -a $(PREFIX)/lib/libtinyalsa.so* $(REQUIRES_SDL2)/output/ - cp -a $(PREFIX)/lib/libasound.so* $(REQUIRES_SDL2)/output/ + cp -L $(PREFIX)/lib/libUMP.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true + cp -L $(PREFIX)/lib/libtinyalsa.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cd boot && sh build.sh clean: - cd $(REQUIRES_FILEMGR) && make clean PLATFORM=tg5040 + cd $(REQUIRES_FILEMGR) && make clean PLATFORM=h700 cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart clean if [ -f $(REQUIRES_SDL2)/Makefile ]; then cd $(REQUIRES_SDL2) && make clean; fi rm -rf boot/output @@ -55,6 +60,7 @@ $(REQUIRES_UNZIP60): git clone --depth 1 https://github.com/shauninman/unzip60.git $(REQUIRES_UNZIP60) $(REQUIRES_SDL2): - git clone --depth 1 https://github.com/JohnnyonFlame/SDL-malifbdev-rot.git $(REQUIRES_SDL2) + git clone https://github.com/JohnnyonFlame/SDL-malifbdev-rot.git $(REQUIRES_SDL2) + cd $(REQUIRES_SDL2) && git checkout $(SDL2_COMMIT) include ../all/readmes/makefile diff --git a/workspace/h700/patches/NextCommander-h700.patch b/workspace/h700/patches/NextCommander-h700.patch new file mode 100644 index 000000000..8e21f4e55 --- /dev/null +++ b/workspace/h700/patches/NextCommander-h700.patch @@ -0,0 +1,51 @@ +diff --git a/Makefile b/Makefile +--- a/Makefile ++++ b/Makefile +@@ -11,3 +11,35 @@ CXXFLAGS := -Os +-# platform dependant stuff - tg5040 and tg5050 +-ifneq (,$(findstring tg50,$(PLATFORM))) ++# platform dependant stuff - h700 ++ifeq ($(PLATFORM),h700) ++SDCARD_ROOT := /mnt/SDCARD ++NEXTUI_SYSTEM_PATH := $(SDCARD_ROOT)/.system ++ ++CXXFLAGS += -DPATH_DEFAULT=\"$(SDCARD_ROOT)\" ++CXXFLAGS += -DPATH_DEFAULT_RIGHT=\"$(SDCARD_ROOT)\" ++CXXFLAGS += -DFILE_SYSTEM=\"/dev/mmcblk1p1\" ++ ++# Keys ++# Joys for Anbernic RG XX H700 ++CXXFLAGS += -DCMDR_KEY_UP=SDLK_UP ++CXXFLAGS += -DCMDR_KEY_RIGHT=SDLK_RIGHT ++CXXFLAGS += -DCMDR_KEY_DOWN=SDLK_DOWN ++CXXFLAGS += -DCMDR_KEY_LEFT=SDLK_LEFT ++CXXFLAGS += -DCMDR_KEY_OPEN=0 # A ++CXXFLAGS += -DCMDR_KEY_PARENT=1 # B ++CXXFLAGS += -DCMDR_KEY_OPERATION=3 # X ++CXXFLAGS += -DCMDR_KEY_SYSTEM=2 # Y ++CXXFLAGS += -DCMDR_KEY_PAGEUP=4 # L1 ++CXXFLAGS += -DCMDR_KEY_PAGEDOWN=5 # R1 ++CXXFLAGS += -DCMDR_KEY_SELECT=6 # SELECT ++CXXFLAGS += -DCMDR_KEY_TRANSFER=7 # START ++CXXFLAGS += -DCMDR_KEY_MENU=8 # MENU ++ ++# Screen ++CXXFLAGS += -DAUTOSCALE=1 ++CXXFLAGS += -DAUTOSCALE_DPI=0 ++CXXFLAGS += -DPPU_X=2 ++CXXFLAGS += -DPPU_Y=2 ++CXXFLAGS += -DSCREEN_BPP=32 ++ ++# platform dependant stuff - tg5040 and tg5050 ++else ifneq (,$(findstring tg50,$(PLATFORM))) + SDCARD_ROOT := /mnt/SDCARD +@@ -86,2 +118,8 @@ endif + SDL := SDL2 +-CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) ++ifeq ($(PLATFORM),h700) ++CXXFLAGS += -I$(PREFIX_LOCAL)/include/$(SDL) ++LINKFLAGS += -L$(PREFIX_LOCAL)/lib ++else ++CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) ++endif ++CXXFLAGS += -DUSE_$(SDL) diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy index 2e483cde2..4d90e5492 100644 --- a/workspace/h700/platform/makefile.copy +++ b/workspace/h700/platform/makefile.copy @@ -12,11 +12,12 @@ $(PLATFORM): cp ./workspace/all/show2/build/$@/show2.elf ./build/BOOT/common/$@/ cp ./workspace/$@/other/unzip60/unzip ./build/BOOT/common/$@/ cp -a ./workspace/$@/other/sdl2/output/libSDL2*.so* ./build/SYSTEM/$@/lib/ - cp -a ./workspace/$@/other/sdl2/output/libUMP.so* ./build/SYSTEM/$@/lib/ - cp -a ./workspace/$@/other/sdl2/output/libtinyalsa.so* ./build/SYSTEM/$@/lib/ - cp -a ./workspace/$@/other/sdl2/output/libasound.so* ./build/SYSTEM/$@/lib/ + cp -a ./workspace/$@/other/sdl2/output/libUMP.so* ./build/SYSTEM/$@/lib/ 2>/dev/null || true + cp -a ./workspace/$@/other/sdl2/output/libtinyalsa.so* ./build/SYSTEM/$@/lib/ 2>/dev/null || true # rfkill cp ./workspace/$@/rfkill/rfkill.elf ./build/SYSTEM/$@/bin/ + cp ./workspace/$@/other/evtest/evtest ./build/SYSTEM/$@/bin/ + cp ./workspace/$@/other/jstest/jstest ./build/SYSTEM/$@/bin/ # extras cp ./workspace/$@/other/NextCommander/output/NextCommander ./build/EXTRAS/Tools/$@/Files.pak/ diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 1883946bc..70eb9db96 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -29,6 +29,7 @@ int is_rg28xx = 0; int is_rg34xx = 0; int is_cube = 0; +static int wake_fd = -1; static void detect_device(void) { char *device = getenv("DEVICE"); @@ -70,7 +71,11 @@ void PLAT_quitInput(void) { free(joysticks); joysticks = NULL; num_joysticks = 0; - } + } + if (wake_fd >= 0) { + close(wake_fd); + wake_fd = -1; + } SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } @@ -140,11 +145,18 @@ void PLAT_getCPUSpeed() } void PLAT_getGPUTemp() { - perf.gpu_temp = getInt("/sys/devices/virtual/thermal/thermal_zone2/temp")/1000; + perf.gpu_temp = getInt("/sys/devices/virtual/thermal/thermal_zone1/temp")/1000; } void PLAT_getGPUSpeed() { - perf.gpu_speed = 660; // MHz + int speed = getInt("/sys/devices/platform/soc@03000000/1800000.gpu/devfreq/1800000.gpu/cur_freq"); + if (speed <= 0) + speed = getInt("/sys/devices/platform/soc/1800000.gpu/devfreq/1800000.gpu/cur_freq"); + if (speed <= 0) + speed = getInt("/sys/kernel/debug/clk/gpu0/clk_rate"); + if (speed <= 0) + speed = getInt("/sys/kernel/debug/clk/pll_gpu/clk_rate"); + perf.gpu_speed = speed > 0 ? speed / 1000000 : 660; // MHz } static struct WIFI_connection connection = { @@ -200,12 +212,14 @@ void PLAT_getBatteryStatusFine(int *is_charging, int *charge) void PLAT_enableBacklight(int enable) { if (enable) { + putInt("/sys/class/power_supply/axp2202-battery/work_led", 0); putInt("/sys/class/graphics/fb0/blank", 0); SetBrightness(GetBrightness()); } else { SetRawBrightness(0); putInt("/sys/class/graphics/fb0/blank", 1); + putInt("/sys/class/power_supply/axp2202-battery/work_led", 1); } } @@ -267,12 +281,14 @@ int PLAT_shouldWake(void) { if (lid.has_lid && PLAT_lidChanged(&lid_open) && lid_open) return 1; - int fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK | O_CLOEXEC); - if (fd < 0) return 0; + if (wake_fd < 0) + wake_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK | O_CLOEXEC); + if (wake_fd < 0) return 0; struct input_event event; int should_wake = 0; - while (read(fd, &event, sizeof(event)) == sizeof(event)) { + errno = 0; + while (read(wake_fd, &event, sizeof(event)) == sizeof(event)) { if (event.type == EV_KEY && event.code == CODE_POWER && event.value == 0) { if (lid.has_lid && !lid.is_open) { should_wake = 0; @@ -281,7 +297,10 @@ int PLAT_shouldWake(void) { should_wake = 1; } } - close(fd); + if (errno && errno != EAGAIN && errno != EWOULDBLOCK) { + close(wake_fd); + wake_fd = -1; + } return should_wake; } @@ -393,8 +412,12 @@ void PLAT_overrideMute(int mute) { } char* PLAT_getModel(void) { + static char model_buf[64]; char* model = getenv("RGXX_MODEL"); - if (model) return model; + if (model) { + snprintf(model_buf, sizeof(model_buf), "%s", model); + return model_buf; + } return "Anbernic RG XX"; } @@ -472,7 +495,8 @@ void PLAT_clearTurbo() { int PLAT_setDateTime(int y, int m, int d, int h, int i, int s) { char cmd[512]; - sprintf(cmd, "date -s '%d-%d-%d %d:%d:%d'; hwclock -u -w", y,m,d,h,i,s); + int n = snprintf(cmd, sizeof(cmd), "date -s '%d-%d-%d %d:%d:%d'; hwclock -u -w", y,m,d,h,i,s); + if (n < 0 || n >= (int)sizeof(cmd)) return -1; system(cmd); return 0; // why does this return an int? } diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 8a2067c3d..9716cede8 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -89,15 +89,15 @@ extern int is_cube; #define JOY_L1 4 #define JOY_R1 5 -#define JOY_L2 9 -#define JOY_R2 10 -#define JOY_L3 (is_rg34xx || is_rg28xx ? JOY_NA : 11) +#define JOY_L2 10 +#define JOY_R2 11 +#define JOY_L3 (is_rg34xx || is_rg28xx ? JOY_NA : 9) #define JOY_R3 (is_rg34xx || is_rg28xx ? JOY_NA : 12) #define JOY_MENU 8 #define JOY_POWER JOY_NA -#define JOY_PLUS 18 -#define JOY_MINUS 17 +#define JOY_PLUS 16 +#define JOY_MINUS 15 /////////////////////////////// From 415de24ddfe1712e99bdb691d6b2f148b628100e Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 18:04:27 +0200 Subject: [PATCH 10/76] fix(h700): close supplemental beta review gaps Reorder the H700 auxiliary build so the pinned Mali SDL is configured and installed before Files.pak is compiled, and update the carried NextCommander patch to include the SDK SDL_image/SDL_ttf headers and libraries alongside the local SDL2 build. Add a tiny framebuffer splash helper to the dmenu shim payload so first boot, missing TF2, stock-target warnings, and install/update work can show visible status before SDL/show2 exists. Gate H700 Bluetooth audio affordances for the beta while keeping controller pairing available, avoid applying Bluetooth audio sample-rate limits to controller-only connections, and set the RG28XX software rotation flag during platform init. --- skeleton/BASE/README.txt | 2 + workspace/all/settings/btmenu.cpp | 6 +- workspace/all/settings/btmenu.hpp | 4 +- workspace/all/settings/makefile | 2 +- workspace/h700/boot/boot.sh | 18 +- workspace/h700/boot/build.sh | 3 +- workspace/h700/boot/fbsplash.c | 180 ++++++++++++++++++ workspace/h700/makefile | 7 +- .../h700/patches/NextCommander-h700.patch | 4 +- workspace/h700/platform/platform.c | 3 +- 10 files changed, 216 insertions(+), 13 deletions(-) create mode 100644 workspace/h700/boot/fbsplash.c diff --git a/skeleton/BASE/README.txt b/skeleton/BASE/README.txt index ccfee2733..c5933da0d 100644 --- a/skeleton/BASE/README.txt +++ b/skeleton/BASE/README.txt @@ -44,6 +44,8 @@ Then copy "h700/dmenu.bin" to the root of the stock TF1 card's user-visible ROMs If your stock card has a stockmod or muOS boot selector, choose the stock frontend target before testing NextUI. muOS override files can prevent the stock dmenu hijack from running. +This H700 beta includes Bluetooth controller pairing. Bluetooth audio is not enabled in this beta package. + MIYOO FLIP Copy the "miyoo355" folder and "MinUI.zip" (without unzipping) to the root of the SD card. Put the SD card into the right slot (beneath the power button). diff --git a/workspace/all/settings/btmenu.cpp b/workspace/all/settings/btmenu.cpp index 261971230..ea7e40ba2 100644 --- a/workspace/all/settings/btmenu.cpp +++ b/workspace/all/settings/btmenu.cpp @@ -26,13 +26,15 @@ Menu::Menu(const int &globalQuit, int &globalDirty) : MenuList(MenuItemType::Fix std::bind(&Menu::getBtDiagnosticsState, this), std::bind(&Menu::setBtDiagnosticsState, this, std::placeholders::_1), std::bind(&Menu::resetBtDiagnosticsState, this)); + items.push_back(toggleItem); + items.push_back(diagItem); +#ifndef NO_BT_AUDIO rateItem = new MenuItem(ListItemType::Generic, "Maximum sampling rate", "44100 Hz: better compatibility\n48000 Hz: better quality", {44100, 48000}, {"44100 Hz", "48000 Hz"}, std::bind(&Menu::getSamplerateMaximum, this), std::bind(&Menu::setSamplerateMaximum, this, std::placeholders::_1), std::bind(&Menu::resetSamplerateMaximum, this)); - items.push_back(toggleItem); - items.push_back(diagItem); items.push_back(rateItem); +#endif // best effort layout based on the platform defines, user should really call performLayout manually MenuList::performLayout((SDL_Rect){0, 0, FIXED_WIDTH, FIXED_HEIGHT}); diff --git a/workspace/all/settings/btmenu.hpp b/workspace/all/settings/btmenu.hpp index f9374e643..d6f86eacd 100644 --- a/workspace/all/settings/btmenu.hpp +++ b/workspace/all/settings/btmenu.hpp @@ -16,7 +16,7 @@ namespace Bluetooth // diagnostics on/off MenuItem *diagItem; // max sample rate - MenuItem *rateItem; + MenuItem *rateItem = nullptr; std::thread worker; bool quit = false; @@ -94,4 +94,4 @@ namespace Bluetooth public: UnpairItem(BT_devicePaired n, bool& dirty); }; -} \ No newline at end of file +} diff --git a/workspace/all/settings/makefile b/workspace/all/settings/makefile index 4924f7576..ada51e15e 100644 --- a/workspace/all/settings/makefile +++ b/workspace/all/settings/makefile @@ -46,7 +46,7 @@ CXXFLAGS += $$(pkg-config --cflags --libs gio-2.0 glib-2.0) endif ifeq ($(PLATFORM), h700) # drop as soon as we use btagent on all platforms -CXXFLAGS += -DHAS_BTAGENT +CXXFLAGS += -DHAS_BTAGENT -DNO_BT_AUDIO CXXSOURCE += btagent.cpp CXXFLAGS += $$(pkg-config --cflags --libs gio-2.0 glib-2.0) endif diff --git a/workspace/h700/boot/boot.sh b/workspace/h700/boot/boot.sh index 9d58cbd92..01e3b3770 100755 --- a/workspace/h700/boot/boot.sh +++ b/workspace/h700/boot/boot.sh @@ -63,7 +63,7 @@ ensure_compat_path() { } extract_payload() { - if [ -x /tmp/nextui-h700-unzip ]; then + if [ -x /tmp/nextui-h700-unzip ] && [ -x /tmp/nextui-h700-fbsplash ]; then return 0 fi @@ -76,6 +76,16 @@ extract_payload() { fi cp /tmp/nextui-h700/unzip /tmp/nextui-h700-unzip chmod +x /tmp/nextui-h700-unzip + if [ -x /tmp/nextui-h700/fbsplash ]; then + cp /tmp/nextui-h700/fbsplash /tmp/nextui-h700-fbsplash + chmod +x /tmp/nextui-h700-fbsplash + fi +} + +show_splash() { + extract_payload || return 0 + [ -x /tmp/nextui-h700-fbsplash ] || return 0 + /tmp/nextui-h700-fbsplash "$1" >/dev/null 2>&1 || true } find_unzip() { @@ -104,6 +114,7 @@ fallback_stock() { if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then log "stockmod muOS override is present; NextUI requires the stock boot target" + show_splash "STOCK TARGET REQUIRED" fi if ! mount_tf2; then @@ -112,6 +123,7 @@ fi if ! mount_tf2; then log "TF2 mount failed" + show_splash "INSERT NEXTUI TF2 CARD" fallback_stock fi @@ -119,6 +131,7 @@ ensure_compat_path if [ -f "$UPDATE_PATH" ]; then log "install/update zip detected" + show_splash "INSTALLING NEXTUI" if [ ! -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ]; then UNZIP_CMD=$(find_unzip) if [ -z "$UNZIP_CMD" ]; then @@ -133,8 +146,10 @@ if [ -f "$UPDATE_PATH" ]; then fi if [ -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ] && { [ -f "$UPDATE_PATH" ] || has_pakz; }; then + show_splash "INSTALLING NEXTUI" "$TF2_PATH/.tmp_update/$PLATFORM.sh" >> "$LOG_PATH" 2>&1 elif [ -x "$SYSTEM_PATH/bin/install.sh" ] && [ -f "$UPDATE_PATH" ]; then + show_splash "UPDATING NEXTUI" "$SYSTEM_PATH/bin/install.sh" >> "$LOG_PATH" 2>&1 fi @@ -143,4 +158,5 @@ if [ -x "$SYSTEM_PATH/paks/MinUI.pak/launch.sh" ]; then fi log "NextUI launch script missing" +show_splash "NEXTUI INSTALL MISSING" fallback_stock diff --git a/workspace/h700/boot/build.sh b/workspace/h700/boot/build.sh index d67535740..cd0a7e7e7 100755 --- a/workspace/h700/boot/build.sh +++ b/workspace/h700/boot/build.sh @@ -4,10 +4,11 @@ SOURCE=boot.sh TARGET=dmenu.bin mkdir -p output +${CROSS_COMPILE}gcc -Os -s fbsplash.c -o ./output/fbsplash cp ../other/unzip60/unzip ./output/ cd output || exit 1 -tar -czf data unzip +tar -czf data fbsplash unzip cat ../$SOURCE > $TARGET echo BINARY >> $TARGET cat data >> $TARGET diff --git a/workspace/h700/boot/fbsplash.c b/workspace/h700/boot/fbsplash.c new file mode 100644 index 000000000..d40618faa --- /dev/null +++ b/workspace/h700/boot/fbsplash.c @@ -0,0 +1,180 @@ +// Minimal framebuffer splash for the H700 boot shim. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct { + uint8_t rows[7]; +} Glyph; + +typedef struct { + char c; + Glyph g; +} GlyphMap; + +static const GlyphMap glyphs[] = { + {' ', {{0x00,0x00,0x00,0x00,0x00,0x00,0x00}}}, + {'!', {{0x04,0x04,0x04,0x04,0x04,0x00,0x04}}}, + {'-', {{0x00,0x00,0x00,0x1f,0x00,0x00,0x00}}}, + {'.', {{0x00,0x00,0x00,0x00,0x00,0x0c,0x0c}}}, + {'0', {{0x0e,0x11,0x13,0x15,0x19,0x11,0x0e}}}, + {'1', {{0x04,0x0c,0x04,0x04,0x04,0x04,0x0e}}}, + {'2', {{0x0e,0x11,0x01,0x02,0x04,0x08,0x1f}}}, + {'3', {{0x1e,0x01,0x01,0x0e,0x01,0x01,0x1e}}}, + {'4', {{0x02,0x06,0x0a,0x12,0x1f,0x02,0x02}}}, + {'5', {{0x1f,0x10,0x10,0x1e,0x01,0x01,0x1e}}}, + {'6', {{0x0e,0x10,0x10,0x1e,0x11,0x11,0x0e}}}, + {'7', {{0x1f,0x01,0x02,0x04,0x08,0x08,0x08}}}, + {'8', {{0x0e,0x11,0x11,0x0e,0x11,0x11,0x0e}}}, + {'9', {{0x0e,0x11,0x11,0x0f,0x01,0x01,0x0e}}}, + {'A', {{0x0e,0x11,0x11,0x1f,0x11,0x11,0x11}}}, + {'B', {{0x1e,0x11,0x11,0x1e,0x11,0x11,0x1e}}}, + {'C', {{0x0e,0x11,0x10,0x10,0x10,0x11,0x0e}}}, + {'D', {{0x1e,0x11,0x11,0x11,0x11,0x11,0x1e}}}, + {'E', {{0x1f,0x10,0x10,0x1e,0x10,0x10,0x1f}}}, + {'F', {{0x1f,0x10,0x10,0x1e,0x10,0x10,0x10}}}, + {'G', {{0x0e,0x11,0x10,0x17,0x11,0x11,0x0f}}}, + {'H', {{0x11,0x11,0x11,0x1f,0x11,0x11,0x11}}}, + {'I', {{0x0e,0x04,0x04,0x04,0x04,0x04,0x0e}}}, + {'J', {{0x07,0x02,0x02,0x02,0x12,0x12,0x0c}}}, + {'K', {{0x11,0x12,0x14,0x18,0x14,0x12,0x11}}}, + {'L', {{0x10,0x10,0x10,0x10,0x10,0x10,0x1f}}}, + {'M', {{0x11,0x1b,0x15,0x15,0x11,0x11,0x11}}}, + {'N', {{0x11,0x19,0x15,0x13,0x11,0x11,0x11}}}, + {'O', {{0x0e,0x11,0x11,0x11,0x11,0x11,0x0e}}}, + {'P', {{0x1e,0x11,0x11,0x1e,0x10,0x10,0x10}}}, + {'Q', {{0x0e,0x11,0x11,0x11,0x15,0x12,0x0d}}}, + {'R', {{0x1e,0x11,0x11,0x1e,0x14,0x12,0x11}}}, + {'S', {{0x0f,0x10,0x10,0x0e,0x01,0x01,0x1e}}}, + {'T', {{0x1f,0x04,0x04,0x04,0x04,0x04,0x04}}}, + {'U', {{0x11,0x11,0x11,0x11,0x11,0x11,0x0e}}}, + {'V', {{0x11,0x11,0x11,0x11,0x11,0x0a,0x04}}}, + {'W', {{0x11,0x11,0x11,0x15,0x15,0x15,0x0a}}}, + {'X', {{0x11,0x11,0x0a,0x04,0x0a,0x11,0x11}}}, + {'Y', {{0x11,0x11,0x0a,0x04,0x04,0x04,0x04}}}, + {'Z', {{0x1f,0x01,0x02,0x04,0x08,0x10,0x1f}}}, +}; + +static const Glyph *glyph_for(char c) { + c = (char)toupper((unsigned char)c); + for (size_t i = 0; i < sizeof(glyphs) / sizeof(glyphs[0]); i++) { + if (glyphs[i].c == c) + return &glyphs[i].g; + } + return &glyphs[0].g; +} + +static uint32_t make_pixel(struct fb_var_screeninfo *v, uint8_t r, uint8_t g, uint8_t b) { + uint32_t pixel = 0; + pixel |= ((uint32_t)(r >> (8 - v->red.length))) << v->red.offset; + pixel |= ((uint32_t)(g >> (8 - v->green.length))) << v->green.offset; + pixel |= ((uint32_t)(b >> (8 - v->blue.length))) << v->blue.offset; + return pixel; +} + +static void put_pixel(uint8_t *fb, struct fb_var_screeninfo *v, struct fb_fix_screeninfo *f, int x, int y, uint32_t pixel) { + if (x < 0 || y < 0 || x >= (int)v->xres || y >= (int)v->yres) + return; + + uint8_t *dst = fb + y * f->line_length + x * (v->bits_per_pixel / 8); + switch (v->bits_per_pixel) { + case 16: + *(uint16_t *)dst = (uint16_t)pixel; + break; + case 24: + dst[0] = pixel & 0xff; + dst[1] = (pixel >> 8) & 0xff; + dst[2] = (pixel >> 16) & 0xff; + break; + case 32: + *(uint32_t *)dst = pixel; + break; + } +} + +static void fill_rect(uint8_t *fb, struct fb_var_screeninfo *v, struct fb_fix_screeninfo *f, int x, int y, int w, int h, uint32_t pixel) { + for (int yy = y; yy < y + h; yy++) { + for (int xx = x; xx < x + w; xx++) + put_pixel(fb, v, f, xx, yy, pixel); + } +} + +static int text_width(const char *text, int scale) { + return (int)strlen(text) * 6 * scale - scale; +} + +static void draw_text(uint8_t *fb, struct fb_var_screeninfo *v, struct fb_fix_screeninfo *f, int x, int y, const char *text, int scale, uint32_t pixel) { + for (const char *p = text; *p; p++, x += 6 * scale) { + const Glyph *glyph = glyph_for(*p); + for (int row = 0; row < 7; row++) { + for (int col = 0; col < 5; col++) { + if (glyph->rows[row] & (1 << (4 - col))) + fill_rect(fb, v, f, x + col * scale, y + row * scale, scale, scale, pixel); + } + } + } +} + +int main(int argc, char **argv) { + const char *message = argc > 1 ? argv[1] : "STARTING NEXTUI"; + int fd = open("/dev/fb0", O_RDWR); + if (fd < 0) + return 1; + + struct fb_var_screeninfo v; + struct fb_fix_screeninfo f; + if (ioctl(fd, FBIOGET_VSCREENINFO, &v) < 0 || ioctl(fd, FBIOGET_FSCREENINFO, &f) < 0) { + close(fd); + return 1; + } + if (v.bits_per_pixel != 16 && v.bits_per_pixel != 24 && v.bits_per_pixel != 32) { + close(fd); + return 1; + } + + size_t map_len = f.smem_len ? f.smem_len : (size_t)f.line_length * v.yres; + uint8_t *fb = mmap(NULL, map_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (fb == MAP_FAILED) { + close(fd); + return 1; + } + + uint32_t bg = make_pixel(&v, 13, 17, 20); + uint32_t panel = make_pixel(&v, 29, 36, 40); + uint32_t accent = make_pixel(&v, 85, 214, 183); + uint32_t text = make_pixel(&v, 235, 241, 241); + uint32_t dim = make_pixel(&v, 120, 134, 134); + + fill_rect(fb, &v, &f, 0, 0, v.xres, v.yres, bg); + int scale = v.xres < 600 ? 3 : 4; + int logo_scale = v.xres < 600 ? 6 : 8; + int center_x = (int)v.xres / 2; + int center_y = (int)v.yres / 2; + + int panel_w = (int)v.xres * 7 / 10; + int panel_h = (int)v.yres / 3; + int panel_x = center_x - panel_w / 2; + int panel_y = center_y - panel_h / 2; + fill_rect(fb, &v, &f, panel_x, panel_y, panel_w, panel_h, panel); + fill_rect(fb, &v, &f, panel_x, panel_y, panel_w, 4, accent); + + int logo_w = text_width("NEXTUI", logo_scale); + draw_text(fb, &v, &f, center_x - logo_w / 2, panel_y + panel_h / 4 - 24, "NEXTUI", logo_scale, text); + + char msg[64]; + snprintf(msg, sizeof(msg), "%s", message); + int msg_w = text_width(msg, scale); + draw_text(fb, &v, &f, center_x - msg_w / 2, panel_y + panel_h * 2 / 3, msg, scale, dim); + + msync(fb, map_len, MS_SYNC); + munmap(fb, map_len); + close(fd); + return 0; +} diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 5dfad05c5..84c3bcc67 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -17,14 +17,12 @@ REQUIRES_FILEMGR=other/NextCommander REQUIRES_SDL2=other/sdl2 SDL2_COMMIT=d4a7d7503524cc469fe775242f3f925d4dd56c88 FILEMGR_PATCH=patches/NextCommander-h700.patch +FILEMGR_STAMP=.patched-h700-v2 all: readmes early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) $(REQUIRES_SDL2) mkdir -p other - cd $(REQUIRES_FILEMGR) && ([ -f .patched-h700 ] || (git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch .patched-h700)) - cd $(REQUIRES_FILEMGR) && ([ -f output/.platform-h700 ] || make clean PLATFORM=h700) - cd $(REQUIRES_FILEMGR) && make -j PLATFORM=h700 && touch output/.platform-h700 cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip @@ -37,6 +35,9 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cp -a $(PREFIX)/lib/libSDL2_ttf*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -L $(PREFIX)/lib/libUMP.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -L $(PREFIX)/lib/libtinyalsa.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true + cd $(REQUIRES_FILEMGR) && ([ -f $(FILEMGR_STAMP) ] || (git checkout -- Makefile && git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch $(FILEMGR_STAMP))) + cd $(REQUIRES_FILEMGR) && ([ -f output/.platform-h700 ] || make clean PLATFORM=h700) + cd $(REQUIRES_FILEMGR) && make -j PLATFORM=h700 && touch output/.platform-h700 cd boot && sh build.sh clean: diff --git a/workspace/h700/patches/NextCommander-h700.patch b/workspace/h700/patches/NextCommander-h700.patch index 8e21f4e55..7c9b4445d 100644 --- a/workspace/h700/patches/NextCommander-h700.patch +++ b/workspace/h700/patches/NextCommander-h700.patch @@ -43,8 +43,8 @@ diff --git a/Makefile b/Makefile SDL := SDL2 -CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) +ifeq ($(PLATFORM),h700) -+CXXFLAGS += -I$(PREFIX_LOCAL)/include/$(SDL) -+LINKFLAGS += -L$(PREFIX_LOCAL)/lib ++CXXFLAGS += -I$(PREFIX_LOCAL)/include/$(SDL) -I$(PREFIX)/include/$(SDL) ++LINKFLAGS += -L$(PREFIX_LOCAL)/lib -L$(PREFIX)/lib +else +CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) +endif diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 70eb9db96..b2345e654 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -42,6 +42,7 @@ static void detect_device(void) { void PLAT_initPlatform(void) { detect_device(); + should_rotate = is_rg28xx; } static SDL_Joystick **joysticks = NULL; @@ -401,7 +402,7 @@ void PLAT_setRumble(int strength) { int PLAT_pickSampleRate(int requested, int max) { // bluetooth: allow limiting the maximum to improve compatibility - if(PLAT_bluetoothConnected()) + if(GetAudioSink() == AUDIO_SINK_BLUETOOTH && PLAT_bluetoothConnected()) return MIN(requested, CFG_getBluetoothSamplingrateLimit()); return MIN(requested, max); From 253179912e633a6f769878e25f9fd328f45bc870 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 18:23:16 +0200 Subject: [PATCH 11/76] fix(h700): remove stale UMP graphics dependency Stop linking H700 binaries through the tg5040 glesv2 pkg-config library list, which pulled in the old libUMP dependency that is not part of the RG40XXV Mali-G31 stock stack. H700 now links GLES directly while still using the custom SDL2 pkg-config data. Also stop copying UMP into the H700 payload, add early NextUI startup breadcrumbs around settings/video/input init, and make repeated UI crashes start the stock network/SSH services so boot-logo stalls remain diagnosable on-device. --- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 7 ++++--- workspace/all/nextui/nextui.c | 4 ++++ workspace/h700/makefile | 1 - workspace/h700/platform/makefile.copy | 1 - workspace/h700/platform/makefile.env | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 2086a4463..3e9a0c1a8 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -72,7 +72,7 @@ log_runtime_state() { echo "launch: LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> "$LAUNCH_LOG" ldd "$SYSTEM_PATH/bin/nextui.elf" >> "$LAUNCH_LOG" 2>&1 || true ldd "$SYSTEM_PATH/lib/libSDL2-2.0.so.0" >> "$LAUNCH_LOG" 2>&1 || true - ls -l /usr/lib/libEGL.so* /usr/lib/libGLESv2.so* /usr/lib/aarch64-linux-gnu/libEGL.so* /usr/lib/aarch64-linux-gnu/libGLESv2.so* "$SYSTEM_PATH/lib"/libUMP.so* >> "$LAUNCH_LOG" 2>&1 || true + ls -l /usr/lib/libEGL.so* /usr/lib/libGLESv2.so* /usr/lib/aarch64-linux-gnu/libEGL.so* /usr/lib/aarch64-linux-gnu/libGLESv2.so* >> "$LAUNCH_LOG" 2>&1 || true } if [ -f "/tmp/poweroff" ]; then @@ -190,9 +190,10 @@ while [ -f "$EXEC_PATH" ]; do echo "launch: nextui.elf exited $EXIT_CODE $(date)" >> "$LAUNCH_LOG" if [ "$EXIT_CODE" != "0" ]; then CRASH_COUNT=$((CRASH_COUNT + 1)) - if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] && [ "$CRASH_COUNT" -ge 5 ]; then - echo "launch: debug crash limit reached; keeping system up" >> "$LAUNCH_LOG" + if [ "$CRASH_COUNT" -ge 5 ]; then + echo "launch: crash limit reached; keeping system up for diagnostics" >> "$LAUNCH_LOG" rm -f "$EXEC_PATH" + start_debug_network sleep 300 continue fi diff --git a/workspace/all/nextui/nextui.c b/workspace/all/nextui/nextui.c index 5ed6d612e..273070399 100644 --- a/workspace/all/nextui/nextui.c +++ b/workspace/all/nextui/nextui.c @@ -2255,11 +2255,15 @@ int main (int argc, char *argv[]) { simple_mode = exists(SIMPLE_MODE_PATH); LOG_info("NextUI\n"); + LOG_info("InitSettings\n"); InitSettings(); + LOG_info("GFX_init\n"); screen = GFX_init(MODE_MAIN); + LOG_info("GFX_init done\n"); // LOG_info("- graphics init: %lu\n", SDL_GetTicks() - main_begin); + LOG_info("PAD_init\n"); PAD_init(); // LOG_info("- input init: %lu\n", SDL_GetTicks() - main_begin); VIB_init(); diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 84c3bcc67..74ad7d5de 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -33,7 +33,6 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cp -a $(PREFIX_LOCAL)/lib/libSDL2*.so* $(REQUIRES_SDL2)/output/ cp -a $(PREFIX)/lib/libSDL2_image*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -a $(PREFIX)/lib/libSDL2_ttf*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true - cp -L $(PREFIX)/lib/libUMP.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -L $(PREFIX)/lib/libtinyalsa.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cd $(REQUIRES_FILEMGR) && ([ -f $(FILEMGR_STAMP) ] || (git checkout -- Makefile && git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch $(FILEMGR_STAMP))) cd $(REQUIRES_FILEMGR) && ([ -f output/.platform-h700 ] || make clean PLATFORM=h700) diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy index 4d90e5492..919004d54 100644 --- a/workspace/h700/platform/makefile.copy +++ b/workspace/h700/platform/makefile.copy @@ -12,7 +12,6 @@ $(PLATFORM): cp ./workspace/all/show2/build/$@/show2.elf ./build/BOOT/common/$@/ cp ./workspace/$@/other/unzip60/unzip ./build/BOOT/common/$@/ cp -a ./workspace/$@/other/sdl2/output/libSDL2*.so* ./build/SYSTEM/$@/lib/ - cp -a ./workspace/$@/other/sdl2/output/libUMP.so* ./build/SYSTEM/$@/lib/ 2>/dev/null || true cp -a ./workspace/$@/other/sdl2/output/libtinyalsa.so* ./build/SYSTEM/$@/lib/ 2>/dev/null || true # rfkill cp ./workspace/$@/rfkill/rfkill.elf ./build/SYSTEM/$@/bin/ diff --git a/workspace/h700/platform/makefile.env b/workspace/h700/platform/makefile.env index 3f65d9129..96b9969bd 100644 --- a/workspace/h700/platform/makefile.env +++ b/workspace/h700/platform/makefile.env @@ -18,7 +18,7 @@ LDFLAGS += -L$(PREFIX_LOCAL)/lib/$(CROSS_TRIPLE) -L$(PREFIX)/lib/$(CROSS_TRIPLE) # pkg-config export PKG_CONFIG_PATH := $(PREFIX_LOCAL)/lib/pkgconfig:$(PREFIX_LOCAL)/lib/$(CROSS_TRIPLE)/pkgconfig:$(PKG_CONFIG_PATH) CFLAGS += $$(pkg-config --cflags sdl2 glesv2) -LDFLAGS += $$(pkg-config --libs sdl2 glesv2) +LDFLAGS += $$(pkg-config --libs sdl2) -lGLESv2 # not handled by pkg-config CFLAGS += -DUSE_$(SDL) -DUSE_$(GL) -DGL_GLEXT_PROTOTYPES LDFLAGS += -l$(SDL)_image -l$(SDL)_ttf -lpthread -ldl -lm -lz From f1397405b759f6a9838b338c914da6a9648eb81f Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 18:44:01 +0200 Subject: [PATCH 12/76] fix(h700): remove SDL udev startup dependency Build the H700 Mali SDL stack without libudev and without dynamically loaded ALSA/libsamplerate helpers so video startup does not trip over the stock RG40XXV runtime's libudev/loadso behavior. Add persistent installer logging and a debug-wifi.conf path that can bring up NetworkManager and SSH during install or after repeated UI crashes. Also make audiomon relink when platform link flags change, and guard the Bluetooth scan rate item before pushing it into the settings menu. --- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 39 ++++++++ workspace/all/audiomon/Makefile | 4 +- workspace/all/settings/btmenu.cpp | 4 +- workspace/h700/install/boot.sh | 89 +++++++++++++++++-- workspace/h700/makefile | 4 +- 5 files changed, 130 insertions(+), 10 deletions(-) diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 3e9a0c1a8..200387233 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -32,12 +32,15 @@ export HOOKS_PATH="$USERDATA_PATH/.hooks" export DATETIME_PATH="$SHARED_USERDATA_PATH/datetime.txt" export HOME="$USERDATA_PATH" DEBUG_KEEP_NETWORK_PATH="$USERDATA_PATH/debug-keep-network" +DEBUG_WIFI_CONF="$USERDATA_PATH/debug-wifi.conf" LAUNCH_LOG="$LOGS_PATH/launch.txt" export PATH="$SYSTEM_PATH/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" export LD_LIBRARY_PATH="$SYSTEM_PATH/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" export SDL_VIDEODRIVER="mali" export SDL_AUDIODRIVER="alsa" +export SDL_JOYSTICK_DISABLE_UDEV=1 +export SDL_HIDAPI_JOYSTICK_DISABLE_UDEV=1 for egl_path in /usr/lib/libEGL.so /usr/lib/libEGL.so.1 /usr/lib/libEGL.so.1.4.0 /usr/lib/aarch64-linux-gnu/libEGL.so /usr/lib/aarch64-linux-gnu/libEGL.so.1; do if [ -e "$egl_path" ]; then @@ -52,12 +55,48 @@ for gles_path in /usr/lib/libGLESv2.so /usr/lib/libGLESv2.so.2 /usr/lib/libGLESv fi done +read_debug_wifi_value() { + key="$1" + [ -f "$DEBUG_WIFI_CONF" ] || return 0 + sed -n "s/^$key=//p" "$DEBUG_WIFI_CONF" | tail -n 1 | sed 's/^"//;s/"$//' | tr -d '\r' +} + +connect_debug_wifi() { + [ -f "$DEBUG_WIFI_CONF" ] || return 0 + DEBUG_WIFI_SSID="$(read_debug_wifi_value SSID)" + DEBUG_WIFI_PASSWORD="$(read_debug_wifi_value PASSWORD)" + DEBUG_WIFI_IFACE="$(read_debug_wifi_value INTERFACE)" + [ -n "$DEBUG_WIFI_IFACE" ] || DEBUG_WIFI_IFACE="wlan0" + if [ -z "$DEBUG_WIFI_SSID" ]; then + echo "launch: debug-wifi.conf present without SSID=" >> "$LAUNCH_LOG" + return 0 + fi + + echo "launch: connecting debug wifi SSID=$DEBUG_WIFI_SSID IFACE=$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" + for attempt in 1 2 3; do + nmcli dev wifi rescan ifname "$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" 2>&1 || true + if [ -n "$DEBUG_WIFI_PASSWORD" ]; then + nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" password "$DEBUG_WIFI_PASSWORD" ifname "$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" 2>&1 && return 0 + else + nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" ifname "$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" 2>&1 && return 0 + fi + echo "launch: debug wifi attempt $attempt failed" >> "$LAUNCH_LOG" + sleep 2 + done +} + start_debug_network() { echo "launch: starting stock network services for debug" >> "$LAUNCH_LOG" rfkill.elf unblock wifi >> "$LAUNCH_LOG" 2>&1 || rfkill unblock wifi >> "$LAUNCH_LOG" 2>&1 || true systemctl start NetworkManager >> "$LAUNCH_LOG" 2>&1 || true nmcli networking on >> "$LAUNCH_LOG" 2>&1 || true nmcli radio wifi on >> "$LAUNCH_LOG" 2>&1 || true + if [ -f "$DEBUG_WIFI_CONF" ]; then + connect_debug_wifi + elif [ -s "$USERDATA_PATH/wifi/wpa_supplicant.conf" ] && [ -x "$SYSTEM_PATH/etc/wifi/wifi_init.sh" ]; then + echo "launch: starting NextUI wpa_supplicant config for debug" >> "$LAUNCH_LOG" + "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start >> "$LAUNCH_LOG" 2>&1 || true + fi systemctl start ssh >> "$LAUNCH_LOG" 2>&1 || systemctl start sshd >> "$LAUNCH_LOG" 2>&1 || /usr/sbin/sshd >> "$LAUNCH_LOG" 2>&1 || diff --git a/workspace/all/audiomon/Makefile b/workspace/all/audiomon/Makefile index b22e9c7d9..d39be288c 100644 --- a/workspace/all/audiomon/Makefile +++ b/workspace/all/audiomon/Makefile @@ -40,7 +40,7 @@ all: $(PREFIX_LOCAL)/include/msettings.h $(PRODUCT) build/$(PLATFORM): mkdir -p $@ -$(PRODUCT): build/$(PLATFORM) $(OBJS) +$(PRODUCT): build/$(PLATFORM) $(OBJS) Makefile ../../$(PLATFORM)/platform/makefile.env $(CXX) -o $@ $(OBJS) $(LDFLAGS) $(PREFIX_LOCAL)/include/msettings.h: @@ -49,7 +49,7 @@ $(PREFIX_LOCAL)/include/msettings.h: %.o: %.cpp $(CXX) $(CXXFLAGS) -c $< -o $@ -build/$(PLATFORM)/%.o: %.cpp +build/$(PLATFORM)/%.o: %.cpp Makefile ../../$(PLATFORM)/platform/makefile.env $(CXX) $(CXXFLAGS) -c $< -o $@ clean: diff --git a/workspace/all/settings/btmenu.cpp b/workspace/all/settings/btmenu.cpp index ea7e40ba2..2bd616c54 100644 --- a/workspace/all/settings/btmenu.cpp +++ b/workspace/all/settings/btmenu.cpp @@ -181,7 +181,7 @@ void Menu::updater() items.clear(); items.push_back(toggleItem); items.push_back(diagItem); - items.push_back(rateItem); + if (rateItem) items.push_back(rateItem); layout_called = false; for (auto &[s, r] : scanMap) @@ -230,7 +230,7 @@ void Menu::updater() items.clear(); items.push_back(toggleItem); items.push_back(diagItem); - items.push_back(rateItem); + if (rateItem) items.push_back(rateItem); layout_called = false; selectionDirty = true; pollSecs = 15; diff --git a/workspace/h700/install/boot.sh b/workspace/h700/install/boot.sh index a89ba0d55..316a41185 100755 --- a/workspace/h700/install/boot.sh +++ b/workspace/h700/install/boot.sh @@ -7,6 +7,11 @@ REAL_SDCARD_PATH="/mnt/sdcard" UPDATE_PATH="$SDCARD_PATH/MinUI.zip" PAKZ_PATH="$SDCARD_PATH/*.pakz" SYSTEM_PATH="$SDCARD_PATH/.system" +USERDATA_PATH="$SDCARD_PATH/.userdata/h700" +LOGS_PATH="$USERDATA_PATH/logs" +INSTALL_LOG="$LOGS_PATH/install.txt" +DEBUG_KEEP_NETWORK_PATH="$USERDATA_PATH/debug-keep-network" +DEBUG_WIFI_CONF="$USERDATA_PATH/debug-wifi.conf" if ! mountpoint -q "$SDCARD_PATH" && [ ! -L "$SDCARD_PATH" ]; then if [ -e "$SDCARD_PATH" ]; then @@ -21,7 +26,59 @@ export PATH="$SYSTEM_PATH/$PLATFORM/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" cd "$(dirname "$0")/$PLATFORM" || exit 1 +mkdir -p "$LOGS_PATH" +echo "install: starting $(date)" > "$INSTALL_LOG" + +log_install() { + echo "install: $* $(date)" >> "$INSTALL_LOG" +} + +read_debug_wifi_value() { + key="$1" + [ -f "$DEBUG_WIFI_CONF" ] || return 0 + sed -n "s/^$key=//p" "$DEBUG_WIFI_CONF" | tail -n 1 | sed 's/^"//;s/"$//' | tr -d '\r' +} + +connect_debug_wifi() { + [ -f "$DEBUG_WIFI_CONF" ] || return 0 + DEBUG_WIFI_SSID="$(read_debug_wifi_value SSID)" + DEBUG_WIFI_PASSWORD="$(read_debug_wifi_value PASSWORD)" + DEBUG_WIFI_IFACE="$(read_debug_wifi_value INTERFACE)" + [ -n "$DEBUG_WIFI_IFACE" ] || DEBUG_WIFI_IFACE="wlan0" + if [ -z "$DEBUG_WIFI_SSID" ]; then + log_install "debug-wifi.conf present without SSID=" + return 0 + fi + + log_install "connecting debug wifi SSID=$DEBUG_WIFI_SSID IFACE=$DEBUG_WIFI_IFACE" + for attempt in 1 2 3; do + nmcli dev wifi rescan ifname "$DEBUG_WIFI_IFACE" >> "$INSTALL_LOG" 2>&1 || true + if [ -n "$DEBUG_WIFI_PASSWORD" ]; then + nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" password "$DEBUG_WIFI_PASSWORD" ifname "$DEBUG_WIFI_IFACE" >> "$INSTALL_LOG" 2>&1 && return 0 + else + nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" ifname "$DEBUG_WIFI_IFACE" >> "$INSTALL_LOG" 2>&1 && return 0 + fi + log_install "debug wifi attempt $attempt failed" + sleep 2 + done +} + +start_debug_network() { + log_install "starting stock network services for debug" + rfkill.elf unblock wifi >> "$INSTALL_LOG" 2>&1 || rfkill unblock wifi >> "$INSTALL_LOG" 2>&1 || true + systemctl start NetworkManager >> "$INSTALL_LOG" 2>&1 || true + nmcli networking on >> "$INSTALL_LOG" 2>&1 || true + nmcli radio wifi on >> "$INSTALL_LOG" 2>&1 || true + connect_debug_wifi + systemctl start ssh >> "$INSTALL_LOG" 2>&1 || + systemctl start sshd >> "$INSTALL_LOG" 2>&1 || + /usr/sbin/sshd >> "$INSTALL_LOG" 2>&1 || + true + ip addr show >> "$INSTALL_LOG" 2>&1 || true +} + show_progress() { + log_install "$1" if [ -x ./show2.elf ]; then ./show2.elf --mode=daemon --image="logo.png" --text="$1" --logoheight=128 --progress=-1 >/dev/null 2>&1 & fi @@ -29,18 +86,30 @@ show_progress() { show_progress "Installing..." sh "$SYSTEM_PATH/$PLATFORM/bin/governor.sh" performance 2>/dev/null || true -systemctl stop NetworkManager 2>/dev/null || true +if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] || [ -f "$DEBUG_WIFI_CONF" ]; then + start_debug_network +else + systemctl stop NetworkManager 2>/dev/null || true +fi killall brightCtrl.bin cexpert 2>/dev/null || true for pakz in $PAKZ_PATH; do if [ ! -e "$pakz" ]; then continue; fi echo "TEXT:Extracting $pakz" > /tmp/show2.fifo 2>/dev/null || true - ./unzip -o -d "$SDCARD_PATH" "$pakz" + log_install "extracting $pakz" + ./unzip -o -d "$SDCARD_PATH" "$pakz" >> "$INSTALL_LOG" 2>&1 + unzip_status=$? + log_install "extracting $pakz exited $unzip_status" + [ "$unzip_status" = "0" ] || exit "$unzip_status" rm -f "$pakz" if [ -f "$SDCARD_PATH/post_install.sh" ]; then echo "TEXT:Installing $pakz" > /tmp/show2.fifo 2>/dev/null || true - sh "$SDCARD_PATH/post_install.sh" + log_install "running post_install.sh for $pakz" + sh "$SDCARD_PATH/post_install.sh" >> "$INSTALL_LOG" 2>&1 + post_status=$? + log_install "post_install.sh exited $post_status" + [ "$post_status" = "0" ] || exit "$post_status" rm -f "$SDCARD_PATH/post_install.sh" fi done @@ -56,17 +125,27 @@ if [ -f "$UPDATE_PATH" ]; then rm -rf "$SYSTEM_PATH/$PLATFORM/lib" rm -rf "$SYSTEM_PATH/$PLATFORM/paks/MinUI.pak" - ./unzip -o "$UPDATE_PATH" -d "$SDCARD_PATH" + log_install "extracting $UPDATE_PATH" + ./unzip -o "$UPDATE_PATH" -d "$SDCARD_PATH" >> "$INSTALL_LOG" 2>&1 + unzip_status=$? + log_install "extracting $UPDATE_PATH exited $unzip_status" + [ "$unzip_status" = "0" ] || exit "$unzip_status" rm -f "$UPDATE_PATH" fi if [ -x "$SYSTEM_PATH/$PLATFORM/bin/install.sh" ]; then - "$SYSTEM_PATH/$PLATFORM/bin/install.sh" + log_install "running platform install.sh" + "$SYSTEM_PATH/$PLATFORM/bin/install.sh" >> "$INSTALL_LOG" 2>&1 + install_status=$? + log_install "platform install.sh exited $install_status" + [ "$install_status" = "0" ] || exit "$install_status" fi LAUNCH_PATH="$SYSTEM_PATH/$PLATFORM/paks/MinUI.pak/launch.sh" if [ -x "$LAUNCH_PATH" ]; then + log_install "exec $LAUNCH_PATH" exec "$LAUNCH_PATH" fi +log_install "missing launch path; powering off" poweroff diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 74ad7d5de..f88676b3a 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -18,6 +18,7 @@ REQUIRES_SDL2=other/sdl2 SDL2_COMMIT=d4a7d7503524cc469fe775242f3f925d4dd56c88 FILEMGR_PATCH=patches/NextCommander-h700.patch FILEMGR_STAMP=.patched-h700-v2 +SDL2_STAMP=.configured-nextui-h700-v2 all: readmes @@ -26,7 +27,8 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip - cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static + cd $(REQUIRES_SDL2) && ([ -f $(SDL2_STAMP) ] || ([ ! -f Makefile ] || make clean)) + cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --disable-alsa-shared --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-libudev --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static --disable-libsamplerate-shared && touch $(SDL2_STAMP) grep -q '^#define SDL_VIDEO_DRIVER_MALI 1' $(REQUIRES_SDL2)/include/SDL_config.h cd $(REQUIRES_SDL2) && make -j && make install mkdir -p $(REQUIRES_SDL2)/output From 319b70376393ed279d2d1b7dd21e9e452f1fd9a6 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 20:31:42 +0200 Subject: [PATCH 13/76] fix(h700): restore evdev input Replay the H700 raw evdev input restoration from the previous branch so built-in controls are read reliably on stock H700 images after rebasing onto c24b36df. Keep the debug wifi launch guard from the same fix, but intentionally leave out the shared renderer and PLATFORM_STRAIGHT_ALPHA_UI workaround so this branch stays on the known-good pre-alpha graphics stack. --- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 4 +- workspace/h700/platform/platform.c | 309 +++++++++++++++++- 2 files changed, 303 insertions(+), 10 deletions(-) diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 200387233..20e04175c 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -145,7 +145,7 @@ if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then fi killall brightCtrl.bin cexpert 2>/dev/null || true -if [ -f "$DEBUG_KEEP_NETWORK_PATH" ]; then +if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] || [ -f "$DEBUG_WIFI_CONF" ]; then start_debug_network else systemctl stop NetworkManager 2>/dev/null || true @@ -186,7 +186,7 @@ else fi wifion=$(nextval.elf wifi | sed -n 's/.*"wifi": \([0-9]*\).*/\1/p') -if [ -f "$DEBUG_KEEP_NETWORK_PATH" ]; then +if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] || [ -f "$DEBUG_WIFI_CONF" ]; then echo "launch: skipping NextUI wifi init for debug" >> "$LAUNCH_LOG" elif [ "$wifion" = "0" ]; then "$SYSTEM_PATH/etc/wifi/wifi_init.sh" stop > /dev/null 2>&1 & diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index b2345e654..52bac991b 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -31,6 +31,146 @@ int is_rg34xx = 0; int is_cube = 0; static int wake_fd = -1; +#define H700_INPUT_COUNT 12 +#define EV_KEY 0x01 +#define EV_ABS 0x03 + +// From the old rg35xxplus platform: built-in controls expose evdev raw codes, +// while SDL joystick enumeration is unreliable on stock H700 images. +#define RAW_HATY 17 +#define RAW_HATX 16 +#define RAW_LSY 3 +#define RAW_LSX 2 +#define RAW_RSY 5 +#define RAW_RSX 4 + +struct input_event { + struct timeval time; + uint16_t type; + uint16_t code; + int32_t value; +}; + +static int input_fds[H700_INPUT_COUNT]; +static uint32_t last_input_scan = 0; + +static void close_evdev_input(int i) { + if (i < 0 || i >= H700_INPUT_COUNT || input_fds[i] < 0) + return; + close(input_fds[i]); + input_fds[i] = -1; +} + +static void open_evdev_input(int i) { + char path[64]; + snprintf(path, sizeof(path), "/dev/input/event%i", i); + + input_fds[i] = open(path, O_RDONLY | O_NONBLOCK | O_CLOEXEC); + if (input_fds[i] < 0) + return; + + char name_path[128]; + char name[256] = {0}; + snprintf(name_path, sizeof(name_path), "/sys/class/input/event%i/device/name", i); + getFile(name_path, name, sizeof(name)); + if (name[0]) + LOG_info("Opening input event%i: %s\n", i, name); + else + LOG_info("Opening input event%i\n", i); +} + +static void scan_evdev_inputs(void) { + uint32_t now = SDL_GetTicks(); + if (last_input_scan && now - last_input_scan < 2000) + return; + last_input_scan = now; + + for (int i = 0; i < H700_INPUT_COUNT; i++) { + char path[64]; + snprintf(path, sizeof(path), "/dev/input/event%i", i); + int connected = exists(path); + if (input_fds[i] < 0 && connected) + open_evdev_input(i); + else if (input_fds[i] >= 0 && !connected) + close_evdev_input(i); + } +} + +static void apply_button_state(int btn, int id, int pressed, uint32_t tick) { + if (btn == BTN_NONE || id < 0) + return; + + if (!pressed) { + if (pad.is_pressed & btn) { + pad.is_pressed &= ~btn; + pad.just_repeated &= ~btn; + pad.just_released |= btn; + } + } + else if ((pad.is_pressed & btn) == BTN_NONE) { + pad.just_pressed |= btn; + pad.just_repeated |= btn; + pad.is_pressed |= btn; + pad.repeat_at[id] = tick + PAD_REPEAT_DELAY; + } +} + +static int button_from_code(int code, int *id) { + if (code == CODE_UP) { *id = BTN_ID_DPAD_UP; return BTN_DPAD_UP; } + else if (code == CODE_DOWN) { *id = BTN_ID_DPAD_DOWN; return BTN_DPAD_DOWN; } + else if (code == CODE_LEFT) { *id = BTN_ID_DPAD_LEFT; return BTN_DPAD_LEFT; } + else if (code == CODE_RIGHT) { *id = BTN_ID_DPAD_RIGHT; return BTN_DPAD_RIGHT; } + else if (code == CODE_A) { *id = BTN_ID_A; return BTN_A; } + else if (code == CODE_B) { *id = BTN_ID_B; return BTN_B; } + else if (code == CODE_X) { *id = BTN_ID_X; return BTN_X; } + else if (code == CODE_Y) { *id = BTN_ID_Y; return BTN_Y; } + else if (code == CODE_START) { *id = BTN_ID_START; return BTN_START; } + else if (code == CODE_SELECT) { *id = BTN_ID_SELECT; return BTN_SELECT; } + else if (code == CODE_MENU) { *id = BTN_ID_MENU; return BTN_MENU; } + else if (code == CODE_MENU_ALT) { *id = BTN_ID_MENU; return BTN_MENU; } + else if (code == CODE_L1) { *id = BTN_ID_L1; return BTN_L1; } + else if (code == CODE_L2) { *id = BTN_ID_L2; return BTN_L2; } + else if (code == CODE_L3) { *id = BTN_ID_L3; return BTN_L3; } + else if (code == CODE_R1) { *id = BTN_ID_R1; return BTN_R1; } + else if (code == CODE_R2) { *id = BTN_ID_R2; return BTN_R2; } + else if (code == CODE_R3) { *id = BTN_ID_R3; return BTN_R3; } + else if (code == CODE_PLUS) { *id = BTN_ID_PLUS; return BTN_PLUS; } + else if (code == CODE_MINUS) { *id = BTN_ID_MINUS; return BTN_MINUS; } + else if (code == CODE_POWER) { *id = BTN_ID_POWER; return BTN_POWER; } + return BTN_NONE; +} + +static int button_from_joy(int joy, int *id) { + if (joy == JOY_UP) { *id = BTN_ID_DPAD_UP; return BTN_DPAD_UP; } + else if (joy == JOY_DOWN) { *id = BTN_ID_DPAD_DOWN; return BTN_DPAD_DOWN; } + else if (joy == JOY_LEFT) { *id = BTN_ID_DPAD_LEFT; return BTN_DPAD_LEFT; } + else if (joy == JOY_RIGHT) { *id = BTN_ID_DPAD_RIGHT; return BTN_DPAD_RIGHT; } + else if (joy == JOY_A) { *id = BTN_ID_A; return BTN_A; } + else if (joy == JOY_B) { *id = BTN_ID_B; return BTN_B; } + else if (joy == JOY_X) { *id = BTN_ID_X; return BTN_X; } + else if (joy == JOY_Y) { *id = BTN_ID_Y; return BTN_Y; } + else if (joy == JOY_START) { *id = BTN_ID_START; return BTN_START; } + else if (joy == JOY_SELECT) { *id = BTN_ID_SELECT; return BTN_SELECT; } + else if (joy == JOY_MENU) { *id = BTN_ID_MENU; return BTN_MENU; } + else if (joy == JOY_MENU_ALT) { *id = BTN_ID_MENU; return BTN_MENU; } + else if (joy == JOY_MENU_ALT2){ *id = BTN_ID_MENU; return BTN_MENU; } + else if (joy == JOY_L1) { *id = BTN_ID_L1; return BTN_L1; } + else if (joy == JOY_L2) { *id = BTN_ID_L2; return BTN_L2; } + else if (joy == JOY_L3) { *id = BTN_ID_L3; return BTN_L3; } + else if (joy == JOY_R1) { *id = BTN_ID_R1; return BTN_R1; } + else if (joy == JOY_R2) { *id = BTN_ID_R2; return BTN_R2; } + else if (joy == JOY_R3) { *id = BTN_ID_R3; return BTN_R3; } + else if (joy == JOY_PLUS) { *id = BTN_ID_PLUS; return BTN_PLUS; } + else if (joy == JOY_MINUS) { *id = BTN_ID_MINUS; return BTN_MINUS; } + else if (joy == JOY_POWER) { *id = BTN_ID_POWER; return BTN_POWER; } + return BTN_NONE; +} + +static void apply_hat_axis(int neg_id, int pos_id, int value, uint32_t tick) { + apply_button_state(1 << neg_id, neg_id, value < 0, tick); + apply_button_state(1 << pos_id, pos_id, value > 0, tick); +} + static void detect_device(void) { char *device = getenv("DEVICE"); char *model = getenv("RGXX_MODEL"); @@ -49,8 +189,13 @@ static SDL_Joystick **joysticks = NULL; static int num_joysticks = 0; void PLAT_initInput(void) { detect_device(); + for (int i = 0; i < H700_INPUT_COUNT; i++) + input_fds[i] = -1; + last_input_scan = 0; + if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) < 0) LOG_error("Failed initializing joysticks: %s\n", SDL_GetError()); + SDL_JoystickEventState(SDL_ENABLE); num_joysticks = SDL_NumJoysticks(); if (num_joysticks > 0) { joysticks = (SDL_Joystick **)malloc(sizeof(SDL_Joystick *) * num_joysticks); @@ -59,9 +204,13 @@ void PLAT_initInput(void) { LOG_info("Opening joystick %d: %s\n", i, SDL_JoystickName(joysticks[i])); } } + scan_evdev_inputs(); } void PLAT_quitInput(void) { + for (int i = 0; i < H700_INPUT_COUNT; i++) + close_evdev_input(i); + if (joysticks) { for (int i = 0; i < num_joysticks; i++) { if (SDL_JoystickGetAttached(joysticks[i])) { @@ -80,6 +229,158 @@ void PLAT_quitInput(void) { SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } +static void poll_sdl_input(uint32_t tick) { + SDL_Event event; + while (SDL_PollEvent(&event)) { + int btn = BTN_NONE; + int pressed = 0; + int id = -1; + + if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYBUTTONUP) { + pressed = event.type == SDL_JOYBUTTONDOWN; + btn = button_from_joy(event.jbutton.button, &id); + } + else if (event.type == SDL_JOYHATMOTION) { + int hat = event.jhat.value; + apply_button_state(BTN_DPAD_UP, BTN_ID_DPAD_UP, hat & SDL_HAT_UP, tick); + apply_button_state(BTN_DPAD_DOWN, BTN_ID_DPAD_DOWN, hat & SDL_HAT_DOWN, tick); + apply_button_state(BTN_DPAD_LEFT, BTN_ID_DPAD_LEFT, hat & SDL_HAT_LEFT, tick); + apply_button_state(BTN_DPAD_RIGHT, BTN_ID_DPAD_RIGHT, hat & SDL_HAT_RIGHT, tick); + continue; + } + else if (event.type == SDL_JOYAXISMOTION) { + int axis = event.jaxis.axis; + int val = event.jaxis.value; + + if (axis == AXIS_L2) { + btn = BTN_L2; + id = BTN_ID_L2; + pressed = val > 0; + } + else if (axis == AXIS_R2) { + btn = BTN_R2; + id = BTN_ID_R2; + pressed = val > 0; + } + else if (axis == AXIS_LX) { + pad.laxis.x = val; + PAD_setAnalog(BTN_ID_ANALOG_LEFT, BTN_ID_ANALOG_RIGHT, val, tick + PAD_REPEAT_DELAY); + continue; + } + else if (axis == AXIS_LY) { + pad.laxis.y = val; + PAD_setAnalog(BTN_ID_ANALOG_UP, BTN_ID_ANALOG_DOWN, val, tick + PAD_REPEAT_DELAY); + continue; + } + else if (axis == AXIS_RX) { + pad.raxis.x = val; + continue; + } + else if (axis == AXIS_RY) { + pad.raxis.y = val; + continue; + } + + if (!pressed && btn != BTN_NONE && !(pad.is_pressed & btn)) + btn = BTN_NONE; + } + else if (event.type == SDL_QUIT) { + PWR_powerOff(0); + continue; + } + else if (event.type == SDL_JOYDEVICEADDED || event.type == SDL_JOYDEVICEREMOVED) { + PAD_update(&event); + continue; + } + + apply_button_state(btn, id, pressed, tick); + } +} + +static void poll_evdev_input(uint32_t tick) { + struct input_event event; + + for (int i = 0; i < H700_INPUT_COUNT; i++) { + int input = input_fds[i]; + if (input < 0) + continue; + + errno = 0; + while (read(input, &event, sizeof(event)) == sizeof(event)) { + if (event.type != EV_KEY && event.type != EV_ABS) + continue; + + int btn = BTN_NONE; + int pressed = 0; + int id = -1; + int code = event.code; + int value = event.value; + + if (event.type == EV_KEY) { + if (value > 1) + continue; + pressed = value; + btn = button_from_code(code, &id); + } + else if (event.type == EV_ABS) { + if (code == RAW_HATY) { + apply_hat_axis(BTN_ID_DPAD_UP, BTN_ID_DPAD_DOWN, value, tick); + continue; + } + else if (code == RAW_HATX) { + apply_hat_axis(BTN_ID_DPAD_LEFT, BTN_ID_DPAD_RIGHT, value, tick); + continue; + } + else if (code == RAW_LSX) { + pad.laxis.x = (value * 32767) / 4096; + PAD_setAnalog(BTN_ID_ANALOG_LEFT, BTN_ID_ANALOG_RIGHT, pad.laxis.x, tick + PAD_REPEAT_DELAY); + continue; + } + else if (code == RAW_LSY) { + pad.laxis.y = (value * 32767) / 4096; + PAD_setAnalog(BTN_ID_ANALOG_UP, BTN_ID_ANALOG_DOWN, pad.laxis.y, tick + PAD_REPEAT_DELAY); + continue; + } + else if (code == RAW_RSX) { + pad.raxis.x = (value * 32767) / 4096; + continue; + } + else if (code == RAW_RSY) { + pad.raxis.y = (value * 32767) / 4096; + continue; + } + } + + apply_button_state(btn, id, pressed, tick); + } + + if (errno && errno != EAGAIN && errno != EWOULDBLOCK) + close_evdev_input(i); + } +} + +void PLAT_pollInput(void) { + pad.just_pressed = BTN_NONE; + pad.just_released = BTN_NONE; + pad.just_repeated = BTN_NONE; + + uint32_t tick = SDL_GetTicks(); + for (int i = 0; i < BTN_ID_COUNT; i++) { + int btn = 1 << i; + if ((pad.is_pressed & btn) && (tick >= pad.repeat_at[i])) { + pad.just_repeated |= btn; + pad.repeat_at[i] += PAD_REPEAT_INTERVAL; + } + } + + scan_evdev_inputs(); + poll_sdl_input(tick); + poll_evdev_input(tick); + + if (lid.has_lid && PLAT_lidChanged(NULL)) + pad.just_released |= BTN_SLEEP; +} + void PLAT_updateInput(const SDL_Event *event) { switch (event->type) { case SDL_JOYDEVICEADDED: { @@ -250,14 +551,6 @@ void PLAT_powerOff(int reboot) { int PLAT_supportsDeepSleep(void) { return 1; } #define LID_PATH "/sys/class/power_supply/axp2202-battery/hallkey" -#define EV_KEY 0x01 - -struct input_event { - struct timeval time; - uint16_t type; - uint16_t code; - int32_t value; -}; void PLAT_initLid(void) { lid.has_lid = exists(LID_PATH); From 4c1a6a91761b6676d0fab8fdec3ef7fe5b730e72 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 21:17:41 +0200 Subject: [PATCH 14/76] fix(h700): repair picodrive clean core builds Picodrive's H700 patch already carried the FLTO filter needed by this platform, but clean rebuilds exposed two patch hygiene issues after the rebase. The hunk indentation was stale, and the parent core builder's PLATFORM=h700 value prevented Picodrive's included Makefile from selecting its libretro object list. Keep the H700 platform block for cross flags, force Picodrive's internal PLATFORM back to libretro for object selection, and preserve the existing FLTO filter so clean release builds link the core reproducibly. --- workspace/h700/cores/patches/picodrive.patch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workspace/h700/cores/patches/picodrive.patch b/workspace/h700/cores/patches/picodrive.patch index 27667e4d5..3eccb3658 100644 --- a/workspace/h700/cores/patches/picodrive.patch +++ b/workspace/h700/cores/patches/picodrive.patch @@ -25,7 +25,8 @@ index 0d1dc08f81a11cef6b3b7238367b1ff27fcf1ead..1f87c76c3242023c4095f0c9087c5276 + CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a + HAVE_NEON = 1 + BUILTIN_GPU = neon -+ ARCH = aarch64 ++ ARCH = aarch64 ++ override PLATFORM := libretro + ifeq (,$(DEBUG)) + LDFLAGS += -s + endif From f45890b842574e96bc92f90b2866a9b92f861213 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 22:00:36 +0200 Subject: [PATCH 15/76] fix(h700): preserve bitmap alpha blits Normalize the shared asset sheet on H700 after SDL_image loads it and force source surfaces through a save/restore alpha blend path when blitting tinted bitmaps. The branch is gated by the existing PLATFORM string so tg5040 and tg5050 keep the pre-alpha rendering behavior while H700 can work around its SDL2/SDL_image bitmap handling. --- workspace/all/common/api.c | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/workspace/all/common/api.c b/workspace/all/common/api.c index 19f3f5439..1b07b4834 100644 --- a/workspace/all/common/api.c +++ b/workspace/all/common/api.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -98,6 +99,17 @@ GFX_Fonts font; /////////////////////////////// +static inline int GFX_needsBitmapBlendCompat(void) +{ +#ifdef PLATFORM + return strcmp(PLATFORM, "h700") == 0; +#else + return 0; +#endif +} + +/////////////////////////////// + uint32_t THEME_COLOR1; uint32_t THEME_COLOR2; uint32_t THEME_COLOR3; @@ -454,6 +466,25 @@ SDL_Surface *GFX_init(int mode) if (!exists(asset_path)) LOG_info("missing assets, you're about to segfault dummy!\n"); gfx.assets = IMG_Load(asset_path); + if (!gfx.assets) + { + LOG_error("failed to load assets %s: %s\n", asset_path, IMG_GetError()); + } + else if (GFX_needsBitmapBlendCompat()) + { + uint32_t format = gfx.screen && gfx.screen->format ? gfx.screen->format->format : SDL_PIXELFORMAT_ARGB8888; + SDL_Surface *converted = SDL_ConvertSurfaceFormat(gfx.assets, format, 0); + if (converted) + { + SDL_FreeSurface(gfx.assets); + gfx.assets = converted; + } + else + { + LOG_warn("failed to normalize H700 assets %s: %s\n", asset_path, SDL_GetError()); + } + SDL_SetSurfaceBlendMode(gfx.assets, SDL_BLENDMODE_BLEND); + } input_rects[INPUT_BUTTON_A] = (SDL_Rect){SCALE4(0, 0, BUTTON_SIZE, BUTTON_SIZE)}; input_rects[INPUT_BUTTON_B] = (SDL_Rect){SCALE4(20, 0, BUTTON_SIZE, BUTTON_SIZE)}; @@ -1698,6 +1729,53 @@ void GFX_ApplyRoundedCorners_8888(SDL_Surface *surface, SDL_Rect *rect, int radi void GFX_blitSurfaceColor(SDL_Surface *src, SDL_Rect *src_rect, SDL_Surface *dst, SDL_Rect *dst_rect, uint32_t asset_color) { + if (GFX_needsBitmapBlendCompat()) + { + uint32_t tint = asset_color; + if (asset_color != RGB_WHITE) + { + if (asset_color == THEME_COLOR1) + tint = THEME_COLOR1_255; + else if (asset_color == THEME_COLOR2) + tint = THEME_COLOR2_255; + else if (asset_color == THEME_COLOR3) + tint = THEME_COLOR3_255; + else if (asset_color == THEME_COLOR4) + tint = THEME_COLOR4_255; + else if (asset_color == THEME_COLOR5) + tint = THEME_COLOR5_255; + else if (asset_color == THEME_COLOR6) + tint = THEME_COLOR6_255; + else if (asset_color == THEME_COLOR7) + tint = THEME_COLOR7_255; + } + + Uint8 r = 255; + Uint8 g = 255; + Uint8 b = 255; + if (asset_color != RGB_WHITE) + { + r = (tint >> 16) & 0xFF; + g = (tint >> 8) & 0xFF; + b = tint & 0xFF; + } + + SDL_Color restore; + Uint8 restore_a; + SDL_BlendMode restore_blend; + SDL_GetSurfaceColorMod(src, &restore.r, &restore.g, &restore.b); + SDL_GetSurfaceAlphaMod(src, &restore_a); + SDL_GetSurfaceBlendMode(src, &restore_blend); + SDL_SetSurfaceColorMod(src, r, g, b); + SDL_SetSurfaceAlphaMod(src, 255); + SDL_SetSurfaceBlendMode(src, SDL_BLENDMODE_BLEND); + SDL_BlitSurface(src, src_rect, dst, dst_rect); + SDL_SetSurfaceColorMod(src, restore.r, restore.g, restore.b); + SDL_SetSurfaceAlphaMod(src, restore_a); + SDL_SetSurfaceBlendMode(src, restore_blend); + return; + } + // This could be a RAII if (asset_color != RGB_WHITE) { From 8004139076e7125a3b951b219e31082abd8183b0 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 22:16:34 +0200 Subject: [PATCH 16/76] Revert "fix(h700): preserve bitmap alpha blits" This reverts commit 7f229c2dd11a048c5e4add511c86becc66cba250. --- workspace/all/common/api.c | 78 -------------------------------------- 1 file changed, 78 deletions(-) diff --git a/workspace/all/common/api.c b/workspace/all/common/api.c index 1b07b4834..19f3f5439 100644 --- a/workspace/all/common/api.c +++ b/workspace/all/common/api.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -99,17 +98,6 @@ GFX_Fonts font; /////////////////////////////// -static inline int GFX_needsBitmapBlendCompat(void) -{ -#ifdef PLATFORM - return strcmp(PLATFORM, "h700") == 0; -#else - return 0; -#endif -} - -/////////////////////////////// - uint32_t THEME_COLOR1; uint32_t THEME_COLOR2; uint32_t THEME_COLOR3; @@ -466,25 +454,6 @@ SDL_Surface *GFX_init(int mode) if (!exists(asset_path)) LOG_info("missing assets, you're about to segfault dummy!\n"); gfx.assets = IMG_Load(asset_path); - if (!gfx.assets) - { - LOG_error("failed to load assets %s: %s\n", asset_path, IMG_GetError()); - } - else if (GFX_needsBitmapBlendCompat()) - { - uint32_t format = gfx.screen && gfx.screen->format ? gfx.screen->format->format : SDL_PIXELFORMAT_ARGB8888; - SDL_Surface *converted = SDL_ConvertSurfaceFormat(gfx.assets, format, 0); - if (converted) - { - SDL_FreeSurface(gfx.assets); - gfx.assets = converted; - } - else - { - LOG_warn("failed to normalize H700 assets %s: %s\n", asset_path, SDL_GetError()); - } - SDL_SetSurfaceBlendMode(gfx.assets, SDL_BLENDMODE_BLEND); - } input_rects[INPUT_BUTTON_A] = (SDL_Rect){SCALE4(0, 0, BUTTON_SIZE, BUTTON_SIZE)}; input_rects[INPUT_BUTTON_B] = (SDL_Rect){SCALE4(20, 0, BUTTON_SIZE, BUTTON_SIZE)}; @@ -1729,53 +1698,6 @@ void GFX_ApplyRoundedCorners_8888(SDL_Surface *surface, SDL_Rect *rect, int radi void GFX_blitSurfaceColor(SDL_Surface *src, SDL_Rect *src_rect, SDL_Surface *dst, SDL_Rect *dst_rect, uint32_t asset_color) { - if (GFX_needsBitmapBlendCompat()) - { - uint32_t tint = asset_color; - if (asset_color != RGB_WHITE) - { - if (asset_color == THEME_COLOR1) - tint = THEME_COLOR1_255; - else if (asset_color == THEME_COLOR2) - tint = THEME_COLOR2_255; - else if (asset_color == THEME_COLOR3) - tint = THEME_COLOR3_255; - else if (asset_color == THEME_COLOR4) - tint = THEME_COLOR4_255; - else if (asset_color == THEME_COLOR5) - tint = THEME_COLOR5_255; - else if (asset_color == THEME_COLOR6) - tint = THEME_COLOR6_255; - else if (asset_color == THEME_COLOR7) - tint = THEME_COLOR7_255; - } - - Uint8 r = 255; - Uint8 g = 255; - Uint8 b = 255; - if (asset_color != RGB_WHITE) - { - r = (tint >> 16) & 0xFF; - g = (tint >> 8) & 0xFF; - b = tint & 0xFF; - } - - SDL_Color restore; - Uint8 restore_a; - SDL_BlendMode restore_blend; - SDL_GetSurfaceColorMod(src, &restore.r, &restore.g, &restore.b); - SDL_GetSurfaceAlphaMod(src, &restore_a); - SDL_GetSurfaceBlendMode(src, &restore_blend); - SDL_SetSurfaceColorMod(src, r, g, b); - SDL_SetSurfaceAlphaMod(src, 255); - SDL_SetSurfaceBlendMode(src, SDL_BLENDMODE_BLEND); - SDL_BlitSurface(src, src_rect, dst, dst_rect); - SDL_SetSurfaceColorMod(src, restore.r, restore.g, restore.b); - SDL_SetSurfaceAlphaMod(src, restore_a); - SDL_SetSurfaceBlendMode(src, restore_blend); - return; - } - // This could be a RAII if (asset_color != RGB_WHITE) { From 0207493f43e70b110bb63e4622af9da9a8c4cf6f Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 8 Jul 2026 22:20:01 +0200 Subject: [PATCH 17/76] fix(h700): bundle 64-bit libpng12 for SDL2_image The tg5040-toolchain SDL2_image dlopens libpng12.so.0 at runtime. The H700 stock Ubuntu rootfs only provides libpng16 (aarch64) and a 32-bit libpng12 under /mnt/vendor/lib, so IMG_Load failed with 'wrong ELF class: ELFCLASS32' and every asset bitmap silently blitted from a NULL surface. Ship the toolchain's 64-bit libpng12 alongside the other bundled SDL runtime libraries. --- workspace/h700/makefile | 3 +++ workspace/h700/platform/makefile.copy | 1 + 2 files changed, 4 insertions(+) diff --git a/workspace/h700/makefile b/workspace/h700/makefile index f88676b3a..a5900d1e8 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -36,6 +36,9 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cp -a $(PREFIX)/lib/libSDL2_image*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -a $(PREFIX)/lib/libSDL2_ttf*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true cp -L $(PREFIX)/lib/libtinyalsa.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true + # SDL2_image dlopens libpng12.so.0 at runtime; the H700 stock OS only has + # a 32-bit copy under /mnt/vendor/lib, so bundle the toolchain's 64-bit one + cp -L $(PREFIX)/lib/libpng12.so.0 $(REQUIRES_SDL2)/output/ cd $(REQUIRES_FILEMGR) && ([ -f $(FILEMGR_STAMP) ] || (git checkout -- Makefile && git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch $(FILEMGR_STAMP))) cd $(REQUIRES_FILEMGR) && ([ -f output/.platform-h700 ] || make clean PLATFORM=h700) cd $(REQUIRES_FILEMGR) && make -j PLATFORM=h700 && touch output/.platform-h700 diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy index 919004d54..84e88f0b6 100644 --- a/workspace/h700/platform/makefile.copy +++ b/workspace/h700/platform/makefile.copy @@ -13,6 +13,7 @@ $(PLATFORM): cp ./workspace/$@/other/unzip60/unzip ./build/BOOT/common/$@/ cp -a ./workspace/$@/other/sdl2/output/libSDL2*.so* ./build/SYSTEM/$@/lib/ cp -a ./workspace/$@/other/sdl2/output/libtinyalsa.so* ./build/SYSTEM/$@/lib/ 2>/dev/null || true + cp -a ./workspace/$@/other/sdl2/output/libpng12.so* ./build/SYSTEM/$@/lib/ # rfkill cp ./workspace/$@/rfkill/rfkill.elf ./build/SYSTEM/$@/bin/ cp ./workspace/$@/other/evtest/evtest ./build/SYSTEM/$@/bin/ From b81fda1e2da93be0493909ec715ddb1d4f42960f Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 00:17:44 +0200 Subject: [PATCH 18/76] fix(h700): repair game launch under dash The emu pak launch scripts (cloned from tg5040) redirected minarch output with the bashism '&>'. H700 stock OS /bin/sh is dash, which parses it as 'background the command, then truncate the file' - so launch.sh exited immediately, the launch loop restarted nextui.elf, and games bounced straight back to the main screen. Use the POSIX '> file 2>&1' form instead, like the old rg35xxplus port did. With output captured, minarch still segfaulted in SND_init: PLAT_pickSampleRate called GetAudioSink(), but minarch deliberately runs SND_init before InitSettings(), so the msettings shared memory is not mapped yet (NULL->audiosink at offset 0x70). Match tg5040 and only consult PLAT_bluetoothConnected() there. Also fix the same '&>' bashism in a system() amixer call in msettings.c, which dash would background as well. --- skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh | 2 +- skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh | 2 +- workspace/h700/libmsettings/msettings.c | 2 +- workspace/h700/platform/platform.c | 4 +++- 27 files changed, 29 insertions(+), 27 deletions(-) diff --git a/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh index 81688be79..8ceb019a2 100755 --- a/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/32X.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh index ddb9c7afe..d18a787eb 100755 --- a/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/COLECO.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh index 4022ab817..e739e99e3 100755 --- a/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/FBN.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh index 280598bbc..780ad5456 100755 --- a/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/FDS.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh index 81688be79..8ceb019a2 100755 --- a/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/GG.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh index 796c1be58..598c1ca44 100755 --- a/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/MGBA.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh index f0b1bbc7f..706a81460 100755 --- a/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/MSX.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh index 138a2b10b..09ec144ee 100755 --- a/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/NGP.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh index 138a2b10b..09ec144ee 100755 --- a/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/NGPC.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh index b3de7565d..2e6658a91 100755 --- a/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/P8.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh index 7bf829940..3d92d15cc 100755 --- a/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/PCE.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh index 098f76f1c..4f9cbbf4d 100755 --- a/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/PKM.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh index 81688be79..8ceb019a2 100755 --- a/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/SEGACD.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh index 81688be79..8ceb019a2 100755 --- a/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/SG1000.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh index 796c1be58..598c1ca44 100755 --- a/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/SGB.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh index 81688be79..8ceb019a2 100755 --- a/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/SMS.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh index 331d02280..09cc58d7a 100755 --- a/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/SUPA.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh b/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh index e5146dd57..4094998e9 100755 --- a/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh +++ b/skeleton/EXTRAS/Emus/h700/VB.pak/launch.sh @@ -12,4 +12,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh index 280598bbc..780ad5456 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/FC.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh index 9143f24c9..9b93f4e5d 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/GB.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh index 5678aaca7..0ed0b8f3f 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/GBA.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh index 9143f24c9..9b93f4e5d 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/GBC.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh index 81688be79..8ceb019a2 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/MD.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh index e3ba5ac06..d15d0b984 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh index 155233127..efbb14e2c 100755 --- a/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/Emus/SFC.pak/launch.sh @@ -11,4 +11,4 @@ mkdir -p "$SAVES_PATH/$EMU_TAG" mkdir -p "$CHEATS_PATH/$EMU_TAG" HOME="$USERDATA_PATH" cd "$HOME" -minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" &> "$LOGS_PATH/$EMU_TAG.txt" +minarch.elf "$CORES_PATH/${EMU_EXE}_libretro.so" "$ROM" > "$LOGS_PATH/$EMU_TAG.txt" 2>&1 diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index 0575e4024..b4459f71e 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -1187,7 +1187,7 @@ void SetRawVolume(int val) { // in: 0-100 if (get_a2dp_simple_control_name(ctl_name, sizeof(ctl_name))) { char cmd[256]; // Update volume on the device - snprintf(cmd, sizeof(cmd), "amixer sset \"%s\" -M %d%% &> /dev/null", ctl_name, val); + snprintf(cmd, sizeof(cmd), "amixer sset \"%s\" -M %d%% > /dev/null 2>&1", ctl_name, val); system(cmd); //printf("Set '%s' to %d%%\n", ctl_name, val); fflush(stdout); } diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 52bac991b..91ed6e2a7 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -695,7 +695,9 @@ void PLAT_setRumble(int strength) { int PLAT_pickSampleRate(int requested, int max) { // bluetooth: allow limiting the maximum to improve compatibility - if(GetAudioSink() == AUDIO_SINK_BLUETOOTH && PLAT_bluetoothConnected()) + // NOTE: called from SND_init before InitSettings, so msettings shared + // memory (GetAudioSink) must not be touched here + if(PLAT_bluetoothConnected()) return MIN(requested, CFG_getBluetoothSamplingrateLimit()); return MIN(requested, max); From 85ebc5af252415ea06b0bcb68c561dc09c2fe117 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 00:42:47 +0200 Subject: [PATCH 19/76] fix(h700): repair glitchy audio via dlopen'd ALSA SDL2 was configured with --disable-alsa-shared, direct-linking the tg5040 toolchain's libasound, which is built without symbol versioning. The resulting unversioned references resolve against the H700 stock Ubuntu's versioned libasound to the legacy ALSA_0.9 hw_params symbols (value semantics, chosen value as return) instead of the new pointer API. snd_pcm_hw_params_set_rate_near then read SDL's pointer argument as the requested rate and clamped it to the hardware max: the codec ran at 192 kHz while SDL believed 32.768 kHz, so only ~17% of every buffer was real audio and games sounded like short slivers with silence gaps. Configure with --enable-alsa-shared instead: SDL dlopens libasound at runtime and dlsym always resolves the default (new-API) symbols. The codec now honors the negotiated rate (e.g. req 32768 -> rec 32000) and minarch's resampler bridges the difference. Bump the SDL2 stamp to force a reconfigure. --- workspace/h700/makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workspace/h700/makefile b/workspace/h700/makefile index a5900d1e8..5bf720418 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -18,7 +18,7 @@ REQUIRES_SDL2=other/sdl2 SDL2_COMMIT=d4a7d7503524cc469fe775242f3f925d4dd56c88 FILEMGR_PATCH=patches/NextCommander-h700.patch FILEMGR_STAMP=.patched-h700-v2 -SDL2_STAMP=.configured-nextui-h700-v2 +SDL2_STAMP=.configured-nextui-h700-v3 all: readmes @@ -28,7 +28,7 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip cd $(REQUIRES_SDL2) && ([ -f $(SDL2_STAMP) ] || ([ ! -f Makefile ] || make clean)) - cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --disable-alsa-shared --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-libudev --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static --disable-libsamplerate-shared && touch $(SDL2_STAMP) + cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-alsa-shared --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-libudev --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static --disable-libsamplerate-shared && touch $(SDL2_STAMP) grep -q '^#define SDL_VIDEO_DRIVER_MALI 1' $(REQUIRES_SDL2)/include/SDL_config.h cd $(REQUIRES_SDL2) && make -j && make install mkdir -p $(REQUIRES_SDL2)/output From c58f0d1c48c891f996b2d354979323c72dcadd36 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 04:11:59 +0200 Subject: [PATCH 20/76] docs(h700): restructure port plan into reference documentation The implementation is complete (working beta on RG40XXV), so the plan docs are rewritten as-implemented: deviations recorded with reasoning, branch-review files verified against the code and folded into the topical docs, testing matrix filled with actual results, and a prioritized roadmap added for the remaining work. --- docs/h700-port/00-device-facts.md | 241 ++++++++++-------- docs/h700-port/01-toolchain-and-build.md | 222 ++++++++-------- docs/h700-port/02-boot-and-installer.md | 222 ++++++++-------- docs/h700-port/03-platform-layer.md | 205 ++++++++------- docs/h700-port/04-video-display.md | 182 ++++++------- docs/h700-port/05-audio.md | 104 +++++--- docs/h700-port/06-power-sleep-battery.md | 163 ++++++------ docs/h700-port/07-wifi-bluetooth.md | 115 ++++----- docs/h700-port/08-testing-and-rollout.md | 85 ------ docs/h700-port/08-testing-status.md | 86 +++++++ docs/h700-port/09-branch-review.md | 164 ------------ docs/h700-port/09-roadmap.md | 89 +++++++ docs/h700-port/10-branch-review-supplement.md | 104 -------- docs/h700-port/README.md | 132 +++++----- 14 files changed, 960 insertions(+), 1154 deletions(-) delete mode 100644 docs/h700-port/08-testing-and-rollout.md create mode 100644 docs/h700-port/08-testing-status.md delete mode 100644 docs/h700-port/09-branch-review.md create mode 100644 docs/h700-port/09-roadmap.md delete mode 100644 docs/h700-port/10-branch-review-supplement.md diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index ccb3e3447..c4d344f59 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -1,89 +1,132 @@ -# 00 — Device & OS Facts (verified 2026-07-08) +# 00 — Device & OS Facts -Everything in this document was verified live on the actual hardware over SSH, or -recovered from git history. Treat it as the ground truth the rest of the plan builds on. +Ground truth for the H700 platform. Everything here was verified live on hardware +over SSH (probed 2026-07-08, corrections folded in from the implementation/review +cycle 2026-07-09) or recovered from git history. Re-run the probes after any +Anbernic stock-firmware update — paths have historically been stable, but the +`dmenu_ln`/muOS hooks are stockmod-version-dependent. -## Devices used +## Devices | Device | IP | Login | Role | |---|---|---|---| | TrimUI Brick (TG5040, A133P) | 192.168.34.81 | root / tina | Reference — NextUI runs perfectly | -| Anbernic RG40XXV (H700) | 192.168.34.55 | root / root | Port target #1 (running stockmod) | -| Anbernic RG34XXSP (H700) | — | — | Port target #2 (clamshell, lid sensor) | -| Anbernic RG28XX (H700) | — | — | Port target #3 (rotated 480×640 panel, phase 2) | +| Anbernic RG40XXV (H700) | 192.168.34.55 | root / root | Port target #1 (was running stockmod) — **primary tested device** | +| Anbernic RG34XXSP (H700) | — | — | Port target #2 (clamshell, lid sensor) — untested | +| Anbernic RG28XX (H700) | — | — | Port target #3 (rotated 480×640 panel) — untested | ## RG40XXV (H700) — probed live ### SoC / kernel / userland - SoC: Allwinner H700, device-tree compatible: `allwinner,h616`, `arm,sun50iw9p1` - `/proc/device-tree/model`: `sun50iw9` -- Kernel: `Linux ANBERNIC 4.9.170 #16 SMP PREEMPT aarch64` (built 2026-05-21 — latest stock) -- Userland: **Ubuntu 22.04 (Jammy) arm64, glibc 2.35** — full apt-capable distro +- Kernel: `Linux ANBERNIC 4.9.170 #16 SMP PREEMPT aarch64` (built 2026-05-21) +- Userland: **Ubuntu 22.04 (Jammy) arm64, glibc 2.35** — full apt-capable distro, + systemd, sshd out of the box. **`/bin/sh` is dash, not bash** — pak/launch scripts + must be POSIX (`&>` silently backgrounds under dash; this broke game launch once). - RAM: 1 GB (`MemTotal: 996628 kB`) -- CPU: 4× Cortex-A53 (`CPU part 0xd03`), cpufreq 480 MHz – 1.512 GHz +- CPU: 4× Cortex-A53 (`CPU part 0xd03`), cpufreq 480 MHz – 1.512 GHz, single cluster - governors: `interactive conservative ondemand userspace powersave performance schedutil` - - policy path: `/sys/devices/system/cpu/cpu0/cpufreq/` (single policy0-style cluster) + - policy path: `/sys/devices/system/cpu/cpu0/cpufreq/` +- Thermal zones (`/sys/class/thermal/thermal_zone*/type`): + **zone0=cpu, zone1=gpu, zone2=ve, zone3=ddr, zone4=battery** + (a first-draft platform.c read zone2 for GPU — wrong; it's the video engine) ### Display - `/dev/fb0`: 640×480 (virtual_size `640,480`); modes list includes `U:1280x1024p-59`, `U:640x480p-75`, `U:640x480p-59` (HDMI modes appear here) - Allwinner **disp2** driver: `/dev/disp` char device present -- `/sys/class/disp/disp/attr/` contains: `color_temperature`, `enhance_bright`, `enhance_contrast`, `enhance_saturation`, `enhance_mode`, `xres`, `yres`, … — **near-identical attribute set to TG5040** (same disp2 driver family) -- `color_temperature` currently `0` -- **No `/sys/class/backlight`** — brightness is done via `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` (0x102), same as TG5040/old-rg35xxplus. There is also a `brightness` file under the AXP battery sysfs (currently `3`) used by the stock `brightCtrl.bin` daemon. +- `/sys/class/disp/disp/attr/` contains: `color_temperature`, `enhance_bright`, `enhance_contrast`, `enhance_saturation`, `enhance_mode`, `xres`, `yres`, … — near-identical attribute set to TG5040 (same disp2 driver family) +- **No `/sys/class/backlight`** — brightness via `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` (0x102), args `{0, raw 0-255, 0, 0}`. Confirmed working in the shipped port (level curve in 03). There is also a `brightness` file under the AXP battery sysfs used by the stock `brightCtrl.bin` daemon — we kill that daemon at launch. +- Gamma LUT ioctls `DISP_LCD_SET_GAMMA_TABLE (0x10b)` / `GAMMA_CORRECTION_ENABLE (0x10c)` / `DISABLE (0x10d)` — **confirmed working**: displaycal RGB gains visibly act, persist, and survive sleep + game launch on RG40XXV. - Boot arg: `lcd_type=boe` (panel vendor in cmdline — may vary per unit) -- HDMI hotplug: `/sys/class/extcon/hdmi/` (extcon0). Old MinUI keymon used `/sys/class/extcon/hdmi/cable.0/state`, platform.c used `/sys/class/switch/hdmi/cable.0/state` — verify which exists on current firmware (extcon confirmed present). +- HDMI hotplug: `/sys/class/extcon/hdmi/` (extcon0); `state` and `cable.0/state` both probed by the shipped `GetHDMI()`. ### GPU — fully verified ✔ -- Mali-G31 MP2 ("bifrost"), kernel module `mali_kbase` **r20p0-01rel0 (UK 11.17)**, `/dev/mali0` present +- Mali-G31 MP2 ("bifrost"), kernel module `mali_kbase` **r20p0-01rel0 (UK 11.17)**, `/dev/mali0` - Vendor blob: monolithic `/usr/lib/libmali.so.0.20.0` (19 MB) — **ELF 64-bit aarch64**; `libEGL.so.1.4.0` / `libGLESv2.so.2.1.0` / `libGLESv1_CM.so` are 4 KB 64-bit shims over it - Blob version string: **`OpenGL ES 3.2 v1.r20p0-01rel0`** — userspace r20p0 matches kernel kbase r20p0 ✔ -- Blob EGL winsys = **fbdev** (`mali_egl_winsys_fbdev.c` paths in binary) — exactly what the SDL mali-fbdev backend targets -- Stock `/usr/lib/libSDL2-2.0.so.0.12.0` is **64-bit and built with the `mali` video driver** (only `mali` + `dummy` compiled in) — the stock OS itself uses the SDL-on-mali-fbdev stack we plan to use; usable as a bring-up crutch before our own SDL 2.28+ build lands -- Mesa copies also exist under `/usr/lib/aarch64-linux-gnu/` (`libEGL_mesa.so`) — irrelevant on 4.9 kernel (no DRM), the blob is what works +- Blob EGL winsys = **fbdev** (`mali_egl_winsys_fbdev.c` paths in binary) — what the SDL mali-fbdev backend targets. Confirmed end-to-end: NextUI's full GLES 3 shader pipeline (shaders, overlays, effects) runs on it. +- Stock `/usr/lib/libSDL2-2.0.so.0.12.0` is 64-bit, built with only the `mali` + `dummy` video drivers — the stock OS itself uses the SDL-on-mali-fbdev stack. +- **Do not link GLES via the tg5040 SDK's `glesv2` pkg-config** — it drags in libUMP (Utgard-era, absent on Mali-G31 stock). Link `-lGLESv2 -lEGL` directly. +- Mesa copies under `/usr/lib/aarch64-linux-gnu/` are irrelevant on the 4.9 kernel (no DRM). ### Audio -- ALSA cards: `0 audiocodec` (speaker/lineout), `1 ahubdam`, `2 ahubhdmi` (HDMI audio) +- ALSA cards: `0 audiocodec` (speaker/lineout/headphone), `1 ahubdam`, `2 ahubhdmi` (HDMI audio) - amixer simple controls on card 0: `'digital volume'`, `'lineout volume'`, `'LINEOUT'`, `'SPK'`, `'OutputL/R Mixer DACL/R'`, `'tx hub mode'` -- Old MinUI used `amixer sset 'lineout volume' %` — control still exists ✔ +- `digital volume` is an **attenuator with a reversed scale** (range 0–63; larger raw value = quieter). The shipped msettings writes `100 - val` percent — confirmed correct by listening on device. +- Codec supports 48000/44100 natively. +- **Stock libasound quirk (critical):** the device's `/usr/lib/libasound.so` exports both + versioned symbols and legacy unversioned `ALSA_0.9` value-semantic `snd_pcm_hw_params_set_*` + symbols. A binary cross-built against a libasound *without* symbol versioning (the tg5040 + SDK's) resolves the unversioned variants at load time → `set_rate_near` behaves like the + 0.9 API and clamped the codec to 192 kHz while SDL believed 32.768 kHz → sliced/glitchy + audio. Fix: build SDL2 with `--enable-alsa-shared` so it **dlopens** the device libasound + (dlsym picks the default/new-API symbols). See 05. +- Headphone jack: `snd_soc_sunxi_component_jack/parameters/jack_state` existed on the old + port and was "always 0"; **still unverified on 2026 firmware** — jack detection is not wired. ### Input -- `event0` — `axp2202-pek` (power button, PMIC) -- `event1` — `ANBERNIC-keys` (gpio-keys-polled): handlers `kbd js0 event1`; has KEY bits, ABS bits `0x3003c` (= ABS_Z, ABS_RX, ABS_RY, ABS_RZ + ABS_HAT0X/Y) and **FF bits (rumble via input FF!)** -- `event2` — `dierct-keys-polled` (volume keys, function keys) -- `/dev/input/js0` exists — the kernel already exposes the pad as a joystick -- `evtest` is available on the device for mapping discovery +- `event0` — `axp2202-pek` (power button, PMIC). KEY_POWER = 116. +- `event1` — `ANBERNIC-keys` (gpio-keys-polled): handlers `kbd js0 event1` + - KEY bits: {1, 114, 115, 304–316, 354} — **no d-pad keycodes**; the d-pad is delivered + as ABS_HAT0X/Y (the old port's UP 103 / DOWN 108 / LEFT 105 / RIGHT 106 codes do + **not** appear on current firmware) + - ABS bits `0x3003c` = ABS_Z, ABS_RX, ABS_RY, ABS_RZ (analog sticks, raw 0..4096, + scale ×32767/4096) + ABS_HAT0X/Y (d-pad) + - FF bits present (input-FF rumble is theoretically available; port uses `moto` sysfs instead) +- `event2` — `dierct-keys-polled` (volume keys: PLUS 115, MINUS 114) +- `/dev/input/js0` exists; **SDL joystick enumeration of the built-in pad is unreliable on + the stock image** (udev interplay) — the shipped port reads evdev directly for built-in + controls and keeps SDL joystick (with `SDL_JOYSTICK_DISABLE_UDEV=1`) for BT controllers. +- Verified evdev button codes (event1): A 304, B 305, Y 306, X 307, L1 308, R1 309, + SELECT 310, START 311, MENU 312 (alt 354), L3 313, L2 314, R2 315, R3 316, + PLUS 115, MINUS 114. +- SDL joystick indices for the built-in pad (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 + SELECT=6 START=7 MENU=8, L3=9 L2=10 R2=11 R3=12, MINUS=15 PLUS=16; axes LX=0 LY=1 RX=2 RY=3. +- `evtest` is available on the device for mapping discovery. ### Power / battery / sleep -- `/sys/power/state`: **`freeze mem`** — real suspend-to-RAM supported (same as TG5040) -- **Verified live: `echo mem` suspend works** (device suspended via `rtcwake -m mem`); RTC alarm wake did **not** fire (device stayed asleep) → power button is the wake source; treat RTC wake as unavailable +- `/sys/power/state`: **`freeze mem`** — real suspend-to-RAM (same as TG5040) +- `echo mem` suspend works; wake source is the **power button** (AXP2202 PEK). + **RTC alarm wake does NOT fire** — no timed wake; don't build features on it. + ⚠️ In the shipped port, wake is **unreliable — the device sometimes hangs entering or + leaving suspend** (open issue, see 06 and 09-roadmap). - PMIC: **AXP2202** — `/sys/class/power_supply/axp2202-battery/` and `axp2202-usb/` -- Battery: `capacity` (58 at probe time), `status` (`Charging`), `voltage_now`, `temp`, `time_to_empty_now`, `time_to_full_now`, `charge_counter`, `health` -- Anbernic's kernel exposes extra controls under `axp2202-battery/`: - - `moto` — rumble motor (old MinUI RUMBLE_PATH; write 1/0) - - `work_led` — power LED (0=on, 1=off) +- Battery: `capacity`, `status`, `voltage_now`, `temp`, `time_to_empty_now`, + `time_to_full_now`, `charge_counter`, `health` +- Anbernic kernel extras under `axp2202-battery/`: + - `moto` — rumble motor (write 1/0) — **confirmed working** + - `work_led` — power LED (0=on, 1=off) — used by the port around backlight off/on - `workled_sleep` — LED behavior during sleep - `lowpwr_led`, `led_test` - - `hallkey` — **lid/hall sensor (RG34XXSP!)** (old MinUI LID_PATH; not present on non-clamshell units — probe per device) + - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — wired but unverified - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` - `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) -- `rtcwake` binary exists; RTC wake unreliable (see above) ### Network / Bluetooth -- WiFi: RTL8821CS (SDIO), module `8821cs`; interfaces `wlan0`, `wlan1` -- Stock runs **wpa_supplicant** (`-u -s -O /run/wpa_supplicant`) + **NetworkManager** + dnsmasq -- Bluetooth: `rtl_btlpm` module, `bluetoothd` running, `rtk_hciattach -n -s 115200 ttyS1 rtk_h5` (UART-attached Realtek BT) - -### Storage & partitions (single SD "TF1" holds the whole stock OS) +- WiFi: RTL8821CS (SDIO), module `8821cs`; interfaces `wlan0` (+`wlan1` virtual); + `/sys/class/net/wlan0/operstate` for link state +- Stock runs wpa_supplicant (`-u -s` dbus mode) + NetworkManager + dnsmasq — the port + stops NetworkManager and owns its own wpa_supplicant instance (07) +- **WiFi does not recover on its own after `mem` suspend** — confirmed; the suspend + script bounces it on resume (06/07) +- Bluetooth: `rtl_btlpm` module, `bluetoothd` (BlueZ 5.64), `rtk_hciattach -n -s 115200 + ttyS1 rtk_h5` already running at boot — no re-attach needed +- Ubuntu 22.04 ships **no bluealsa** and **no udhcpc** (DHCP = `dhclient`) + +### Storage & partitions (TF1 = the stock OS card) ``` mmcblk0p1..4 special/boot-resource/env/boot (u-boot, kernel, DTB…) mmcblk0p5 → / ext4 (Ubuntu rootfs) mmcblk0p6 → /mnt/vendor ext4 (stock frontend, emulators, libs) mmcblk0p7 → /mnt/data ext4 (also used as swap by loadapp.sh) -mmcblk0p8 → /mnt/mmc vfat (ROMs partition — user-visible FAT32) +mmcblk0p8 → /mnt/mmc vfat (ROMs partition — user-visible FAT32; our dmenu.bin lives here) ``` -- TF2 (second SD slot) mounts at **`/mnt/sdcard`** (empty at probe — no card inserted); `/mnt/udisk` also exists +- TF2 (second slot): `/dev/mmcblk1p1` → stock mountpoint `/mnt/sdcard`; the port + mounts it itself when needed (vfat or exfat via helper, with fsck repair — see 02) - DTB is read raw from `/dev/mmcblk0` by the old "Panel Fix" tool (offset 17954816, magic `d00dfeed`) +- Kernel 4.9 has no native exfat; boot shim falls back through vfat → exfat → auto ### Stock OS boot chain (THE hijack point) systemd `launcher.service` → `/etc/init.d/launcher.sh start` → starts `brightCtrl.bin` + @@ -103,19 +146,25 @@ fi ``` Consequences: -1. Dropping an executable named **`dmenu.bin` onto the FAT ROMs partition (`/mnt/mmc`)** makes the stock OS run it instead of its own frontend. No reflashing needed. This is exactly how old MinUI (and muOS "in-place") installed. -2. **stockmod caveat:** this RG40XXV has `/mnt/vendor/muos1.ini`, which *overrides* the `/mnt/mmc/dmenu.bin` check. The installer/docs must have the user boot into "stock" mode (or delete `muos1.ini`) for the hijack to engage. -3. `/tmp/.next` chain-exec exists in the stock wrapper, but NextUI runs its own launch loop anyway once dmenu.bin is ours. -4. `launcher.sh stop` kills via `SIGUSR1 dmenu.bin` — our binary should tolerate that. -5. LED config during app switch: stockmod writes to `axp2202-battery/work_led` from `led_*.cfg` files — harmless. +1. Dropping an executable named **`dmenu.bin` onto the FAT ROMs partition (`/mnt/mmc`)** + makes the stock OS run it instead of its own frontend. No reflashing. This is how the + shipped port (and old MinUI, and muOS "in-place") installs. +2. **stockmod caveat:** `muos1.ini`/`muos2.ini` in `/mnt/vendor` *override* the + `/mnt/mmc/dmenu.bin` check. The boot shim detects this and shows a "STOCK TARGET + REQUIRED" splash (currently non-blocking — see 09-roadmap). +3. `/tmp/.next` chain-exec exists in the stock wrapper; NextUI runs its own launch loop. +4. `launcher.sh stop` kills via `SIGUSR1 dmenu.bin` — the shim `trap`s USR1. +5. Model detection: `strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG` → `RGXX_MODEL` + env — **confirmed working on 2026 firmware** (RG40XXV). Fallback detectors if it ever + breaks: fb0 mode `480x640` → 28xx, `xres/yres` in /sys/class/disp, + `axp2202-battery/display_id`, DTB lcd timings. ## TG5040 (reference) — probed live - Kernel `4.9.191 aarch64` (TinaLinux/OpenWRT-flavored), **glibc 2.33** -- `/sys/power/state`: `freeze mem` (same suspend mechanism) -- `/sys/class/disp/disp/attr/` — same attribute set as H700 incl. `color_temperature` -- Also **no `/sys/class/backlight`** (brightness via `/dev/disp` ioctl) -- NextUI install: `/mnt/SDCARD/.system/tg5040/{bin,lib,cores,paks,shaders,etc}` — bundles `libmsettings.so`, `libsamplerate`, `libzip`, etc. **SDL2 comes from the stock OS** (`/usr/trimui/lib`), *not* bundled — on H700 we must bundle our own SDL2 (see 04). -- Running processes: `nextui.elf`, `keymon.elf` +- `/sys/power/state`: `freeze mem`; same disp2 attrs incl. `color_temperature`; + also no `/sys/class/backlight` +- NextUI install: `/mnt/SDCARD/.system/tg5040/{bin,lib,cores,paks,shaders,etc}`. + **SDL2 comes from the stock OS there** — on H700 we bundle our own (04). ## glibc compatibility conclusion @@ -124,67 +173,35 @@ Consequences: | TG5040 | 4.9.191 | aarch64 | 2.33 | | H700 stock | 4.9.170 | aarch64 | **2.35** | -Anything built by the existing tg5040 toolchain (targets glibc ≤ 2.33, aarch64, -cortex-a53) **loads and runs on the H700 stock OS unmodified** as far as libc is -concerned. The port can even bootstrap by copying tg5040-built binaries over for -early experiments. The H700 gets its own toolchain for cleanliness (see 01), but -there is no ABI wall between the two platforms. This is the single biggest -difference vs the old 32-bit rg35xxplus port (which targeted `arm-buildroot-linux-gnueabihf`). +tg5040-toolchain-built binaries (glibc ≤ 2.33, aarch64, cortex-a53) load and run on the +H700 stock OS unmodified — proven in production by this port, which builds entirely +inside the tg5040 image. No ABI wall. (Caveat discovered the hard way: libc compatibility +is not the whole story — see the libasound symbol-versioning and libpng12 pitfalls in 01.) ## Old rg35xxplus port — git archaeology summary -- Last full commit of the platform at its canonical path: **`8cd78866`** - (`git show 8cd78866:workspace/rg35xxplus/`). Renamed to `workspace/_unmaintained/` in `fc9a5f3a`, deleted in `57e53bbe`. -- Was **32-bit** (`arm-buildroot-linux-gnueabihf`, `-marm -mfpu=neon-fp-armv8`), toolchain `LoveRetro/rg35xxplus-toolchain` -- Custom SDL2 2.28.5 from **`JohnnyonFlame/SDL-malifbdev-rot`** (`--enable-video-mali`, everything else disabled) — Mali fbdev backend with rotation support -- Its verified /sys inventory (all confirmed still present on 2026 stock firmware, except where noted): - -| Subsystem | Path | -|---|---| -| Battery % | `/sys/class/power_supply/axp2202-battery/capacity` ✔ confirmed | -| Charging | `/sys/class/power_supply/axp2202-usb/online` | -| LED | `/sys/class/power_supply/axp2202-battery/work_led` ✔ confirmed | -| Rumble | `/sys/class/power_supply/axp2202-battery/moto` ✔ confirmed | -| Lid | `/sys/class/power_supply/axp2202-battery/hallkey` (SP models) | -| FB blank | `/sys/class/graphics/fb0/blank` | -| HDMI state | `/sys/class/switch/hdmi/cable.0/state` (platform.c) / `/sys/class/extcon/hdmi/cable.0/state` (keymon) — extcon ✔ confirmed | -| WiFi state | `/sys/class/net/wlan0/operstate` ✔ confirmed (wlan0 exists) | -| Brightness | `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` = `0x102`, arg `{0, raw 0-255, 0, 0}` | -| Volume | `amixer sset 'lineout volume' N%` ✔ control confirmed | -| Model string | `strings /mnt/vendor/bin/dmenu.bin \| grep ^RG` → `RGXX_MODEL` env | -| Headphone jack | `/sys/module/snd_soc_sunxi_component_jack/parameters/jack_state` (was noted "always 0" — needs re-test on 2026 firmware) | - -- evdev button codes (from old platform.c, `/dev/input/event1` = ANBERNIC-keys): -``` -UP 103 DOWN 108 LEFT 105 RIGHT 106 (d-pad also on ABS_HAT 16/17) -A 304 B 305 X 307 Y 306 -START 311 SELECT 310 MENU 312 (alt 354) -L1 308 L2 314 L3 313 R1 309 R2 315 R3 316 -PLUS 115 (vol+) MINUS 114 (vol-) POWER 116 -Analog: LSX=ABS_Z(2) LSY=ABS_RX(3) RSX=ABS_RY(4) RSY=ABS_RZ(5), raw 0..4096, scale *32767/4096 -``` - (ABS bits `0x3003c` on the live device confirm axes 2,3,4,5 + hats 16,17.) -- Panel geometry per model (old platform.h): - - default (RG35XX+/H/SP, RG40XX*): 640×480 - - RG34xx: 720×480 (`is_rg34xx`) - - RGcubexx: 720×720 (`is_cubexx`, only overscan-capable device) - - RG28XX: physically 480×640 portrait; fb modes contain `480x640`; old SDL-malifbdev-rot handled rotation inside SDL, `rotate=3` fallback via `SDL_RenderCopyEx` when mode reports portrait -- Panel-fix DTB timing table (SKU fingerprints, `lcd_dclk_freq-lcd_ht-lcd_vt`): - `24-770-526`=35xx2024/Plus, `24-770-528`=35xxH, `24-586-686`=28xx, `24-770-525`=35xxSP, - `24-770-522`=40xxH, `36-812-756`=CubeXX, `26-820-536`=34xx - -## Old-port scope note -The rg35xxplus material above is a **hardware-paths reference only** (sysfs paths, -evdev codes, boot hijack, panel table). Its software architecture (SDL_Renderer -compositing, 32-bit build, SDL1 warm-up shim, pre-shader NextUI APIs) is obsolete — -the port clones **tg5040** (GLES 3.x shader pipeline via `generic_video.c`, 64-bit) -and only borrows hardware constants from the old code. - -## Open items to verify when devices are in hand (tracked in 08-testing) -1. ~~ELF class + GLES version of the Mali blob~~ **RESOLVED ✔**: 64-bit, ES 3.2, r20p0, fbdev winsys (see GPU section). -2. `DISP_LCD_SET_GAMMA_TABLE` (0x10b) ioctl support on H700 4.9 disp2 (for displaycal) — write a 10-line test program. -3. `hallkey` presence on RG34XXSP. -4. RG28XX fb0 reports `480x640` on current firmware. -5. Whether stock `dmenu.bin` model string (`strings … | grep ^RG`) is still the best model detector on 2026 firmware, vs `axp2202-battery/display_id` / DTB timing. -6. Headphone jack detection path on 2026 firmware (old note said jack_state never changes). -7. WiFi behavior across suspend/resume (this probe session: device didn't come back on WiFi after `rtcwake` suspend until manual wake — determine if wlan needs a post-resume kick like tg5040's suspend script does). +- Last full commit at its canonical path: **`8cd78866`** + (`git show 8cd78866:workspace/rg35xxplus/`). Renamed to `workspace/_unmaintained/` + in `fc9a5f3a`, deleted in `57e53bbe`. +- Was **32-bit** (`arm-buildroot-linux-gnueabihf`), toolchain `LoveRetro/rg35xxplus-toolchain`; + custom SDL2 2.28.5 from `JohnnyonFlame/SDL-malifbdev-rot` (the same repo the new port uses, rebuilt 64-bit) +- Its sysfs inventory was the hardware-paths reference for this port; everything relevant + is re-verified and captured above. Remaining old-port material of interest: + - Panel geometry per model: default (RG35XX+/H/SP, RG40XX*) 640×480; RG34xx 720×480; + RGcubexx 720×720 (only overscan-capable device); RG28XX physically 480×640 portrait + - Panel-fix DTB timing table (SKU fingerprints, `lcd_dclk_freq-lcd_ht-lcd_vt`): + `24-770-526`=35xx2024/Plus, `24-770-528`=35xxH, `24-586-686`=28xx, `24-770-525`=35xxSP, + `24-770-522`=40xxH, `36-812-756`=CubeXX, `26-820-536`=34xx + - HDMI machinery: `hdmimon.sh` via `/sys/kernel/debug/dispdbg` + `fbset` + (`git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`) +- Scope note: the old port is a hardware-paths reference only; its software architecture + (SDL_Renderer compositing, 32-bit, pre-shader APIs) is obsolete. tg5040 was the code + clone base. + +## Facts still unverified (need hardware/testing) +1. `hallkey` presence + semantics on an actual RG34XXSP (lid code is written, untested). +2. RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path end-to-end. +3. Headphone jack detection on 2026 firmware (old note: `jack_state` never changes). +4. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. +5. Whether device glib (2.72) is ≥ what settings.elf links against — it loads and runs, + so empirically fine, but never explicitly checked. diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 135bf520b..315231f8f 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -1,108 +1,114 @@ -# 01 — Toolchain & Build System Integration - -## Goal -`make PLATFORM=h700 shell` / `make all` builds an `h700` platform exactly like tg5040 does -today: docker image pulled/built from `toolchains/h700-toolchain`, workspace mounted, all -apps + cores cross-compiled, packaged into `MinUI.zip`. - -## Decision: 64-bit aarch64 build (not 32-bit like the old port) - -The old rg35xxplus port was 32-bit (`arm-buildroot-linux-gnueabihf`) because the -2023-era stock OS was 32-bit. The 2026 stock OS is **Ubuntu 22.04 arm64 with glibc -2.35**, and the tg5040 platform is already aarch64/cortex-a53. Building 64-bit means: - -- `workspace/h700/platform/makefile.env` is a copy of tg5040's (`-mcpu=cortex-a53 -flto`, `SDL = SDL2`, `GL = GLES`) -- The entire tg5040 core list builds unchanged (same arch, same tuning) -- No NEON/hard-float 32-bit toolchain maintenance -- Gate (Phase 0): confirm the device's Mali blob `/usr/lib/libEGL.so` is 64-bit. - If it unexpectedly is not, fall back to shipping a known-good 64-bit H700 blob - (the same blob muOS/Knulli use on this SoC) in `.system/h700/lib` — the kernel - side (`mali_kbase` on 4.9) accepts both; blob and kernel driver version must match - (check `dmesg | grep mali` for the kbase version, expect r16p0-style for G31). - -## Toolchain: REUSE the tg5040 docker image (no new toolchain for bring-up) - -**Empirically validated:** a tg5040-toolchain-built `displaycal.elf` runs unmodified -on the RG40XXV (stockmod) *and* on an RG34XXSP running Knulli. Same arch, same -`-mcpu=cortex-a53` tuning, and the tg5040 toolchain's glibc (2.33) is older than the -targets' (stock 2.35, Knulli ≥2.33) — forward-compatible by construction. - -So: **`PLATFORM=h700` builds inside the existing `ghcr.io/loveretro/tg5040-toolchain` -image.** Implementation: `makefile.toolchain` derives the image name from -`$(PLATFORM)` — add a small override (e.g. `TOOLCHAIN_NAME ?= $(PLATFORM)` with -`h700: TOOLCHAIN_NAME=tg5040`, or an `IMAGE_OVERRIDE` var) rather than a new repo. - -What the tg5040 image already provides for h700: -- aarch64 cross GCC + cortex-a53 flags — apps and all 28 cores build as-is -- SDK sysroot with nearly every NextUI dep: SDL2_image/ttf, sqlite, libsamplerate, - libzip, curl/ssl, zlib/bz2/lzma/zstd/lz4, tinyalsa, GLES/EGL link stubs (runtime - symbols come from the device's libmali — standard ABI, link stubs are fine) -- all host tools the cores makefile needs - -The one real gap — **SDL2 itself**: on tg5040 the stock OS supplies runtime SDL2; on -H700 we ship our own mali-fbdev SDL2 (see 04) and must compile NextUI against *its* -headers/libs, not the SDK's. Solve it the way the old rg35xxplus port did: build the -custom SDL2 in-tree under `workspace/h700/other/sdl2/` via the platform `early` -target, install into a local prefix inside the container, and have -`workspace/h700/platform/makefile.env` put that prefix first in include/lib/pkg-config -order. Bundle the resulting `libSDL2*.so` (+ matching-version SDL2_image/ttf if the -SDK's are ABI-incompatible with SDL 2.28) into `.system/h700/lib`. - -Runtime-lib rule of thumb: anything linked from the SDK sysroot that isn't guaranteed -on the H700 stock OS gets bundled into `.system/h700/lib` (NextUI already does this on -tg5040 for samplerate/zip/etc. — extend the list; `ldd` every shipped .elf against a -clean stock rootfs as a CI-able check). - -**Dedicated `h700-toolchain` image: deferred, optional.** If/when divergence grows -(different SDL patches, extra deps like bluez-alsa, wanting jammy's exact glibc), a -thin image `FROM ghcr.io/loveretro/tg5040-toolchain` that pre-bakes the SDL2 build + -extras is the natural next step — cheap to add later, not a prerequisite. Revisit -after Phase 3. - -## Repo integration checklist - -- [ ] `makefile`: add `h700` to `PLATFORMS` (`PLATFORMS = tg5050 tg5040 h700`) -- [ ] `makefile.toolchain`: image-name override so `PLATFORM=h700` uses the tg5040 image (no `toolchains/h700-toolchain/` dir needed for now) -- [ ] `workspace/h700/` — new platform dir (contents defined in docs 03–07): - ``` - platform/{platform.c,platform.h,makefile.env,makefile.copy} - libmsettings/{msettings.c,msettings.h,makefile} - keymon/{keymon.c,makefile} - cores/makefile - install/{boot.sh,update.sh,logo.png} - boot/ (dmenu.bin builder — see 02) - makefile (platform-local `early`/`all` targets, modeled on tg5040's) - ``` -- [ ] `workspace/makefile`: tg5040 has special-cased steps (`rfkill`, `btmanager`, `poweroff_next`) under `ifeq ($(PLATFORM), tg5040)`. Add an h700 branch only for what h700 actually needs (likely `rfkill` only; plain `poweroff` works on systemd — verify — and bluez is modern already, no `btmanager` needed). -- [ ] `skeleton/SYSTEM/h700/` + `skeleton/EXTRAS/Tools/h700/` + `skeleton/BOOT/` additions (see 02) -- [ ] `skeleton/BOOT/common/updater`: add H700 detection **before** the `*"0xd03"*` case (H700 cpuinfo also matches 0xd03!): - ```sh - if grep -q sun50iw9 /proc/device-tree/model 2>/dev/null; then PLATFORM="h700"; fi - ``` - (or match `*"sun50iw9"*` on `cat /proc/device-tree/model` — do NOT rely on /proc/cpuinfo which is indistinguishable from zero28) - Note: on Anbernic the H700 boot path doesn't go through `updater` at all (our - `dmenu.bin` calls `.tmp_update/h700.sh` directly, see 02), but keeping `updater` - correct costs one line and prevents mis-detection if a multi-platform card is moved - between devices. -- [ ] `github/` CI workflows: add h700 to the build matrix (mirror what exists for tg5040) - -## Build outputs (parity with tg5040) - -`make PLATFORM=h700 all` must produce inside `build/`: -- `.system/h700/bin/*` — `nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf(=minput?), clock, ledcontrol …` (same list as tg5040; drop what doesn't apply, see per-doc notes) -- `.system/h700/lib/` — `libmsettings.so, libbatmondb.so, libgametimedb.so, libsamplerate…` **plus `libSDL2-2.0.so.0`, `libSDL2_image`, `libSDL2_ttf`** (unlike tg5040, the stock OS SDL2 2.0.12 has no usable GLES video backend for us — we bundle our own; LD_LIBRARY_PATH in launch.sh puts our lib dir first) -- `.system/h700/cores/*.so` — same core list as tg5040 -- `.system/h700/shaders/` — copy of tg5040's `.glsl` set (they're ES 3.0, portable) -- `.tmp_update/h700.sh` (installer), `dmenu.bin` (boot shim, see 02) - -## Suggested first milestone (Phase 0 spike, ~1-2 days) - -Before writing any platform code, validate the whole chain with throwaway binaries, -all inside the existing tg5040 toolchain container: -1. ~~hello world ABI check~~ **already proven** — user's tg5040-built displaycal.elf - runs on RG40XXV stockmod and RG34XXSP/Knulli. -3. Tiny EGL/GLES probe (fbdev EGL native window via blob): create context, print - `GL_VERSION`/`GL_RENDERER`, clear screen to a color. This single test de-risks the - entire video stack (64-bit blob works, ES version confirmed, fbdev winsys works). -4. Build the custom SDL2, run an SDL window + `SDL_GL_CreateContext` + swap test. -5. Write `mem` to `/sys/power/state` from a test binary, wake with power button ✔ (already proven via rtcwake). +# 01 — Toolchain & Build System + +## How the h700 build works + +`make PLATFORM=h700 all` builds like any other platform, with one twist: **there is no +dedicated h700 toolchain image — the build runs inside the existing +`ghcr.io/loveretro/tg5040-toolchain` image.** Same arch (aarch64/cortex-a53), same +`-mcpu=cortex-a53` tuning, and the image's glibc (2.33) is older than the target's +(Ubuntu 22.04, glibc 2.35) — forward-compatible by construction. This was empirically +validated before any code was written (a tg5040-built displaycal.elf ran unmodified on +RG40XXV stockmod and an RG34XXSP running Knulli) and has held up in production. + +Integration points: +- Root `makefile`: `PLATFORMS = tg5050 tg5040 h700`; `make shell` passes + `PLATFORM=$(PLATFORM)` through (and `makefile.toolchain` injects + `-e PLATFORM -e UNION_PLATFORM` into the container). +- `makefile.toolchain`: maps h700 → the tg5040 image. +- `workspace/h700/platform/makefile.env`: tg5040-derived flags (`-mcpu=cortex-a53`, + `SDL = SDL2`, `GL = GLES`), with the in-tree SDL2 prefix first in include/lib order. +- `workspace/h700/makefile`: platform-local `early` target builds the external deps + (SDL2, below) before the apps. +- The full tg5040 core list (28 cores + patches) builds unchanged — same arch, same tuning. + +### In-tree SDL2 (the one real gap in the shared image) +On tg5040 the stock OS supplies runtime SDL2; on H700 we ship our own. The platform +`early` target clones **`JohnnyonFlame/SDL-malifbdev-rot`**, **pinned to commit +`d4a7d7503524cc469fe775242f3f925d4dd56c88`**, builds it aarch64 and installs into a local +prefix that `makefile.env` puts first. Configure highlights (see `workspace/h700/makefile`): + +- `--enable-video-mali --enable-video-opengles`, x11/wayland/kmsdrm disabled. + The makefile **asserts `#define SDL_VIDEO_DRIVER_MALI 1` in the generated + `SDL_config.h`** right after configure — a silent fallback to the dummy driver + produces a black screen much later, so fail fast here. +- `--enable-alsa --enable-alsa-shared` — ALSA loaded via **dlopen at runtime**, not + direct-linked. This is load-bearing, not an optimization (see pitfall #1 below). +- `--enable-loadso --enable-filesystem` — loadso is required for GL context creation + and for alsa-shared/image-shared dlopen to work at all. (An early draft disabled + both; don't.) +- No udev (`SDL_JOYSTICK_DISABLE_UDEV=1` is also exported at runtime — see 03). + +### Runtime library bundling (`platform/makefile.copy`) +Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted for: +`libSDL2*` (our custom build + matching SDL2_image/ttf), `libtinyalsa.so*`, +`libpng12.so*` (see pitfall #2). **Deliberately not bundled:** `libasound` +(dlopened from the device — bundling the SDK's copy caused the audio bug) and +`libUMP` (doesn't exist on Mali-G31 systems; an early build bundled it by cargo-cult). +Rule of thumb: `ldd` every shipped .elf against a clean stock rootfs; bundle exactly +the misses, nothing more. + +### Updater detection (multi-platform SD cards) +`skeleton/BOOT/common/updater` detects H700 via `grep -q sun50iw9 +/proc/device-tree/model` **before** the `*"0xd03"*` cpuinfo case — H700's cpuinfo is +indistinguishable from other A53 platforms. On Anbernic the normal boot path doesn't go +through `updater` (our dmenu.bin calls `.tmp_update/h700.sh` directly), but correct +detection prevents mis-flash if a multi-platform card moves between devices. + +## Toolchain-reuse pitfalls (lessons for future platform ports) + +Cross-building in a *sibling platform's* image against a *different* target rootfs +works, but every failure below came from exactly that gap. Check these first on any +future stock-OS port: + +1. **libasound symbol versioning → glitchy audio.** The tg5040 SDK's libasound has no + symbol versioning. Direct-linking SDL against it made the dynamic linker resolve the + *unversioned* legacy `ALSA_0.9` `snd_pcm_hw_params_set_*` symbols from the device's + (versioned) libasound at runtime. Those have value semantics instead of + pointer-in/out — `set_rate_near` silently clamped the codec to 192 kHz while SDL + believed 32.768 kHz → sliced, glitchy audio that *almost* worked. Fix: + `--enable-alsa-shared` (dlopen; dlsym always picks the default/current symbol + version). General lesson: **for libraries that exist on the target, prefer dlopen + over cross-linking whenever the SDK's copy may differ in symbol versioning.** +2. **dlopen'd deps have their own arch requirements.** SDL2_image dlopens + `libpng12.so.0`. The stock H700 OS only has a *32-bit* copy (under + `/mnt/vendor/lib`); dlopen fails silently → no PNG loading. We bundle the + toolchain's 64-bit `libpng12.so.0`. Lesson: audit not just `ldd` output but the + *dlopen list* of every shipped library (`strings *.so | grep '\.so'`). +3. **pkg-config lies across rootfs boundaries.** The tg5040 SDK's `glesv2.pc` links + libUMP (a Utgard-GPU-era dependency that doesn't exist on Mali-G31/bifrost + systems). Link `-lGLESv2 -lEGL` directly instead of trusting sibling-platform + pkg-config for GPU libs. +4. **LTO + libretro cores.** The inherited `-flto` broke picodrive: the linker plugin + dropped libretro glue objects. The h700 cores makefile disables LTO / filters + linker-plugin flags for affected cores, and pins `override PLATFORM := libretro` + for reproducible clean rebuilds. +5. **Target shell ≠ build assumptions.** Stock `/bin/sh` is **dash**. The bashism `&>` + (used throughout the tg5040 pak scripts we cloned) parses under dash as + "background the command and truncate a file named by the next word" — launch + scripts exited instantly and games bounced back to menu. All h700 pak scripts use + POSIX `> file 2>&1`. Grep any cloned script for bashisms before shipping. +6. **Shared-code makefile gates.** `workspace/all/minarch/makefile` gates features + (RetroAchievements, CHD, SRM, libsamplerate) by platform name — a new platform + must be added to those filter lists or minarch silently builds featureless (or not + at all). + +## Dedicated `h700-toolchain` image: still deferred, deliberately + +The reuse costs above are all *solved*, and the SDL2 build is pinned and cached. A thin +image `FROM tg5040-toolchain` pre-baking SDL2 + a jammy-matched libasound would remove +pitfall classes 1–3 structurally and speed CI — worth doing if the platform accumulates +more external deps (e.g. shipping bluealsa, see 07/09-roadmap), not before. + +## Build outputs + +`make PLATFORM=h700 all` produces in `build/`: +- `.system/h700/bin/*` — nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, + gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf, clock, … + (tg5040 list minus ledcontrol/bootlogo, which are gated to tg50x0) plus `rfkill` + (h700 builds its own minimal `/dev/rfkill` ioctl tool — stock rfkill may be absent) +- `.system/h700/lib/` — libmsettings.so, libbatmondb.so, libgametimedb.so, … + plus the bundled SDL2/tinyalsa/libpng12 set above +- `.system/h700/cores/*.so` — full tg5040-parity core list +- `.system/h700/shaders/` — tg5040 `.glsl` set (ES 3.0, portable) +- `.tmp_update/h700.sh` (installer), `h700/dmenu.bin` (boot shim — see 02), + NextCommander built via `patches/NextCommander-h700.patch` diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md index 03a1503d0..cec98d8c2 100644 --- a/docs/h700-port/02-boot-and-installer.md +++ b/docs/h700-port/02-boot-and-installer.md @@ -2,10 +2,10 @@ ## How NextUI takes over the stock OS (no reflash, fully reversible) -Verified on the live RG40XXV: the stock launcher wrapper `/mnt/vendor/ctrl/dmenu_ln` -prefers **`/mnt/mmc/dmenu.bin`** (the FAT32 ROMs partition of the *boot* SD, TF1) -over the built-in frontend. Placing our own `dmenu.bin` there hijacks boot. Removal = -delete one file. This is the same mechanism the old MinUI rg35xxplus port used. +The stock launcher wrapper `/mnt/vendor/ctrl/dmenu_ln` prefers **`/mnt/mmc/dmenu.bin`** +(the FAT32 ROMs partition of the boot SD, TF1) over the built-in frontend (verified, +full chain in 00). Placing our own `dmenu.bin` there hijacks boot; deleting it restores +pure stock. This shipped as designed and is the entire install/uninstall story on TF1. ``` stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_ln @@ -15,121 +15,99 @@ stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_l NO → /mnt/vendor/bin/dmenu.bin (stock UI) ``` -### stockmod caveat (must be in README/install docs) -`dmenu_ln` checks `/mnt/vendor/muos1.ini` / `muos2.ini` **first** and runs the bundled -muOS instead if present (the user's RG40XXV is in this state). Users running stockmod -must switch the boot target back to "stock" (or the installer, once running via any -one-shot exec path, deletes `/mnt/vendor/muos*.ini`). Document prominently: -**NextUI installs on top of the *stock* boot path.** - -## SD card layout: stock card gets one drag-dropped file; NextUI lives on TF2 - -**Policy (project owner):** TF1 remains the stock OS card. NextUI runs from TF2. -Minimal, end-user-simple changes to the stock card are fine (drag-drop a file from a -PC). When in doubt, do what the old rg35xxplus port did — and this is exactly that: - -**End-user install (matches old MinUI rg35xxplus flow):** -1. Put TF1 (stock card) in a card reader — the ROMs partition (mmcblk0p8, FAT32) is - the one a PC sees. **Drag `dmenu.bin` onto its root.** That's the entire stock-card - change (`dmenu_ln` on the stock OS runs `/mnt/mmc/dmenu.bin` if present — verified; - it never consults TF2 for a boot target, so this one file is both necessary and - sufficient for autoboot). -2. Format TF2 FAT32, copy the NextUI base-zip contents onto it (`MinUI.zip`, Bios, - Roms, …). First boot self-installs to `.system/` — same as every MinUI/NextUI - platform. -3. Uninstall: delete `dmenu.bin` from TF1 → device boots pure stock again. - -Rules that keep the stock card safe: -- Stock OS **partitions p1–p7 (boot-resource, rootfs, vendor, data) are never - written.** Unlike the old port: no `bootlogo.bmp` replacement on `/dev/mmcblk0p2`, - no DTB "Panel Fix" writes to `/dev/mmcblk0` (drop that tool initially), no apt - installs into rootfs (2026 stock already runs sshd). The only TF1 write ever is the - `dmenu.bin` file on the user-visible FAT partition. -- **TF2 = NextUI's card** (`/dev/mmcblk1p1` → `/mnt/sdcard`): `.system`, `.tmp_update`, - `.userdata`, Bios, Roms, Saves — everything. FAT32 initially (kernel 4.9 has no - native exfat; check stock for a FUSE exfat helper before allowing exfat). - `SDCARD_PATH` stays `/mnt/SDCARD` via symlink → `/mnt/sdcard` (see 03). -- **TF1-only layout: not supported** (old port allowed it; we don't — keeps the stock - card pristine and the support matrix small). If TF2 is absent, the shim shows an - "insert NextUI SD card" splash and exec's the stock frontend, so the device always - boots something sensible. -- dmenu.bin self-heal/update: launch.sh compares `.system/h700/dat/dmenu.bin` (TF2) - against `/mnt/mmc/dmenu.bin` and re-copies on mismatch — updates ship through TF2 - releases; the user never touches TF1 again after install. -- Verify on current firmware whether stock automounts TF2 at `/mnt/sdcard` before - `dmenu_ln` runs (mount point exists; card wasn't inserted during probing). If not, - the shim mounts it — the old port's boot.sh has the exact mount logic to reuse. - -## `workspace/h700/boot/` — the dmenu.bin shim - -Reuse the old self-extracting design (`git show 8cd78866:workspace/rg35xxplus/boot/build.sh`): -`dmenu.bin` = shell script + `echo BINARY` sentinel + gzip payload (splash images, -static `unzip`). At boot it: - -1. Mounts TF2 if the stock OS hasn't already; if TF2 absent → splash "insert NextUI SD card", exec stock frontend (no TF1 fallback, see policy above) -2. Shows splash: `dd` a raw BMP/fb dump to `/dev/fb0` (640×480 RGB565/XRGB — regenerate - splash assets per panel: default 640×480, `-w` 720×480 for RG34xx, `-r` rotated - 480×640 for RG28XX, chosen by `cat /sys/class/graphics/fb0/modes`) -3. First boot / update: if `MinUI.zip` (or `*.pakz`) present at SD root → run - `.tmp_update/h700.sh` (self-extracted static unzip available) which unzips into - `.system/` and `.tmp_update/` -4. `exec .system/h700/paks/MinUI.pak/launch.sh` - -Improvement over the old port: current NextUI has `show2.elf --mode=daemon` with -progress display — after first install, prefer it over raw `dd` splash (needs SDL — -only usable post-extract; keep `dd` for the very first boot). - -The stock wrapper loops and re-runs `dmenu.bin` when it exits, and `launcher.sh stop` -sends `SIGUSR1` — the shim and launch.sh must not treat either as an error -(NextUI's own `while` launch loop in MinUI.pak handles restarts; on poweroff request -touch `/tmp/poweroff` and call `poweroff` — systemd handles clean shutdown on this OS). - -## `workspace/h700/install/` - -- `boot.sh` → becomes `.tmp_update/h700.sh`. Model on tg5040's (`workspace/tg5040/install/boot.sh`): - set governor performance during install, show splash, unzip `MinUI.zip` payload, - process `*.pakz`, then reboot. Remove all trimui-isms (`/usr/trimui`…). -- `update.sh` → becomes `.system/h700/bin/install.sh` (in-place updates from the OS). -- Re-copy `dmenu.bin` from `.system/h700/dat/dmenu.bin` (TF2) to `/mnt/mmc/dmenu.bin` - **only when contents differ** (self-healing + updates ship new shims, while keeping - TF1 writes to the absolute minimum). - -## `skeleton/` additions - -``` -skeleton/SYSTEM/h700/ - bin/ governor.sh, suspend, install.sh, run_hooks.sh, setterm, shutdown-helper - etc/wifi/ wifi_init.sh (see 07) - etc/bluetooth/ bt_init.sh (see 07) - paks/MinUI.pak/launch.sh (master boot script — see below) - paks/Emus/{FC,GB,GBA,GBC,MD,PS,SFC,…}.pak/ (clone tg5040 set; default.cfg per-device variants) - shaders/ (copy of tg5040 set) - system.cfg -skeleton/EXTRAS/Tools/h700/ (Files.pak, Input.pak, Clock.pak, … clone from tg5040 where portable) -``` - -### MinUI.pak/launch.sh responsibilities (H700 edition) -Clone tg5040's and adapt: -- `export PLATFORM=h700`, standard path exports (SDCARD_PATH=/mnt/sdcard, …) -- **Device detection** (replaces tg5040's `TRIMUI_MODEL` sniff): - ```sh - export RGXX_MODEL=$(strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG) # e.g. RG40xxV / RG34xxSP / RG28xx / RGcubexx - case "$RGXX_MODEL" in - RG28xx) export DEVICE="rg28xx" ;; # rotated panel - RG34xx*) export DEVICE="rg34xx" ;; # 720x480 (+SP has lid) - RGcubexx) export DEVICE="cube" ;; # 720x720 (later) - *) export DEVICE="rg40xx" ;; # 640x480 family default - esac - ``` - (validate on 2026 firmware; fallback detectors: fb0 mode `480x640` → 28xx, - `xres/yres` in /sys/class/disp, `axp2202-battery/display_id`, DTB lcd timings) -- `export LD_LIBRARY_PATH=$SYSTEM_PATH/lib:/usr/lib` — **our SDL2 first** -- Stop stock services we replace (crucial for input/audio/sleep hygiene): - `systemctl stop brightCtrl` isn't a unit — `killall brightCtrl.bin cexpert` instead; - consider `systemctl stop NetworkManager` if we drive wpa_supplicant directly (see 07) -- governor performance, start `keymon.elf &`, `batmon.elf &`, `audiomon.elf` (if kept), wifi/bt init, boot hooks, then the standard `while` loop around `nextui.elf` / `minarch.elf` (`/tmp/next` mechanics identical to tg5040) -- On loop exit: `/tmp/poweroff` → `poweroff`; `/tmp/reboot` → `reboot` (systemd versions; no custom poweroff_next I2C dance needed — **verify `poweroff` works cleanly from our context**, else port `poweroff_next`) - -## Uninstall story (document it) -Delete `dmenu.bin` from the ROMs partition (visible from any PC via card reader) → -stock boots untouched. `.system`/`.userdata` remain inert data. +### stockmod / muOS caveat +`dmenu_ln` checks `/mnt/vendor/muos1.ini` / `muos2.ini` **first** and boots the bundled +muOS instead if present. The boot shim detects this, logs it, and shows a +**"STOCK TARGET REQUIRED"** splash; `launch.sh` additionally drops a +`stockmod-warning.txt` on the SD card. It is currently a warning, **not** a hard fail — +the user must switch the boot target back to "stock" (or delete the ini) themselves. +`skeleton/BASE/README.txt` documents this in the H700 install section. +(Whether to hard-fail instead is an open call — see 09-roadmap.) + +## SD card layout: TF1 stays stock, NextUI lives on TF2 + +**Policy (project owner), implemented as designed:** +- TF1's only write, ever, is the single `dmenu.bin` file on its user-visible FAT + partition. Stock partitions p1–p7 are never written — no bootlogo replacement, no DTB + Panel-Fix writes, no apt installs. Both writers of that file (`install/update.sh` and + the launch.sh self-heal) guard with `mountpoint -q /mnt/mmc` **and** `cmp -s` so they + only touch TF1 when it's genuinely mounted and the content actually differs. +- **TF2 = NextUI's card** (`/dev/mmcblk1p1`): `.system`, `.tmp_update`, `.userdata`, + Bios, Roms, Saves. FAT32 recommended; the shim also tries exfat and `-t auto` as + fallbacks (kernel 4.9 has no native exfat — exfat works only if the stock OS has a + helper). `SDCARD_PATH` stays `/mnt/SDCARD` via symlink/bind to the real mountpoint, + so shared code's hardcoded paths keep working. +- **TF1-only layout: not supported** (deliberate scope cut vs the old port — keeps the + stock card pristine and the support matrix small). No TF2 → "INSERT NEXTUI TF2 CARD" + splash, then fall through to the stock frontend so the device always boots something. + +**End-user install** (documented in `skeleton/BASE/README.txt`): +1. Drag `h700/dmenu.bin` from the release onto TF1's ROMs partition root (any PC + card + reader). +2. Copy `MinUI.zip` (plus Bios/Roms) onto a FAT32 TF2. First boot self-installs. +3. Uninstall: delete `dmenu.bin` from TF1 → pure stock boot. `.system`/`.userdata` on + TF2 remain inert data. + +## The boot shim (`workspace/h700/boot/`) + +`build.sh` produces `dmenu.bin` as a self-extracting script: `boot.sh` + an +`echo BINARY` sentinel + a gzipped tar payload (`fbsplash`, static `unzip` helper). +Notable implementation details (`boot/boot.sh`): + +- `trap '' USR1` — the stock `launcher.sh stop` sends SIGUSR1; must not kill the shim. +- Payload offset found with `grep -na '^BINARY' "$0" | cut -d: -f1 | head -1` + (`head`, not `tail` — the script's own grep line would otherwise match last). +- Logs to `/tmp/nextui-h700.log` by default; only writes a log to TF1 if it is a real + mountpoint, truncating per boot (no unbounded growth on the stock card). +- **Splash**: `fbsplash` (`boot/fbsplash.c`, ~180 lines) mmaps `/dev/fb0` and renders + text with a built-in 5×7 bitmap font — zero library dependencies, works before + anything is extracted. Messages: `INSTALLING NEXTUI`, `UPDATING NEXTUI`, + `INSERT NEXTUI TF2 CARD`, `NEXTUI INSTALL MISSING`, `STOCK TARGET REQUIRED`. + (The old port's per-panel raw-BMP `dd` scheme was dropped — rendered text needs no + per-resolution assets. Post-install, SDL-based `show2.elf` takes over as usual.) +- **TF2 mount**: tries vfat → exfat → auto; on failure runs `repair_tf2()` — + `fsck.fat -a` or `fsck.exfat -a` chosen by `blkid` — then retries once. +- **Update trigger**: boots into the installer when `MinUI.zip` **or any `*.pakz`** is + present at the SD root. If `.tmp_update/h700.sh` is missing (fresh card), it + bootstrap-extracts only `.tmp_update/*` from the zip first, then delegates — **the + zip is left in place for the installer to own** (an early version deleted the zip + before the installer ran, which left stale files forever). +- Then `exec`s `.system/h700/paks/MinUI.pak/launch.sh`; any failure falls back to the + stock frontend. +- Prefers the stock OS's `unzip` when present; the embedded static helper is the + fallback (stock Ubuntu has a full userland — use it). + +## The installer (`workspace/h700/install/`) + +- `boot.sh` → ships as `.tmp_update/h700.sh`. Owns the update transaction: + clean-replaces `.system/h700/bin`, `lib`, and `paks/MinUI.pak` (`rm -rf` then + extract) so stale files can't survive an update, processes `*.pakz` (including + `post_install.sh` hooks), and deletes `MinUI.zip` itself when done. +- `update.sh` → ships as `.system/h700/bin/install.sh` (in-place updates from within + the running OS). Also performs the TF1 `dmenu.bin` self-heal (mountpoint + cmp + guarded, above). + +## `MinUI.pak/launch.sh` (the master runtime script) + +Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~264 lines): +- `export PLATFORM=h700`, path exports, `/mnt/SDCARD` compat symlink. +- **Device detection**: `RGXX_MODEL=$(strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG)` + → `DEVICE` case (rg28xx / rg34xx / cube / rg40xx default). Confirmed working on 2026 + firmware. +- `LD_LIBRARY_PATH=$SYSTEM_PATH/lib:...` — our SDL2 first. +- Env for the graphics/audio/input stack: `SDL_VIDEODRIVER=mali`, + `SDL_AUDIODRIVER=alsa`, `SDL_JOYSTICK_DISABLE_UDEV=1`, and `SDL_ROTATION=1` when + `DEVICE=rg28xx`. +- Kills/stops stock services we replace: `brightCtrl.bin`, `cexpert`, NetworkManager; + writes a `/run/systemd/logind.conf.d/nextui-h700.conf` drop-in with + `HandlePowerKey=ignore` + `HandlePowerKeyLongPress=ignore` and restarts logind (so + systemd never races us on the power button). +- Spawns `keymon.elf`, `batmon.elf`, `audiomon.elf`; wifi/bt init per settings (07); + runs boot hooks; then the standard crash-restart loop around `nextui.elf` / + `/tmp/next` chaining. +- Poweroff/reboot via sentinel files: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → + `reboot` (systemd handles clean unmounts — works; no `poweroff_next` port needed). +- Diagnostics affordances: a `debug-keep-network` flag file keeps SSH/WiFi up, and + after 5 consecutive nextui crashes the loop brings up networking + SSH for 300 s so + a bricked-UI device is still reachable. (Currently always-on in the release path — + see 09-roadmap about gating it.) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index fb6bc9f68..d3307482c 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -1,123 +1,120 @@ # 03 — Platform Layer (`workspace/h700/`) -The port's center of gravity. Strategy: **clone `workspace/tg5040/` → `workspace/h700/`** -(keeps the `generic_video.c`/`generic_wifi.c`/`generic_bt.c` includes and the full -`PLAT_*` wiring), then repoint every hardware access using the old rg35xxplus paths -(all verified live in 00-device-facts). The old code is at `git show 8cd78866:workspace/rg35xxplus/...` -— use it as the H700 hardware reference, but keep the *current* NextUI API surface -(the old code predates ~2 years of NextUI API growth: shaders, LEDs API, turbo, -timezones, displaycal, deep sleep…). +Strategy, as planned and executed: **clone `workspace/tg5040/`**, keep the +`generic_video.c`/`generic_wifi.c`/`generic_bt.c` includes and the current `PLAT_*` API +surface, repoint hardware access to the H700 paths (00), borrowing only hardware +constants from the old rg35xxplus port (`git show 8cd78866:...`). -## platform.h +One platform serves all devices: `DEVICE`/`RGXX_MODEL` env (set by launch.sh, see 02) +→ `detect_device()` sets `is_rg28xx / is_rg34xx / is_cube` globals that drive +resolution, rotation, and stick availability — the tg5040 `is_brick` pattern. + +## platform.h (as shipped) ```c -// h700 -extern int is_rg28xx, is_rg34xx, is_cube; // set in PLAT_initVideo from DEVICE env +extern int is_rg28xx, is_rg34xx, is_cube; #define FIXED_SCALE 2 #define FIXED_WIDTH (is_cube?720:(is_rg34xx?720:640)) #define FIXED_HEIGHT (is_cube?720:480) #define FIXED_BPP 2 -#define SCREEN_FPS 60.0 // measure per panel! old port used 60.0; verify - // with vsync timing test on each device -#define SDCARD_PATH "/mnt/SDCARD" // see note below +#define SCREEN_FPS 60.0 // ⚠ assumed, never measured per panel +#define SDCARD_PATH "/mnt/SDCARD" // symlink to the real TF2 mountpoint (02) #define MAX_LIGHTS 0 // no RGB LEDs on RG XX (work_led is on/off only) -#define MUTE_VOLUME_RAW 0 -#define MAIN_ROW_COUNT (is_cube?8:6) // 480px tall screens fit 6 rows (tg5040 is 720/768px) -``` - -Path note: tg5040 uses `/mnt/SDCARD`; H700 mounts TF2 at `/mnt/sdcard`. Simplest 1:1: -launch.sh does `ln -s /mnt/sdcard /mnt/SDCARD` (or bind-mount) so every hardcoded -`/mnt/SDCARD` in shared code keeps working. (Grep `workspace/all` for `/mnt/SDCARD` -literals before deciding to diverge — the symlink is the low-risk move.) - -### Input mappings -The kernel exposes `ANBERNIC-keys` as **both** kbd (evdev KEY_*) and joystick. Current -NextUI reads input via SDL (PLAT_updateInput/SDL events + JOY_*/AXIS_* from platform.h). -Two options: -1. **SDL joystick route (tg5040-style, recommended):** our custom SDL2 sees js0. The - JOY_* button indices follow the kernel's KEY-bit order for gpio-keys devices — - discover once per device family by running `minput.elf`/`evtest` on the device and - fill platform.h. AXIS_LX/LY/RX/RY = SDL axes 0..3 (kernel ABS_Z/RX/RY/RZ map in - order), triggers: none analog (L2/R2 are digital keys 314/315). -2. **evdev route (old-port-style):** define `BUTTON_*` = raw codes (103/108/105/106, - 304/305/307/306, 311/310/312, 308/309/314/315/313/316, 115/114/116) and implement - `PLAT_pollInput` reading event0/1/2 directly, as the old platform.c did. - -Start with (1); the codes from (2) are the fallback and are needed for keymon anyway. -`CODE_POWER 116` comes from `axp2202-pek` (event0) — note tg5040 uses 102; H700 power -key emits KEY_POWER=116 per old port. Sticks (RG40XXV, cube only): raw 0..4096, -old scaling `value*32767/4096` (SDL route handles scaling itself; verify centering/deadzone). - -Buttons per device: RG40XXV has dual sticks + L3/R3; RG34XXSP/RG28XX have no sticks -(JOY_L3/R3 = JOY_NA via `is_*` conditionals, same trick as tg5040's `is_brick`). - -```c -#define BTN_RESUME BTN_X -#define BTN_SLEEP BTN_POWER -#define BTN_WAKE BTN_POWER -#define BTN_MOD_VOLUME BTN_NONE -#define BTN_MOD_BRIGHTNESS BTN_MENU // MENU+vol keys = brightness (old-port behavior) -#define BTN_MOD_COLORTEMP BTN_SELECT // parity with tg5040 -#define BTN_MOD_PLUS BTN_PLUS // dedicated vol keys 115/114 -#define BTN_MOD_MINUS BTN_MINUS +#define MAIN_ROW_COUNT (is_cube?8:6) // 480px-tall screens fit 6 rows ``` -## platform.c — subsystem by subsystem - -| Subsystem | tg5040 does | h700 change | -|---|---|---| -| `PLAT_initVideo` etc. | `#include "generic_video.c"` | keep (see 04 for SDL/GLES groundwork + rotation) | -| Battery | `axp2202-battery/capacity`, `axp2202-usb/online` | **identical paths** — same PMIC family. Copy as-is. | -| CPU speed | `governor.sh` via cpufreq policy0 | same sysfs layout confirmed; freq table 480k–1512000; PERF=1512000, powersave=conservative/720k. Single cluster → `PLAT_pinToCores` = no-op. | -| CPU/GPU temp | thermal zones | enumerate `/sys/class/thermal/thermal_zone*/type` on device; wire what exists, return 0 otherwise | -| GPU speed/usage | sunxi devfreq sysfs | check `/sys/class/devfreq/` for gpu node (H700 BSP usually `1800000.gpu`); stub if absent | -| Rumble `PLAT_setRumble` | gpio227 + `/sys/class/motor/voltage` | `echo 1/0 > /sys/class/power_supply/axp2202-battery/moto`. On/off only (no voltage control) — map strength>0 → 1. Skip when HDMI (old-port behavior). Later: try input-FF via event1 (device advertises FF bits) for strength levels. | -| LEDs `PLAT_initLeds` | `/sys/class/led_anim/*` (Brick RGB) | `MAX_LIGHTS 0`; drop ledcontrol.elf from build. Keep `work_led` for sleep indication (06). | -| `PLAT_powerOff` | haptics, mute, blank, `/tmp/poweroff` | same, then systemd `poweroff` in launch.sh (verify; else port poweroff_next) | -| Lid | none (fallback no-op) | **implement for RG34XXSP**: `LID_PATH=/sys/class/power_supply/axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if file exists; `PLAT_lidChanged` polls it; lid-close → `BTN_SLEEP` inject, lid state gates wake (copy old port logic into current API: `PLAT_shouldWake` swallowing power-key while closed) | -| `PLAT_getModel` | TrimUI sniff | `"Anbernic " + getenv("RGXX_MODEL")` | -| `PLAT_getOsVersionInfo` | Tina version | read `/etc/os-release` PRETTY_NAME + kernel | -| Turbo (`trimui_inputd`) | trimui daemon ioctl | stub `PLAT_canTurbo()=false` initially (NextUI turbo feature — check if generic fallback exists; if the API is generic enough, enable later) | -| Timezones/NTP | OpenWRT `uci` | Ubuntu equivalents: `timedatectl set-timezone` / `list-timezones`, NTP = `timedatectl set-ntp` (systemd-timesyncd present). Much cleaner than tg5040. | -| WiFi/BT | generic_wifi/bt + init scripts | keep generic, adapt scripts (07) | -| `PLAT_pickSampleRate` | clamp + BT limit | keep | -| `PLAT_deepSleep` | generic `echo mem` | keep — verified working on device (06) | - -## libmsettings (`workspace/h700/libmsettings/msettings.c`) - -Clone tg5040's, repoint: -- **Brightness**: `SetRawBrightness(0-255)` → `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS (0x102)`, - args `{0, val, 0, 0}` — same driver as tg5040, same code. Reuse old port's level - curve (`0→4, 1→6, 2→10, 3→16, 4→32, 5→48, 6→64, 7→96, 8→128, 9→192, 10→255`). - Kill stock `brightCtrl.bin` at launch so it doesn't fight us. -- **Volume**: tinyalsa mixer on card0; controls: `digital volume` (master) and - `lineout volume` — map NextUI 0..20 scale; discover ranges via `amixer cget`. - Confirm speaker/HP switching: `SPK Switch` + jack events (below). -- **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — exists on - H700, same as tg5040. Copy as-is. -- **DisplayCal**: same `/dev/disp` gamma-LUT ioctls (0x10b/0x10c/0x10d) — see 04. -- **Mute**: no `/sys/class/speaker/mute` on H700; use `SPK Switch` mixer ctl. -- **Jack detection**: old note says `snd_soc_sunxi_component_jack/parameters/jack_state` - never changes; test on 2026 firmware; alternatives: ALSA jack ctl events - (`amixer contents` may expose a jack bool), or an input event device. `audiomon.elf` - (tg5040's device-watch daemon) may adapt — investigate its mechanism when wiring. +## Input — dual path, evdev primary (deviation from plan) + +The plan preferred the tg5040-style pure-SDL-joystick route. **Shipped: raw evdev is +the primary path for built-in controls**, with SDL joystick as a secondary path for +Bluetooth controllers. Reasons discovered during bring-up: +- SDL joystick enumeration of the built-in pad is unreliable on the stock image + (udev interplay); SDL is built without udev and `SDL_JOYSTICK_DISABLE_UDEV=1` is + exported — that fixed startup hangs but made js enumeration of gpio-keys flaky. +- evdev codes are needed for keymon and wake handling anyway. + +Implementation: `poll_evdev_input()` scans/reads `/dev/input/event0..11` directly with +periodic (2 s) rescans for hotplug, mapping via `CODE_*` defines; `poll_sdl_input()` +handles SDL joystick events (BT pads) via `JOY_*` indices. + +Verified mappings (also recorded in 00): +- evdev (event1 `ANBERNIC-keys`): A 304, B 305, Y 306, X 307, L1 308, R1 309, + SELECT 310, START 311, MENU 312, L3 313, L2 314, R2 315, R3 316; PLUS 115 / + MINUS 114 (event2); POWER 116 (event0, `axp2202-pek` — note tg5040 uses 102). + **D-pad has no keycodes on current firmware — it arrives as ABS_HAT0X/Y.** +- Analog sticks: ABS_Z/RX/RY/RZ, raw 0..4096, scaled ×32767/4096. Sticks exist on + RG40XXV and cube only; `is_*` conditionals set JOY_L3/R3 = NA elsewhere. +- SDL indices (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 MENU=8, + L3=9 L2=10 R2=11 R3=12, MINUS=15 PLUS=16; axes LX=0 LY=1 RX=2 RY=3. + +Button semantics: `BTN_RESUME=BTN_X`, `BTN_SLEEP/WAKE=BTN_POWER`, +`BTN_MOD_BRIGHTNESS=BTN_MENU`, `BTN_MOD_COLORTEMP=BTN_SELECT`, dedicated +`BTN_MOD_PLUS/MINUS` on the volume keys — parity with tg5040 conventions. + +`PLAT_shouldWake` keeps a **persistent** `wake_fd` on event0 (opened once +O_NONBLOCK|O_CLOEXEC, drained per poll, closed in `PLAT_quitInput`) — an early version +open/closed per poll and could drop the wake press between polls. + +## platform.c — subsystem map (as shipped) + +| Subsystem | Implementation | +|---|---| +| Video | `#include "generic_video.c"` — custom SDL2 mali driver does the rest (04) | +| Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, coarse bucketing in shared code — identical to tg5040 | +| CPU speed | `governor.sh` via `system()`: auto=schedutil, performance=max 1512000, powersave=conservative capped mid-range. Single A53 cluster → `PLAT_pinToCores` no-op | +| CPU temp | thermal_zone0 | +| GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | +| GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | +| Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | +| LEDs | `MAX_LIGHTS 0`, all `PLAT_setLed*` stubs — hardware has no RGB LEDs. `work_led` used only as sleep/backlight indicator | +| Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | +| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid-close → sleep, power-key swallowed while closed. **Untested — no RG34XXSP hardware yet** | +| Model | `PLAT_getModel` → "Anbernic " + `RGXX_MODEL` (copied into a static buffer, not a raw getenv pointer) | +| Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezones via `timedatectl set-timezone`/`list-timezones`, NTP via `set-ntp` (systemd-timesyncd) — much cleaner than tg5040's uci | +| Turbo | `PLAT_canTurbo()=false`, no-ops (tg5040's turbo rides trimui_inputd; no H700 equivalent wired) | +| Deep sleep | `PLAT_supportsDeepSleep()=1`; `suspend` script wraps `echo mem` (06) | +| Sample rate | tg5040 logic; consults `PLAT_bluetoothConnected()` only — calling `GetAudioSink()` here segfaulted minarch pre-`InitSettings()` (shm not yet mapped) | +| WiFi/BT | generic_wifi.c / generic_bt.c + init scripts (07) | + +## libmsettings (`workspace/h700/libmsettings/msettings.c`, ~1300 lines) + +- **Brightness**: `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS (0x102)`, args + `{0, raw, 0, 0}`; level curve `0→4, 1→6, 2→10, 3→16, 4→32, 5→48, 6→64, 7→96, + 8→128, 9→192, 10→255`. Stock `brightCtrl.bin` is killed at launch so it can't fight us. +- **Volume**: tinyalsa on card 0. `digital volume` is a 0–63 **attenuator** — the code + writes `mixer_ctl_set_percent(digital, 0, 100 - val)` (reversed mapping, confirmed + correct by ear; the control's TLV metadata is garbage). `lineout volume` secondary. +- **Mute**: `SPK` switch off + store/restore volume (no `/sys/class/speaker/mute` on + H700). h700 is included in `hasMuteToggle()` in settings.cpp. +- **Color temperature**: `/sys/class/disp/disp/attr/color_temperature`, plus + `enhance_contrast` / `enhance_saturation` / `enhance_bright` — same disp2 attrs as + tg5040. All `scale*()` switches carry `default:` cases (a draft could hit + uninitialized values on out-of-range input). +- **DisplayCal**: same gamma-LUT ioctls as tg5040 (0x10b/0x10c/0x10d) — worked 1:1 as + predicted; tested passing on RG40XXV including persistence across sleep and game + launch. +- **HDMI**: `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state,...}` so + detection works; **`SetHDMI()` is an empty no-op** — no output switching (04). +- **Jack detection**: not wired (path exists but historically dead — 00). +- Debug printfs were stripped/commented for release; remaining prints are error paths. ## keymon (`workspace/h700/keymon/keymon.c`) -Merge of tg5040's structure with old rg35xxplus codes: read `/dev/input/event1` -(ANBERNIC-keys) + `event2` (dierct-keys / volume: PLUS 115, MINUS 114) + `event0` -(power 116). MENU(312)+vol = brightness, SELECT(310)+vol = colortemp (parity with -tg5040), plain vol keys = volume. No mute DIP switch on H700 (drop gpio243 watcher). +tg5040 structure + H700 codes: reads event1 (buttons) + event2 (volume 115/114) + +event0 (power 116). MENU+vol = brightness, SELECT+vol = colortemp, plain vol = volume — +tg5040 parity. No mute DIP switch on H700 (gpio243 watcher dropped). + +## Cores (`workspace/h700/cores/`) -## Cores (`workspace/h700/cores/makefile`) +tg5040's list verbatim — the full 28-core set builds and ships (same aarch64/a53 +target), with the picodrive LTO/patch-hygiene fixes noted in 01. -Copy tg5040's verbatim (same aarch64 cortex-a53 target). Do **not** repeat the old -port's "copy from rg35xx" hack. Trim only if something fails to build; expected: the -full 28-core list works. +## What disappeared vs tg5040 (as planned) +- `btmanager/` (BlueZ-upgrade pakz — H700 Ubuntu has BlueZ 5.64) +- `poweroff_next/`, `reboot_next` (systemd poweroff/reboot work fine) +- LED animation wiring (`led_anim`), ledcontrol.elf, bootlogo (gated to tg50x0 in `workspace/makefile`) +- `trimui_inputd` interactions (turbo, gpio 5V export) -## What disappears vs tg5040 -- `btmanager/` (bluez upgrade pakz — H700 Ubuntu has modern BlueZ) -- `poweroff_next/` (systemd poweroff; verify first) -- LED animation engine wiring (`led_anim`), ledcontrol.elf -- `trimui_inputd` interactions (turbo, gpio107 5V export, etc.) +New vs tg5040: `rfkill/` — a minimal from-scratch `/dev/rfkill` ioctl tool (~120 +lines), since the stock binary can't be relied on. diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index bcd794eec..d45169e75 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -1,111 +1,89 @@ # 04 — Video, Display, Rotation, HDMI, DisplayCal -## Architecture recap +## Architecture (worked exactly as designed) + NextUI renders via `workspace/all/common/generic_video.c`: SDL2 window → -`SDL_GL_CreateContext` (requests **GLES 3.2** profile) → shader pipeline (shaders are -rewritten to `#version 300 es`, so ES 3.0 is the true floor) → `SDL_GL_SwapWindow`. -No fbdev blits, no SDL_Renderer in the hot path. Whatever platform provides a working -SDL2 + EGL/GLES stack gets the entire NextUI feature set (shaders, overlays, effects, -scrolling text, screenshots) for free. - -## The H700 graphics stack (the real porting work) - -- Kernel 4.9 BSP: **no DRM/KMS**. Display = Allwinner disp2 (`/dev/disp` + fbdev). -- GPU: Mali-G31 MP2, `mali_kbase` r20p0 kernel driver + vendor blob userspace. - **Verified on device:** blob `libmali.so.0.20.0` is 64-bit aarch64, reports - **`OpenGL ES 3.2 v1.r20p0-01rel0`** (matches kernel kbase r20p0), and is built with - the **fbdev EGL winsys** — every assumption in this doc is confirmed hardware fact. -- Therefore SDL2 uses the **Mali/fbdev EGL winsys** (EGL `fbdev` native window), - like muOS/Knulli's SDL on these devices. -- Extra proof: the **stock OS's own `/usr/lib/libSDL2-2.0.so.0.12.0` is 64-bit and - compiled with exactly the `mali` video driver** (only `mali` + `dummy` backends). - The stack we're building is the one the device already runs. During bring-up, the - stock libSDL2 can even serve as a temporary crutch (it's SDL 2.0.12 — too old to - ship, but fine for validating our binaries before the custom SDL is done). - -### Custom SDL2 (bundled in `.system/h700/lib`) -Start from **`JohnnyonFlame/SDL-malifbdev-rot`** (what the old port shipped: SDL 2.28.5, -`--enable-video-mali`, with built-in **rotation** support — written specifically for -the RG28XX/RGcubexx generation). Tasks: -1. Build it **aarch64** against the jammy sysroot + device Mali blob (old port built it 32-bit). -2. Confirm `SDL_WINDOW_OPENGL` + `SDL_GL_CreateContext` with ES 3.2/3.0 works on the - mali video driver path (the old port used SDL_Renderer on top; NextUI drives GL - directly — the mali backend supports EGL contexts natively, this is its whole point). -3. Audio: keep ALSA backend enabled (`--enable-alsa`), everything else off (matches - old configure: no kmsdrm/x11/wayland/pulse/dbus). -4. Evaluate rebasing the mali-fbdev patch onto SDL 2.30.x if NextUI depends on newer - SDL APIs — check what SDL version the tg5040 SDK ships and what `generic_video.c` - + `api.c` actually require; 2.28.5 is likely sufficient. (Alternative donor with - the same backend: Knulli's buildroot patchset for h700.) - -Phase 0 gate (see 01): a 200-line raw EGL/GLES test binary proves blob + fbdev winsys -+ ES version before any SDL work. If the blob's EGL doesn't accept fbdev native -windows (unlikely — stock RA uses it), fall back to the blob variant muOS ships. +`SDL_GL_CreateContext` → GLES 3 shader pipeline → `SDL_GL_SwapWindow`. The H700 +platform provides SDL2 + a working EGL/GLES stack and gets the entire feature set +(shaders, overlays, effects, scrolling text, screenshots) for free. **Confirmed on +hardware**: all shipped `.glsl` shaders, overlays, and effects run on the Mali-G31 at +full speed at 640×480. + +The stack: +- Kernel 4.9 BSP, no DRM/KMS. Display = Allwinner disp2 (`/dev/disp` + fbdev). +- Mali-G31 MP2, kbase r20p0 + vendor blob (64-bit, ES 3.2, fbdev EGL winsys — 00). +- **Custom SDL2** from `JohnnyonFlame/SDL-malifbdev-rot`, pinned commit + `d4a7d750…`, built aarch64 in-tree (01), `SDL_VIDEODRIVER=mali` exported by + launch.sh. SDL 2.28-era — sufficient for current NextUI; no 2.30 rebase was needed. +- GLES linked directly (`-lGLESv2 -lEGL`), **not** via the SDK's pkg-config (libUMP + trap, see 01). `generic_video.c` gained hard error checks: SDL init / window / + renderer / GL-context failures now `exit(1)` instead of limping on — on a device + with no display fallback, failing loudly into the crash-restart loop (which brings + up SSH) beats a black screen. ## Per-device geometry -| Device | Panel | FIXED_W×H | Notes | +| Device | Panel | FIXED_W×H | Status | |---|---|---|---| -| RG40XXV | 640×480 4:3 | 640×480 | reference target | -| RG34XXSP | 720×480 3:2 | 720×480 | `is_rg34xx` (same LCD as RG34XX) | -| RG28XX | **480×640 portrait** | 640×480 logical | needs rotation (below) | -| RGcubexx | 720×720 | 720×720 | later; only overscan device | - -UI scale: these are ~half the resolution of tg5040 (1280×720/1024×768). `FIXED_SCALE 2` -and `MAIN_ROW_COUNT 6` follow the old port. Audit current NextUI UI code for -assumptions introduced since the 480p platforms were dropped (font sizes, pill -sprites, quick switcher) — run the whole UI at 640×480 in the `desktop` platform -first if it supports arbitrary resolution, or budget polish time here. **This is a -real risk area: NextUI hasn't rendered at 480p for ~2 years.** - -## RG28XX rotation (deferred to phase 2, design now) - -The panel scans portrait 480×640; fb0 mode will report `480x640`. Options, in order -of preference: -1. **Inside SDL (malifbdev-rot)**: the backend was patched precisely for this — it - presents a landscape-logical display and rotates in the blit/flip. If it works with - GL contexts (verify! the rot patch may only cover the non-GL blitter path), NextUI - needs zero changes. -2. **GL-level rotation in generic_video.c**: add a platform hook (e.g. - `PLAT_getDisplayRotation()` returning 0/90/270) applied as a final rotation in the - present pass (rotate the output quad / swap w↔h of the backbuffer viewport). Clean, - ~contained change; also benefits any future rotated device. -3. Allwinner DE rotation via `/dev/disp` (the disp2 driver has a rotation/smart-color - module on some BSPs) — investigate `dispdbg`; least portable, likely dead end. - -Plan for (2) as the durable solution, try (1) first since the code exists. -Everything else (input is unrotated, touch none) is unaffected. - -## HDMI out - -Old port: `HAS_HDMI`, 1280×720 output, monitored by `hdmimon.sh` (recover: -`git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`) using -`/sys/kernel/debug/dispdbg` (`switch1 4 10 ...`) + `fbset`, then restarting the UI with -`hdmi_export.sh` sourced. Hotplug state: `/sys/class/extcon/hdmi/cable.0/state` -(confirmed present). - -Current tg5040 NextUI: check how/if it handles HDMI (TrimUI Brick HDMI support in -NextUI is limited). **Scope decision: HDMI = stretch goal, phase 3.** The plumbing is -understood and documented; don't block the handheld experience on it. Until then: -`PLAT` reports no HDMI; NextUI treats display as fixed. - -## DisplayCal (white-point correction) — expected to port 1:1 - -- Lives in `workspace/all/common/displaycal.{c,h}`, compiled into `libmsettings.so` + - standalone `displaycal.elf`; UI gated at runtime on model name in `settings.cpp`. -- Mechanism: 256-entry RGB gamma LUT via `/dev/disp` ioctls `DISP_LCD_SET_GAMMA_TABLE - (0x10b)` / `GAMMA_CORRECTION_ENABLE (0x10c)` / `DISABLE (0x10d)`. -- H700 has the same disp2 driver generation (attr dir matches TG5040 nearly 1:1, incl. - `color_temperature`). The user reports displaycal-class functionality already works - fine on RG XX devices. **Validation (Phase 0/2):** 20-line test — set a strongly - tinted LUT, confirm visible effect, confirm survival across suspend/resume. -- Work items: add h700 to the displaycal build (`libmsettings` makefile), extend the - model gate in `settings.cpp` to Anbernic models, add per-panel default gain presets - (measure per device; start neutral 100/100/100). -- `enhance_*` attrs (bright/contrast/saturation) exist too — same as tg5040; whatever - NextUI exposes for those on tg5040 carries over. +| RG40XXV | 640×480 4:3 | 640×480 | ✅ shipped, tested | +| RG34XXSP | 720×480 3:2 | 720×480 | wired (`is_rg34xx`), untested | +| RG28XX | 480×640 portrait | 640×480 logical | rotation plumbed, untested (below) | +| RGcubexx | 720×720 | 720×720 | wired (`is_cube`), untested | + +### 480p UI audit — still open +These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't +rendered at 480p for ~2 years. `FIXED_SCALE 2` + `MAIN_ROW_COUNT 6` work, and general +browsing looks right on RG40XXV, but no systematic audit of fonts / pills / quick +switcher / long-text layouts at 640×480 (or 720×480) has been done. See 09-roadmap. + +## RG28XX rotation — implemented, unvalidated + +Both planned layers were plumbed: +1. **SDL level**: launch.sh exports `SDL_ROTATION=1` when `DEVICE=rg28xx` + (consumed by the malifbdev-rot driver — rotating in the backend was the repo's + whole reason to exist). +2. **GL level**: `platform.c` sets `should_rotate = is_rg28xx`, feeding + `generic_video.c`'s existing rotation handling (dst-rect w/h swap in present). + +Unknown until hardware testing: whether the malifbdev-rot patch covers the *GL +context* path (the original concern was it might only rotate the non-GL blitter), +and whether the two layers interact correctly (both active could double-rotate). +Treat the whole path as unverified. + +## HDMI — detection wired, output switching not + +- `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state}` so hotplug + *detection* works (hdmimon/rumble-skip logic can fire). +- `SetHDMI()` is an **empty no-op** — no mode switch / fb re-init / UI restart. Full + HDMI out remains a stretch goal. The known mechanism, if ever needed: old port's + `hdmimon.sh` via `/sys/kernel/debug/dispdbg` (`switch1 4 10 …`) + `fbset`, 1280×720, + audio on ALSA card 2 (`ahubhdmi`). Recover with + `git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`. + +## DisplayCal — ported 1:1, tested ✅ + +Same `/dev/disp` gamma-LUT ioctls as tg5040 (`0x10b` set / `0x10c` enable / `0x10d` +disable). On RG40XXV: RGB gain sliders visibly act, persist, and **survive sleep and +game launch** (syncsettings.elf re-applies the LUT after resume — 06). The `enhance_*` +attrs (contrast/saturation/exposure) are exposed through settings just like tg5040; +`settings.cpp` gained the Anbernic vendor + RG40XX/RG34XX/RG28XX/RGCubeXX models and +enables colortemp/displaycal/mute/analog-stick/wifi/bt capability flags for h700. +Per-panel default gain presets: not yet measured (neutral defaults). + +## Known unresolved: alpha/tinted-bitmap blits + +An attempt to normalize the asset sheet and force alpha-blend blits for H700's +SDL2/SDL_image behavior (`GFX_needsBitmapBlendCompat()` gated in shared `api.c`) was +committed and **reverted 16 minutes later** — it regressed the known-good rendering. +The branch deliberately stays on the "pre-alpha graphics stack"; `workspace/all/` +carries **zero net change** from the experiment. Symptom class to look for when +revisiting: bitmaps whose alpha should tint/blend rendering opaque (or vice versa) +where tg5040 renders correctly. Root cause not yet established — likely a pixel-format +or blend-mode default difference in our SDL2/SDL2_image build. See 09-roadmap. ## Boot splash -`show2.elf` (SDL) post-install; raw fb `dd` in the dmenu.bin shim pre-install (see 02). -Generate 640×480, 720×480, 480×640(rotated) variants of the splash assets — the old -port's `-r/-s/-w` suffix scheme, selected by fb0 mode. + +Deviation from plan: instead of per-panel raw-BMP `dd` assets, the shim ships +`fbsplash` — a dependency-free fb0 text renderer (02). Post-install, SDL-based +`show2.elf` handles rich splash/progress as on other platforms. No per-resolution +splash assets to maintain. diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md index 305bccd90..ad53d97c7 100644 --- a/docs/h700-port/05-audio.md +++ b/docs/h700-port/05-audio.md @@ -1,49 +1,73 @@ # 05 — Audio -## Playback path (shared code, low risk) -`workspace/all/common/api.c` `SND_init` uses SDL audio (`SDL_OpenAudioDevice`) with a -software resampler. Our custom SDL2 is built with the **ALSA** backend → default ALSA -device on card 0 (`audiocodec`). Verified on device: +## Playback path (as shipped, tested ✅) + +`SND_init` (shared `api.c`) → SDL audio → **ALSA backend → card 0 `audiocodec`**. +`SDL_AUDIODRIVER=alsa` exported by launch.sh. GBA/SNES/PS1 run full speed with clean +audio, no underruns, on RG40XXV. ``` -card 0: audiocodec ← speaker / lineout / headphone +card 0: audiocodec ← speaker / lineout / headphone (the one we use) card 1: ahubdam -card 2: ahubhdmi ← HDMI audio (phase 3, together with HDMI video) +card 2: ahubhdmi ← HDMI audio (unused until HDMI out lands) ``` -Work items: -- Ensure a sane default ALSA route: launch.sh runs an `alsactl restore`-style init or - explicit `amixer` unmute sequence (`SPK Switch` on, `LINEOUT Switch`, DAC mixers on — - capture a known-good `alsa.state` from the stock OS while its UI plays sound, ship it). -- `SDL_AUDIODRIVER=alsa` exported in launch.sh (belt & braces). -- If default-device selection misbehaves, set `AUDIODEV=hw:0,0` / configure - `/etc/asound.conf` in our environment (we can ship one and point `ALSA_CONFIG_PATH` - at it without touching rootfs). - -## Volume / mute (libmsettings, see 03) -- Master: `digital volume` mixer ctl; line/speaker: `lineout volume` (old port drove - volume with `amixer sset 'lineout volume' N%`; NextUI uses tinyalsa directly — - same controls, discover exact ranges with `amixer cget` on device). -- Mute: `SPK Switch` off (+ store/restore volume), since tg5040's - `/sys/class/speaker/mute` doesn't exist here. -- `PLAT_overrideMute` accordingly. - -## Headphone jack -- The codec driver module exposes `snd_soc_sunxi_component_jack/parameters/jack_state`; - the old port found it non-functional ("always 0"). Re-test on 2026 firmware. -- Investigate how the *stock* OS switches speaker/HP (it does): watch - `amixer contents` diff and kernel log while plugging headphones on the live device; - there may be an ALSA jack kctl or an input switch event (SW_HEADPHONE_INSERT on some - BSPs). Wire whatever exists into `audiomon`/`PLAT_audioDeviceWatch*`; worst case, - speaker stays on lineout auto-switch in hardware (many Anbernic units mute the - speaker in hardware when jack inserted — if so, we need do nothing). - -## Bluetooth audio -See 07 — BlueALSA vs PulseAudio decision. NextUI's generic_bt streams via bluealsa + -`PLAT_pickSampleRate` limits. Ubuntu 22.04 has BlueZ 5.64 (modern), and bluealsa is -buildable; keep parity with tg5040's approach to reuse generic_bt.c unchanged. +## The dlopen'd-ALSA fix (the port's hardest bug — full story) + +Symptom: audio played but was glitchy/"sliced". Cause chain: + +1. SDL2 was direct-linked against the tg5040 SDK's `libasound`, which has **no symbol + versioning**; the SDK's copy of libasound was also bundled at first. +2. At runtime against the device's (versioned) libasound, the dynamic linker resolved + SDL's *unversioned* references to the **legacy `ALSA_0.9` compatibility symbols** — + which have value semantics, not the modern pointer-in/out semantics — for the + whole `snd_pcm_hw_params_set_*` family. +3. `snd_pcm_hw_params_set_rate_near` therefore misbehaved: the codec was clamped to + **192 kHz** while SDL believed it got **32.768 kHz** → resample math produced + sliced audio. + +Fix (commit `752cefe8`): build SDL2 with `--enable-alsa-shared` so it **dlopens the +device's own libasound** — `dlsym` always resolves the default (current) symbol +version. The bundled libasound copy was removed. Only `libtinyalsa` (used directly by +libmsettings) is bundled. Lesson generalized in 01: prefer dlopen over cross-linking +for libraries that exist on the target. + +## Volume / mute (libmsettings — details in 03) + +- Master: `digital volume`, a 0–63 **attenuator with a reversed scale** — code writes + `100 - val` percent. Confirmed correct by listening; the control's TLV metadata is + garbage, so don't trust `amixer` ranges here. `lineout volume` secondary. +- Mute: `SPK` switch off + saved/restored volume (H700 has no + `/sys/class/speaker/mute`). Mute toggle enabled for h700 in settings. Tested ✅. +- Suspend: the `suspend` script saves the full mixer state (`alsactl store`) in + `before()` and **restores it in `after()`** on resume (an early version had the + restore commented out; it's live now). + +## Headphone jack — not wired (open) + +`snd_soc_sunxi_component_jack/parameters/jack_state` exists but was historically +"always 0"; never re-tested on 2026 firmware. Unknown how the stock OS switches +speaker/HP (possibly hardware auto-mute, in which case nothing is needed). To +investigate: diff `amixer contents` and watch input devices while plugging headphones +on a live device. Until then: no jack-based switching in NextUI. + +## Bluetooth audio — deliberately disabled this beta + +Plan was to build and ship `bluez-alsa` (Ubuntu 22.04 doesn't include it). **Shipped +decision: gate BT audio off instead**: +- settings built with `-DNO_BT_AUDIO` for h700 → BT samplerate menu hidden + (`btmenu.cpp` made null-safe for the missing item) +- `audiomon` refuses A2DP sinks unless a `bluealsa` binary exists (it doesn't) +- `bt_init.sh` still starts bluealsa *if present*, so dropping a built bluealsa into + `.system/h700/bin` lights the path up again +- `skeleton/BASE/README.txt` tells users BT audio is off in this beta + +BT controller input still works through SDL (07). Shipping bluealsa is the path to +re-enable audio — see 09-roadmap. ## Sample rates -`PLAT_pickSampleRate(requested, max)`: copy tg5040 logic (clamp; when BT connected, -clamp to configured BT limit). The sunxi codec supports 48000/44100 natively — no -platform quirk expected. + +`PLAT_pickSampleRate`: tg5040 logic. One H700-specific fix: it must not call +`GetAudioSink()` (shared-memory settings) — minarch calls it before `InitSettings()` +maps the shm, which segfaulted; it now consults only `PLAT_bluetoothConnected()`. +Codec natively supports 48000/44100. diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index 28a7f95ec..b72ac3d5f 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -1,87 +1,92 @@ # 06 — Power, Sleep, Battery, Lid -This is a headline goal of the port: **match the RG XX stock OS's excellent sleep -behavior**. Good news first — verified live on the RG40XXV: - -- `/sys/power/state` = `freeze mem` — same suspend-to-RAM support as TG5040 -- `echo mem`-style suspend **works** (tested via `rtcwake -m mem`); draw in `mem` - suspend on these devices is famously low (days of standby) because the stock kernel - properly powers down WiFi/panel/SoC -- Wake source: **power button** (AXP2202 PEK is a wakeup source — `axp2202-battery` - and `axp2202-usb` are active wakeup_sources). RTC alarm wake did NOT fire in - testing → no timed wake; don't build features on it. - -## Sleep design (mirror tg5040, simplify where the OS is nicer) - -NextUI has two layers; keep both: - -1. **Screen-off "light sleep"** (`PLAT_enableBacklight(0)` + governor powersave): - - backlight off = raw brightness 0 via `/dev/disp` ioctl + fb blank - (`/sys/class/graphics/fb0/blank` ← old port did both; keep both) - - LED signal: `work_led` (0=on 1=off) + honor `workled_sleep` for behavior in sleep -2. **Deep sleep** (`PLAT_supportsDeepSleep()=1` → generic `PLAT_deepSleep()` writes - `mem` to `/sys/power/state`, with retry loop — reuse as-is), wrapped by the - `skeleton/SYSTEM/h700/bin/suspend` script pattern from tg5040: - - pre-suspend: save ALSA state, `wpa_cli suspend` / stop wpa_supplicant + bluetoothd - (or `rfkill block` — measure which yields lowest draw), run `pre-sleep.d` hooks - - `echo mem > /sys/power/state` (with tg5040's false-negative retry workaround) - - post-resume: restore ALSA, restart wifi (**required** — observed in probing: after - resume WiFi did not come back on its own), re-apply brightness + displaycal LUT - if the panel re-init clears the gamma table (test!), run `post-resume.d` hooks - - systemd note: we bypass `systemctl suspend` on purpose (direct sysfs write, like - stock does); make sure systemd-logind doesn't also react to the power key — - `HandlePowerKey=ignore` in logind.conf, or mask logind's key handling at launch - (check stock config first: the stock UI also handles the key itself, so stock - firmware has likely already neutered logind — verify `loginctl show-logind`). +## ⚠️ Known issue: wake is unreliable + +Deep sleep is implemented end-to-end, but on RG40XXV **the device sometimes hangs +entering or leaving suspend** (fails to wake, or freezes on the way down). This is the +port's #1 open defect. What is *known good*: when a sleep/wake cycle succeeds, state +restores correctly (display settings incl. displaycal survive sleep — tested ✅) and +WiFi reconnects (tested ✅). Debugging leads, roughly in order of suspicion: + +- The kernel's own suspend reliability with our device population of drivers still up + (stock stops different services than we do) — compare the exact pre-suspend state + vs stock's sleep path. +- The `suspend` script's false-negative retry loop (5 tries, "asleep >5 s ⇒ treat + write failure as success" heuristic) — a retry storm around a half-suspended SoC + could itself wedge the device. +- `hallkey`/PEK event handling racing the suspend write (persistent `wake_fd` drains + event0; verify no wake press is consumed *during* the transition). +- Serial/UART console (if accessible) or persisting a pre/post-suspend breadcrumb log + to /tmp would localize hang-on-entry vs hang-on-exit — currently unknown which side + fails. + +Not suspects anymore (all verified fixed/in place): logind power-key handling +(drop-in sets `HandlePowerKey=ignore`), backgrounded resume restore (now synchronous), +per-poll event0 fd churn (persistent fd), post-resume display re-apply +(syncsettings.elf runs in `after()`). + +## Verified hardware facts (00 has the full list) + +- `/sys/power/state` = `freeze mem`; `echo mem` suspend works +- Wake source: **power button only** (AXP2202 PEK). RTC alarm wake does not fire. +- WiFi does not recover on its own after resume — must be bounced (07). + +## Sleep design (as shipped) + +Two layers, as on tg5040: + +1. **Screen-off light sleep** — `PLAT_enableBacklight(0)`: raw brightness 0 via + `/dev/disp` ioctl + fb blank (`/sys/class/graphics/fb0/blank`) + `work_led` off; + governor powersave. +2. **Deep sleep** — `PLAT_supportsDeepSleep()=1`; generic `PLAT_deepSleep()` invokes + `skeleton/SYSTEM/h700/bin/suspend`: + - `before()`: `alsactl store` mixer state, stop bluetoothd/wpa_supplicant, + `pre-sleep.d` hooks + - `echo mem > /sys/power/state` in a retry loop (5 tries, with the tg5040-style + false-negative workaround: if we were asleep >5 s, a failed-looking write is + counted as success) + - `after()` (runs **synchronously**): `alsactl restore` mixer, + **`syncsettings.elf`** (re-applies volume, brightness, colortemp, contrast, + saturation, exposure **and the displaycal gamma LUT** — the panel does lose + state across suspend), restart wifi/bt services, then `post-resume.d` hooks + (hooks themselves backgrounded, by design) + - systemd is bypassed on purpose (direct sysfs write); launch.sh installs a logind + drop-in (`HandlePowerKey=ignore`, `HandlePowerKeyLongPress=ignore`) and restarts + logind so systemd never handles the power key (02) ### Wake & autosleep -- `PLAT_shouldWake`: power-key event (code 116 on event0) — copy old port logic, - including the lid gate (below). -- Generic autosleep (`PWR_*` in api.c: idle timeout, disabled while charging/HDMI) - works unchanged once PLAT hooks are right. - -## Lid (RG34XXSP — clamshell) -- `LID_PATH = /sys/class/power_supply/axp2202-battery/hallkey` (old port; confirm the - file exists on the SP when in hand — absent on RG40XXV probes so far... it appears - only on units with the hall sensor, `PLAT_initLid` sets `has_lid = exists(LID_PATH)`). -- Behavior: lid close → inject `BTN_SLEEP` (→ deep sleep); while closed, swallow - power-key wake (only lid-open wakes) — this is exactly the old port's - `PLAT_shouldWake`/`PLAT_pollInput` logic; port it into the current - `PLAT_initLid`/`PLAT_lidChanged` API (fallbacks currently no-op). -- Check whether hall-close already triggers a kernel-level suspend on stock (some - firmwares wire it in-kernel); if so, coordinate rather than double-handle. +- `PLAT_shouldWake`: power-key (code 116) read from a persistent non-blocking fd on + event0; lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled + while charging/HDMI) works unchanged on top. + +## Lid (RG34XXSP) — implemented, untested + +`LID_PATH = axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if the file exists +(absent on RG40XXV, so the code has *never run against real hardware*). +Lid close → sleep; while closed, power-key wake is swallowed (only lid-open wakes). +To verify on first RG34XXSP contact: hallkey polarity/values, whether the kernel +already suspends on hall-close by itself (would double-handle), and power-key-while- +closed behavior. ## Battery -- `PLAT_getBatteryStatus(Fine)`: `axp2202-battery/capacity` (0-100) + - `axp2202-usb/online` — same paths as tg5040, copy verbatim; coarse bucketing in - shared code. -- Bonus (nice-to-have): H700 exposes `time_to_empty_now`, `time_to_full_now`, - `voltage_now`, `temp`, `charge_counter` — batmon's SQLite logging gets richer data - for free if we wire `PLAT_` extensions later; not required for parity. -- Low battery: shared code handles warnings; verify `capacity_alert_min` interplay - doesn't force-poweroff underneath us (stock `cexpert`/MCU behaviors — we kill - stock daemons at launch, see 02). + +- `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, coarse + bucketing in shared code — same paths as tg5040, copied verbatim. **Accuracy vs + stock reading, charging indicator, and charge-while-sleeping: untested.** +- Richer metrics (`time_to_empty_now`, `voltage_now`, `temp`, `charge_counter`) are + available for future batmon extensions; not wired. +- Standby drain: never measured (plan target was ≤ stock + ~1% over 8 h; blocked on + the wake-reliability issue making soak tests moot). ## Power off / reboot -- launch loop: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → `reboot` (systemd). - Verify clean unmount of `/mnt/sdcard` (vfat!) — systemd handles mounts it knows; - if we manually mounted TF2, unmount in the shutdown path (or add a mount unit). - If systemd poweroff is slow/unreliable from our context, port tg5040's - `poweroff_next` approach (sync + sysrq or direct PMIC) — the old port used - `shutdown` script + sysrq (`echo s/u/o > /proc/sysrq-trigger`), which is proven on - this hardware and immune to systemd state. -- Charging-while-off: stock shows a charge animation via `charg.dge` (from - launcher.sh). When powered off and plugged in, u-boot/stock handles it before our - hijack — expected to work untouched; verify `bootreason=button` vs charger paths. - -## CPU governor / performance profiles -- `governor.sh` clone: auto=`schedutil` (available ✔), performance=`performance` - (max 1512000), powersave=`conservative` capped ~720k. Same policy0 sysfs as tg5040. -- Menu/UI: powersave or schedutil; in-game: per-NextUI settings (auto/performance) — - all shared code once governor.sh maps correctly. -- H700 is a single A53 cluster: `PLAT_pinToCores` = no-op. - -## Standby-drain acceptance test (09 has the full matrix) -Overnight test: 8h in deep sleep, battery delta ≤ ~3-4% (stock-comparable). Measure -stock first on the same unit for a baseline, then NextUI sleep, then iterate on what -to shut down pre-suspend (WiFi off vs powered, BT hci down, etc.). + +Launch-loop sentinels: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → `reboot`. +Systemd handles clean unmounts — works; the old port's sysrq fallback +(`echo s/u/o > /proc/sysrq-trigger`) was never needed. Charging-while-off is handled +by u-boot/stock before our hijack, untouched. + +## CPU governor + +`governor.sh`: auto=`schedutil`, performance=`performance` @1512000, +powersave=`conservative` capped mid-range. Menu vs in-game profiles ride the shared +settings; performance is forced during game launch. Single cluster → no core pinning. diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index a01c25d60..7b17bee75 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -1,65 +1,58 @@ # 07 — WiFi & Bluetooth -## What the hardware/OS gives us (verified live) -- WiFi: Realtek **RTL8821CS** (SDIO), driver `8821cs`, interfaces `wlan0` (+`wlan1` virtual) -- BT: same combo chip, UART-attached (`rtk_hciattach ttyS1 rtk_h5`), `rtl_btlpm` module -- Stock services running: `wpa_supplicant` (with `-u -s` systemd/dbus mode), - **NetworkManager**, `bluetoothd` (BlueZ, Ubuntu 22.04 = 5.64), dnsmasq -- `/sys/class/net/wlan0/operstate` for link state (what `PLAT_getNetworkStatus` reads) - -## WiFi strategy - -NextUI's `generic_wifi.c` speaks **`wpa_cli` to a wpa_supplicant control socket** -(`WIFI_SOCK_DIR`, tg5040: `/etc/wifi/sockets`) + `udhcpc` + `rfkill.elf`. On H700 two -options: - -1. **(Recommended) Drive wpa_supplicant directly, NextUI-owned** — parity with tg5040, - `generic_wifi.c` unchanged: - - launch.sh: `systemctl stop NetworkManager` (and disable its autostart wants — or - `nmcli dev set wlan0 managed no` if we prefer to leave NM for nothing), keep/own a - wpa_supplicant instance with `-C /etc/wifi/sockets` style ctrl dir via our - `etc/wifi/wifi_init.sh` - - DHCP: Ubuntu has no udhcpc by default — use `dhclient` (present) or ship a tiny - `udhcpc` (busybox) in `.system/h700/bin`; `generic_wifi.c` shells out — check - which client name it invokes and parameterize if needed - - `#define WIFI_SOCK_DIR "/tmp/wifi/sockets"` (writable, no rootfs touch) -2. Rewrite `PLAT_wifi*` on top of NetworkManager (`nmcli`) — less code drift from the - OS, but diverges from generic_wifi.c and duplicates a working implementation. - -Go with (1); it keeps 100% shared code and the stock OS doesn't need NM for anything -we use. Credentials store, scan lists, connect flows, diagnostics — all shared. - -`rfkill.elf` (tg5040 helper) builds unchanged; Ubuntu also has `/usr/sbin/rfkill`. - -### Suspend interplay (see 06) -Observed: WiFi did not recover by itself after a `mem` suspend during probing. The -suspend wrapper must bounce the link (wpa_cli suspend/resume or ifdown/up + rejoin); -measure sleep drain with the SDIO card left powered vs `rfkill block`ed pre-suspend. - -## Bluetooth strategy - -tg5040 uses `generic_bt.c` = `bluetoothctl` + **bluealsa** + amixer; it even ships a -BlueZ-upgrade pakz because Tina's BlueZ is ancient. On H700/Ubuntu 22.04: -- BlueZ 5.64 already on device → **no `btmanager`/upgrade-pakz needed** -- `bluetoothctl` present and version-compatible with generic_bt.c's parsing (it - version-detects) — verify against 5.64 output formats -- **bluealsa is NOT part of Ubuntu 22.04** → build `bluez-alsa` in the toolchain and - ship `bluealsa` + `bluealsa-aplay`/lib in `.system/h700/{bin,lib}`; our `bt_init.sh` - starts `bluetoothd` (via systemd unit already present) + our `bluealsa --profile=a2dp-source` -- HCI bring-up: stock already runs `rtk_hciattach` at boot (confirmed running) — our - `bt_init.sh` only needs to ensure it's up (`hciconfig hci0 up`), not re-attach -- `HAS_BTAGENT` (settings pairing agent, needs glib): jammy sysroot has glib — - enable, gated the same way tg5040 does in `workspace/all/settings/makefile` - -## Feature parity checklist (all shared UI, works once PLAT_/scripts are wired) -- [ ] toggle wifi on/off, scan, connect (open/PSK), forget, signal strength -- [ ] `PLAT_connectionStrength`, online indicator in status bar -- [ ] NTP time sync after connect (`timedatectl set-ntp true`, see 03 timezones) -- [ ] RetroAchievements + Pak Store + OTA updater (all pure-HTTP on top of wlan0 — free) -- [ ] BT controller pairing + input in nextui/minarch -- [ ] BT audio (a2dp via bluealsa) incl. `PLAT_bluetoothStream*` + samplerate limit -- [ ] airplane behavior: both radios off = measurably lower idle draw +## Hardware / stock OS (verified — details in 00) + +- WiFi: Realtek RTL8821CS (SDIO), driver `8821cs`, `wlan0`; link state via + `/sys/class/net/wlan0/operstate` +- BT: same combo chip, UART-attached; stock already runs `rtk_hciattach` and + `bluetoothd` (BlueZ 5.64) at boot +- Stock also runs wpa_supplicant (dbus mode) + NetworkManager + dnsmasq — all + displaced at launch + +## WiFi (as shipped — NextUI-owned wpa_supplicant, tested ✅) + +The plan's option 1 shipped as designed: `generic_wifi.c` unchanged, NextUI owns the +supplicant. Scan/connect/forget work; the link survives sleep (bounced by the suspend +script) and NTP sync works after connect. + +`skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh`: +- launch.sh stops NetworkManager; wifi_init owns a wpa_supplicant instance with the + control socket dir `WIFI_SOCK_DIR = /tmp/wifi/sockets` +- **Credentials persist**: `wpa_supplicant.conf` lives at + `$USERDATA_PATH/wifi/wpa_supplicant.conf` (on the SD card, `update_config=1`) — an + early version kept it in tmpfs and lost networks on reboot +- **DHCP**: Ubuntu has no udhcpc, so `dhclient` (udhcpc as fallback if someone ships + it). Re-association is handled by a generated `wpa_action` script registered via + `wpa_cli -a`: on `CONNECTED` it does `dhclient -r` + `dhclient -nw`, so switching + networks re-DISCOVERs instead of keeping a stale lease +- Teardown uses `systemctl stop wpa_supplicant …` *and* `killall` belt-and-braces +- `rfkill`: h700 builds its own minimal `/dev/rfkill` ioctl tool (03) + +Suspend interplay: WiFi does not survive `mem` suspend on its own; the suspend +script stops the stack in `before()` and restarts it in `after()` (06). Verified +working across sleep on RG40XXV. + +Untested so far: RetroAchievements login/unlock, Pak Store install, OTA update flow +(all pure HTTP on top of a working wlan0 — expected free, not yet exercised). + +## Bluetooth (as shipped — system BlueZ, input yes, audio gated off) + +- BlueZ 5.64 on device → no `btmanager`/upgrade-pakz (as planned); `generic_bt.c` + drives `bluetoothctl` +- `bt_init.sh` ensures hci is up (stock's `rtk_hciattach` already ran), starts a + `bluetoothctl` agent (NoInputNoOutput), and would start `bluealsa + --profile=a2dp-source` **if the binary existed** +- `HAS_BTAGENT` enabled for h700 (settings pairing agent; jammy sysroot has glib — + links fine, loads on device) +- **BT audio: deliberately not shipped this beta** — bluez-alsa is not in Ubuntu + 22.04 and we chose to gate rather than build it: `-DNO_BT_AUDIO` hides the + samplerate UI, audiomon refuses A2DP sinks without a bluealsa binary, README says + so. Full story + re-enable path in 05 and 09-roadmap. +- BT controller pairing/input: implemented via the SDL joystick path + (`SDL_JOYSTICK_DISABLE_UDEV=1`; corrected JOY_* indices in 03) — **untested**. ## Diagnostics -`PLAT_wifiDiagnosticsEnabled/Enable` + BT equivalents: tg5040 toggles verbose logs — -copy mechanism (log paths under `$LOGS_PATH`). + +`PLAT_wifiDiagnosticsEnabled/Enable` + BT equivalents: tg5040 mechanism (verbose logs +under `$LOGS_PATH`) carried over. The launch.sh `debug-keep-network` flag file keeps +WiFi+SSH up regardless of settings — the primary dev-loop tool (08). diff --git a/docs/h700-port/08-testing-and-rollout.md b/docs/h700-port/08-testing-and-rollout.md deleted file mode 100644 index 78e1957be..000000000 --- a/docs/h700-port/08-testing-and-rollout.md +++ /dev/null @@ -1,85 +0,0 @@ -# 08 — Testing, Validation & Rollout - -## Test fleet -- RG40XXV (192.168.34.55, root/root, stockmod) — primary bring-up device -- RG34XXSP — second target (lid, 720×480) -- RG28XX — phase-2 target (rotation) -- TrimUI Brick TG5040 (192.168.34.81, root/tina) — regression reference (behavioral 1:1 comparisons) - -Dev-loop tip: the stock OS runs sshd out of the box and has a full Ubuntu userland — -iterate by `scp`ing freshly built `.elf`s directly into `.system/h700/bin` and -restarting the launch loop; no SD-card shuffling needed after first install. - -## Phase 0 exit criteria (feasibility spikes — do these FIRST) -| # | Spike | Pass criteria | -|---|---|---| -| 0.1 | ~~Cross hello-world~~ **DONE ✔** | tg5040-built displaycal.elf runs on RG40XXV stockmod + RG34XXSP Knulli | -| 0.2 | ~~ELF class + version of Mali blob~~ **DONE ✔** | 64-bit aarch64, ES 3.2 r20p0, fbdev winsys (probed live) | -| 0.3 | Raw EGL/GLES fbdev probe | context created from *our* binary; colored clear visible on panel (blob capabilities already confirmed; this tests the winsys handshake) | -| 0.4 | Custom SDL2 (malifbdev) + GL context | SDL window + GL swap at 60fps, `SDL_GetCurrentDisplayMode` sane | -| 0.5 | disp ioctls | brightness 0x102 works; gamma LUT 0x10b/0x10c visibly tints screen; survives suspend? | -| 0.6 | Suspend/resume harness | echo mem → power-button wake → script continues; repeat 20× in loop without hang | -| 0.7 | Input dump | evtest maps every button/stick on RG40XXV; SDL joystick sees same | -| 0.8 | ALSA beep | aplay a wav through SDL-ALSA path at 48k | - -Any 0.x failure = re-plan before writing platform code (each has a documented fallback -in docs 01/04). - -## Per-feature validation matrix (parity with Brick = the bar) - -Functional (each device, each release): -- [ ] cold boot to NextUI < stock-boot + 5s; boot loop stable across 10 reboots -- [ ] browse/launch/quit game in every SYSTEM pak core; save/load state; in-game menu -- [ ] fast resume (BTN_RESUME from launcher), auto-resume after power-loss -- [ ] brightness 0-10 + colortemp ramps; settings persist across reboot -- [ ] volume 0-20, mute, (headphones if jack detection lands) -- [ ] displaycal: RGB gain sliders visibly act; persist; survive sleep + game launch -- [ ] shaders: each shipped .glsl loads on Mali-G31; overlays; effects (scanline/grid) -- [ ] screenshots (PLAT_captureRendererToSurface), Recently Played, game switcher, box art -- [ ] deep sleep: auto (idle), manual (power key), in-game sleep; wake resumes exactly; 20-cycle soak -- [ ] overnight drain ≤ stock + 1% (8h mem-sleep; measure stock baseline same unit first) -- [ ] battery % accuracy vs stock reading; charging indicator; charge-while-sleeping -- [ ] WiFi: scan/connect/forget, survives sleep, NTP sync, RetroAchievements login+unlock, Pak Store install, OTA update flow -- [ ] BT: pair controller (input in launcher + game), A2DP audio with samplerate limit -- [ ] rumble: minarch rumble test core / game (moto on/off) -- [ ] RG34XXSP: lid close → sleep; lid open → wake; power key ignored while closed -- [ ] RG28XX: whole UI + games correctly rotated, no perf penalty (measure fps) -- [ ] uninstall: delete dmenu.bin → pristine stock boot - -Performance (compare against same game/core on Brick, correcting for resolution): -- [ ] GBA/SNES/PS1 full speed with vsync, no audio underruns (SAMPLES tuning) -- [ ] frame pacing: no tearing (fbdev double buffering / vsync via mali backend), input lag comparable to stock RA -- [ ] CPU governor transitions don't stutter audio - -Robustness: -- [ ] SIGUSR1 from launcher.sh stop doesn't corrupt -- [ ] SD yank / readonly card recovery path (MinUI.pak launch.sh has e2fsck hook — vfat equivalent: fsck.fat) -- [ ] stockmod coexistence: muos1.ini present → document + detect + warn in installer output - -## Rollout phases - -| Phase | Deliverable | Est. effort (1 experienced dev) | -|---|---|---| -| 0 | Feasibility spikes 0.1–0.8 on RG40XXV (0.1/0.2/0.3-version/0.6 already done) | 2–3 days | -| 1 | Build wiring: `make PLATFORM=h700 shell` via tg5040 image + in-tree SDL2 `early` build | 1–2 days | -| 2 | Boot shim + installer + skeleton; device boots to a stub | 3–5 days | -| 3 | Platform layer: video/input/audio/msettings/keymon → **nextui.elf usable** | 1–2 weeks | -| 4 | minarch + full core set + per-emu paks | 1 week | -| 5 | Power/sleep/battery/lid + rumble + governor | 1 week | -| 6 | WiFi + BT + displaycal + timezones/NTP | 1 week | -| 7 | RG34XXSP bring-up (mostly config: 720×480 + lid) | 2–3 days | -| 8 | Beta hardening on 40XXV+34XXSP, full matrix above | 1–2 weeks | -| 9 | RG28XX rotation | 3 days–1.5 weeks (depends on SDL rot path) | -| 10 | (later) RGcubexx, HDMI out, RG35XX family variants, Panel-Fix tool port | — | - -Total to a solid 40XXV+34XXSP beta: **~6–8 weeks** single-dev, parallelizable to -~3–4 weeks with two devs (one on 0–2 infra, one on 3–6 platform code). - -## Regression guardrails -- Keep `h700` additions out of `workspace/all/` except: rotation hook (04), any - `HAS_BTAGENT`-style makefile gates, updater case — list every `all/` touch in the PR - description and re-run a tg5040 build (`make PLATFORM=tg5040 build`) in CI for every - h700 PR (both platforms build from the same shared tree). -- Snapshot the probe outputs (00-device-facts) into the repo; re-run the probe script - after each Anbernic stock-firmware update (paths have historically been stable, but - `dmenu_ln`/muos hooks are stockmod-version-dependent). diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md new file mode 100644 index 000000000..08c45e201 --- /dev/null +++ b/docs/h700-port/08-testing-status.md @@ -0,0 +1,86 @@ +# 08 — Testing Status & Regression Guardrails + +## Test fleet + +| Device | IP | Login | Role | +|---|---|---|---| +| RG40XXV | 192.168.34.55 | root/root | Primary — all testing to date happened here | +| RG34XXSP | — | — | Untested (lid, 720×480) | +| RG28XX | — | — | Untested (rotation) | +| TrimUI Brick TG5040 | 192.168.34.81 | root/tina | Regression reference (behavioral 1:1 comparisons) | + +**Dev-loop tips:** +- The stock OS runs sshd with a full Ubuntu userland — iterate by `scp`ing freshly + built `.elf`s into `.system/h700/bin` and restarting the launch loop. No SD-card + shuffling after first install. +- Drop the `debug-keep-network` flag file (see launch.sh) to keep WiFi+SSH up during + testing; 5 consecutive nextui crashes also auto-start SSH for 300 s. + +## Validation matrix (status as of 2026-07-09, RG40XXV unless noted) + +✅ tested & passed ⚠️ tested, has issues ⬜ untested ✖ not implemented + +### Functional +| Item | Status | +|---|---| +| Cold boot to NextUI, stable across 10+ reboots, reasonable boot time | ✅ | +| Browse/launch/quit games across system pak cores; save/load state; in-game menu | ✅ | +| Fast resume (BTN_RESUME) + auto-resume after power loss | ✅ | +| Brightness 0–10 + colortemp ramps; persist across reboot | ✅ | +| Displaycal RGB gains: act, persist, survive sleep + game launch | ✅ | +| Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | +| Volume 0–20 + mute | ✅ | +| Rumble (moto on/off) | ✅ | +| WiFi scan/connect/forget | ✅ | +| WiFi survives sleep; NTP sync | ✅ | +| **Deep sleep (auto/manual/in-game) + wake** | ⚠️ **wake unreliable — sometimes hangs entering/leaving suspend (see 06)** | +| Screenshots, Recently Played, game switcher, box art | ⬜ | +| Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | +| Battery % accuracy vs stock; charging indicator; charge-while-sleeping | ⬜ | +| Overnight drain (8 h mem-sleep vs stock baseline) | ⬜ (blocked on wake reliability) | +| RetroAchievements login + unlock | ⬜ | +| Pak Store install | ⬜ | +| OTA update flow | ⬜ | +| BT controller pairing + input | ⬜ | +| BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | +| Headphone jack detection | ✖ not wired (05) | +| RG34XXSP: lid sleep/wake, 720×480 UI | ⬜ (no hardware tested; code wired) | +| RG28XX: rotated UI + games | ⬜ (plumbing in place, unvalidated — 04) | +| RGcubexx: 720×720 | ⬜ | + +### Performance +| Item | Status | +|---|---| +| GBA/SNES/PS1 full speed with vsync, no audio underruns | ✅ | +| Frame pacing / tearing / input lag vs stock RA | ⬜ (no complaints observed, not measured) | +| Governor transitions don't stutter audio | ⬜ | + +### Robustness +| Item | Status | +|---|---| +| SIGUSR1 from `launcher.sh stop` doesn't corrupt | ⬜ (shim traps USR1; end-to-end untested) | +| SD dirty-card recovery (`fsck.fat -a` hook in boot shim) | ⬜ (code in place) | +| muOS/stockmod coexistence: detected + splash warning | ⬜ (code in place; warn-only by design so far) | + +## Regression guardrails + +- **Every h700 PR must list its `workspace/all/` touches and re-run + `make PLATFORM=tg5040 build`** (both platforms build from the same shared tree). + The branch's complete list of net shared-code touches, for reference: + 1. `workspace/all/audiomon/audiomon.cpp` — `bluetoothAudioAvailable()` guard (skip A2DP without bluealsa) (+Makefile dep fix) + 2. `workspace/all/common/generic_video.c` — hard `exit(1)` on SDL/GL init failures + 3. `workspace/all/minarch/makefile` — h700 added to tg5040-class feature filters (RA/CHD/SRM/samplerate) + 4. `workspace/all/nextui/nextui.c` — startup LOG_info breadcrumbs + 5. `workspace/all/settings/btmenu.cpp/.hpp` — `rateItem` made optional (`NO_BT_AUDIO`) + 6. `workspace/all/settings/makefile` — h700 block (`-DHAS_BTAGENT -DNO_BT_AUDIO`, btagent, glib) + 7. `workspace/all/settings/settings.cpp` — Anbernic vendor/models, h700 platform + capability flags + 8. `workspace/all/syncsettings/syncsettings.c` — also restore colortemp/contrast/saturation/exposure/displaycal on resume + 9. `workspace/makefile` — rfkill for h700; ledcontrol/bootlogo gated to tg50x0 + 10. Root `makefile` + `makefile.toolchain` — h700 platform + tg5040-image reuse + (`workspace/all/common/api.c` was touched by the alpha-blit experiment and fully + reverted — net zero.) +- **Re-run the 00-device-facts probes after each Anbernic stock-firmware update.** + Paths have been stable historically, but `dmenu_ln`/muOS hooks are + stockmod-version-dependent, and the model-string detector reads a stock binary. +- When adding a device (34XXSP/28XX/cube): walk this matrix top to bottom on that + device; the ⬜ rows above are the backlog for RG40XXV too. diff --git a/docs/h700-port/09-branch-review.md b/docs/h700-port/09-branch-review.md deleted file mode 100644 index 1d954cfd5..000000000 --- a/docs/h700-port/09-branch-review.md +++ /dev/null @@ -1,164 +0,0 @@ -# 09 — h700 Branch Review (2026-07-08, branch tip `d8685fff`) - -Review of the `h700` branch against the plan docs and live-probed device facts. -**Verdict: architecturally faithful to the plan and remarkably complete for a first -beta — toolchain reuse, custom SDL2, cores, skeleton, suspend, installer are all -present and mostly correct. A handful of concrete bugs need fixing before/at first -on-device boot; three need a physical device test to settle.** - -## A. Confirmed bugs (verified against live device probes) - -1. **GPU thermal zone wrong** — [platform.c:143](../../workspace/h700/platform/platform.c): - `PLAT_getGPUTemp` reads `thermal_zone2`. Probed on RG40XXV: zone0=cpu, **zone1=gpu**, - zone2=**ve** (video engine), zone3=ddr, zone4=axp2202-battery. Fix: zone1. - (`PLAT_getCPUTemp` zone0 is correct.) - -2. **SDL joystick button indices likely wrong** — [platform.h:92-100](../../workspace/h700/platform/platform.h). - evtest on the live device shows event1 exposes exactly KEY codes - {1, 114, 115, 304–316, 354} — **no d-pad keycodes** (d-pad = ABS hats 16/17). - SDL's linux joystick driver assigns button indices scanning BTN-range codes first - (304→0 … 316→12, 354→13), then low codes (1→14, 114→15, 115→16). Therefore: - - `JOY_PLUS=18 / JOY_MINUS=17` cannot be right → predicted **PLUS(115)=16, MINUS(114)=15** - - Branch maps L2=9(=code 313), R2=10(=314), L3=11(=315), R3=12(=316). The old - *working* port's wiring was **L3=313, L2=314, R2=315, R3=316** → predicted SDL - indices **L3=9, L2=10, R2=11, R3=12**. Branch and old port disagree; one 2-minute - `jstest`/`evtest` session (press L2, L3, R2, R3, Vol+/- and note codes) settles it. - The branch already builds `jstest` + `evtest` in `workspace/h700/other/` — use them. - - Everything else verified consistent: A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 - MENU=8 (per old-port wiring + SDL enumeration), axes LX=0 LY=1 RX=2 RY=3 - (ABS_Z/RX/RY/RZ, signed ±4096, flat=32 — probed). - -3. **`PLAT_shouldWake` can drop the wake press** — [platform.c:265-286](../../workspace/h700/platform/platform.c): - it opens `/dev/input/event0` fresh on every poll and closes it again. evdev only - queues events for *open* fds — a power press+release that lands between polls is - lost entirely, making wake-from-sleep flaky. Fix: open once (static fd, like the - old port's persistent `input_fds`), drain per poll, close in a quit path. - -## B. Must-verify on first device boot (can't be settled from the desk) - -4. **`--disable-loadso` in the SDL2 configure** — [workspace/h700/makefile:26](../../workspace/h700/makefile). - SDL's EGL glue (`SDL_egl.c`) normally dlopens libEGL via SDL_LoadObject; with - loadso disabled, `SDL_GL_CreateContext` in the mali driver may fail outright - ("SDL is compiled without loadso" class errors). It's also *why* libasound now - needs bundling (ALSA gets linked directly instead of dlopened). If the first GL - test fails there, drop `--disable-loadso` (and `--disable-filesystem` while at it - — SDL_GetPrefPath users). NextUI's own GL calls are direct-linked - (`-lGLESv2`, `GL_GLEXT_PROTOTYPES`) and unaffected; only SDL's context creation - path is at risk. - -5. **`digital volume` direction** — [msettings.c:~1240](../../workspace/h700/libmsettings/msettings.c) - uses `set_percent(digital, 100 - val)` (inverted). Probed: range 0–63; the ALSA TLV - metadata (`dBscale-min=0.00dB` at 0, mute=1) suggests 0=mute/quietest — i.e. NOT - inverted — but sunxi `digital volume` is traditionally an attenuator (0=loudest) - and the TLV data looks garbage (step 654dB). 30-second listen test decides; if - inverted is wrong, max volume currently produces silence. - -6. **Bundled `libasound.so` shadowing** — commit `d8685fff` ships tg5040's libasound - into `.system/h700/lib`, which shadows Ubuntu's own (LD_LIBRARY_PATH puts our lib - dir first). The device HAS libasound (alsa-utils work); the tg5040 copy's - compiled-in config path may or may not resolve on Ubuntu. If audio misbehaves, - *delete the bundled libasound* rather than debugging it — the system one is fine - and SDL's direct link only needs the soname. Similarly `libUMP` is an old - Utgard-era lib; Mali-G31/kbase doesn't use UMP — likely shippable dead weight - (harmless, but the unguarded `cp $(PREFIX)/lib/libUMP.so*` fails the build if the - sysroot ever drops it). - -## C. Functional gaps vs plan (from the build/scripts sweep) - -7. **Update flow loses the clean-replace step & pakz-only installs** - ([boot.sh:81-101](../../workspace/h700/boot/boot.sh), [install/boot.sh:52-54](../../workspace/h700/install/boot.sh)): - boot.sh unzips MinUI.zip itself and **deletes the zip before running - `.tmp_update/h700.sh`**, so h700.sh's `rm -rf` of bin/lib/MinUI.pak never fires → - stale files accumulate across updates. And the whole install block only triggers - on MinUI.zip, so `*.pakz` dropped at the SD root (Pak Store flow) are never - processed. Fix: make boot.sh delegate — if `.tmp_update/h700.sh` exists, run it - with the zip still in place (tg5040 model: the installer owns extraction); - self-extract only on true first install; add a `*.pakz` existence trigger. - -8. **WiFi credentials don't survive reboot** — - [wifi_init.sh:4-6](../../skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh) puts - `wpa_supplicant.conf` in `/tmp/wifi/` (tmpfs); `generic_wifi.c` persists networks - via `wpa_cli save_config` → written to tmpfs → gone at poweroff. Point `-c` at - e.g. `$SDCARD_PATH/.userdata/h700/wpa_supplicant.conf` (keep ctrl sockets in - `/tmp/wifi/sockets` — that pairing with platform.c's `WIFI_SOCK_DIR` is correct). - Also `killall wpa_supplicant` should be `systemctl stop wpa_supplicant` (stock - runs it as a systemd unit that may restart). - -9. **BT audio can't work yet: bluealsa neither built nor shipped.** - `bt_init.sh` starts it only `if command -v bluealsa` — silently never true on - Ubuntu 22.04. Pairing/input will work (BlueZ 5.64 + btagent ✔); A2DP needs - bluez-alsa built in the toolchain and shipped in `.system/h700/{bin,lib}` (plan 07). - Decide: ship it, or gate BT-audio UI off for the first beta. - -10. **TF1-write guard ineffective** — [install/update.sh:15](../../workspace/h700/install/update.sh), - launch.sh dmenu refresh: guarded by `[ -d /mnt/mmc ]`, which is true even when - nothing is mounted there → would write dmenu.bin onto the stock **rootfs**, - violating the p1–p7 policy. Use `mountpoint -q /mnt/mmc`. - -11. **No first-boot splash** — boot.sh extraction (potentially ~1 min on FAT) runs on - a dead screen; plan 02 calls for a raw-fb `dd` splash + an "insert NextUI SD - card" image when TF2 is missing. show2 only appears once h700.sh runs. - -12. **DHCP re-association** — `dhclient -nw` is started once; switching networks later - via wpa_cli may not re-DISCOVER. Verify; if flaky, add a `wpa_cli -a` action - script that bounces dhclient on CONNECTED. - -## D. Leftovers & cleanup - -13. `skeleton/SYSTEM/h700/bin/reboot_next` is a byte-identical tg5040 copy (busybox - reboot, `/etc/profile` umount hack). It's dead code on h700 — delete it (launch.sh - correctly uses plain `reboot`/`poweroff`). -14. Dead `-brick` cfgs can never load (minarch selects `default-$DEVICE.cfg`; DEVICE ∈ - rg40xx/rg34xx/rg28xx/cube): `system-brick.cfg`, `paks/Emus/{FC,PS,SFC}.pak/default-brick.cfg`, - `EXTRAS/Emus/h700/{CPC,PUAE,FBN,VB}.pak/default-brick.cfg`. Delete. (Conversely - rg34xx/rg28xx/cube have no device cfgs yet — fine for rg40xx-first, note for later.) -15. NextCommander is built with `PLATFORM=tg5040` → UI metrics tuned for 1280×720; on - 640×480 Files.pak will render oversized. Needs an h700 stanza upstream (the - `FILE_SYSTEM=/dev/mmcblk1p1` it inherits is coincidentally correct). -16. SDL clone is unpinned (`--depth 1` default branch) — pin a commit hash; and assert - `SDL_VIDEO_DRIVER_MALI 1` in the generated config after configure, else a failed - mali check silently produces a dummy-video SDL that "builds fine". -17. Minor: boot.sh `BINARY` sentinel uses `tail -1` (payload bytes could false-match — - `head -1` is safer); no `trap '' USR1` in the shim (stock `launcher.sh stop` sends - SIGUSR1); `LOG_PATH=/mnt/mmc/nextui-h700.log` grows unbounded on TF1 (truncate per - boot / move to TF2); `make PLATFORM=h700 shell` doesn't get the PLATFORM env - override that build targets got; `PLAT_getGPUSpeed()` hardcodes 660 MHz; - `PLAT_enableBacklight` doesn't drive `work_led` (plan 06 nicety); `SCREEN_FPS 60.0` - still needs per-panel measurement; settings.elf glib: sysroot version must be ≤ - device's 2.72 (verify once). - -## E. Done well (verified) - -- **Toolchain reuse** exactly per plan: `TOOLCHAIN_NAME=tg5040` override covers pull/ - clone/init/clean; PLATFORM/UNION_PLATFORM correctly forced into the container - (`PREFIX_LOCAL=/opt/nextui` is a fixed ENV — no tg5040 leakage); no tg5050/tg5040 - regression (additive filters only). -- **Custom SDL2 built and shipped**: SDL-malifbdev-rot with mali+ALSA only, installed - to PREFIX_LOCAL so `pkg-config sdl2` resolves to it; `libSDL2*` bundled to - `.system/h700/lib`; launch.sh sets lib-dir-first LD_LIBRARY_PATH and - `SDL_VIDEODRIVER=mali`. Matches plan 04. -- **Cores**: full 28-core tg5040 list, all 29 patches properly retargeted, picodrive - LTO fix correct, stock output names match packaging. -- **launch.sh**: zero trimui-isms; TF2 mount + `/mnt/SDCARD` compat symlink; DEVICE - detection consistent across launch.sh ↔ platform.c ↔ settings.cpp ("rg40xx"/ - "rg34xx"/"rg28xx"/"cube"); stock daemons killed; `nextui_exec` loop byte-compatible - with tg5040 conventions; systemd-native poweroff/reboot; debug-keep-network toggle. -- **suspend**: faithful tg5040 port — mem-write retry + false-negative workaround, - ALSA state save/restore, wifi/bt stop-before/start-after (covers the verified - "WiFi doesn't auto-recover" issue), hooks, `work_led` sleep indication. -- **governor.sh**: correct policy paths and sane mapping within probed 480–1512 MHz. -- **updater**: device-tree check ordered before the ambiguous `0xd03` case, zero28 - arm guarded — exactly per plan. -- **settings.cpp**: clean Anbernic vendor/model plumbing; colortemp/contrast/exposure/ - displaycal gates extended to h700; displaycal compiled into libmsettings ✔. -- **keymon**: correct codes (MENU 312/354 + SELECT 310 modifiers, vol 114/115), - repeat + sleep-gap handling, reads event0-2. -- **Lid support** (RG34XXSP) already implemented in platform.c via `hallkey` with - closed-lid wake gating. - -## Suggested fix order - -1. A1 (thermal zone), A3 (shouldWake fd), C10 (mountpoint guard), D13/D14 (deletions) — mechanical, do now. -2. C7 (installer flow) + C8 (wpa conf persistence) — before first real install. -3. First on-device boot: settle B4 (loadso), B5 (volume direction), A2 (jstest button map), B6 (libasound), C12 (dhclient). -4. Then: C9 (bluealsa decision), C11 (splash), D15-17 polish. diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md new file mode 100644 index 000000000..e4185d527 --- /dev/null +++ b/docs/h700-port/09-roadmap.md @@ -0,0 +1,89 @@ +# 09 — Roadmap: from working beta to a 9.5/10 port + +Everything below is verified against branch tip `752cefe8` (2026-07-09). Ordered by +impact within each section. + +## P0 — Correctness / robustness + +1. **Fix unreliable sleep/wake** (the #1 defect — see 06 for the state of play and + suspects). All previously-identified software suspects are already fixed, so this + needs real debugging: instrument `skeleton/SYSTEM/h700/bin/suspend` with + breadcrumbs to distinguish hang-on-entry from hang-on-exit, compare our + pre-suspend service/driver state against stock's sleep path, and reconsider the + 5-try retry loop (a retry against a half-suspended SoC may itself wedge). Blocks + the overnight-drain test and any credible "sleep is a headline feature" claim. +2. **Decide muOS/stockmod coexistence policy** (`boot/boot.sh` — currently shows + "STOCK TARGET REQUIRED" splash but *continues booting*; launch.sh drops + stockmod-warning.txt). Either hard-fail with the splash held on screen, or + document why continuing is safe. A user with stockmod installed currently gets a + confusing half-boot. +3. **Run the untested-robustness gauntlet** (08 matrix ⬜ rows): clean uninstall, + SIGUSR1 quit, dirty-SD fsck recovery, battery accuracy/charging, screenshots/ + recents/box art, RetroAchievements, Pak Store, OTA update. Each is implemented; + none has been exercised. OTA especially — a broken update path is the worst + post-release bug class. +4. **Document-or-fix the `digital volume` inversion** (`msettings.c` `100 - val`): + it's confirmed correct by ear, but the only in-tree explanation is a terse + comment. One paragraph in the code explaining the attenuator semantics + garbage + TLV prevents a future "cleanup" from re-breaking audio. + +## P1 — Feature completeness + +5. **RG34XXSP bring-up** — mostly config already wired (`is_rg34xx` 720×480, lid). + Needs hardware in hand: hallkey semantics, lid sleep/wake, 720×480 UI pass, and + per-Emu `default-rg34xx.cfg` device cfgs (none exist yet — only `default.cfg`). +6. **RG28XX rotation validation** — plumbing exists on both layers (SDL_ROTATION=1 + env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot + patch covers GL contexts and that the two layers don't double-rotate; add + `default-rg28xx.cfg` cfgs. +7. **Resolve the alpha/tinted-bitmap question** (04) — the reverted experiment means + H700 rides a rendering path that *looks* right but differs from what was attempted. + Reproduce the original artifact, root-cause it (likely SDL2/SDL2_image + pixel-format or blend defaults in our custom build), and either fix in the SDL + build (preferred — keeps `workspace/all/` clean) or land a properly-gated shared + fix. +8. **BT audio: ship bluealsa or formally drop it.** The gate-off is clean and + reversible (drop a `bluealsa` binary in `.system/h700/bin` and the path lights + up). Building bluez-alsa in the toolchain is the last piece of tg5040 feature + parity. If dropped instead, remove the dormant bt_init/audiomon plumbing. +9. **480p UI audit** (04) — systematic pass over fonts, pills, quick switcher, long + titles at 640×480 and 720×480. NextUI hadn't rendered at 480p in ~2 years; + browsing looks fine but nobody has checked the corners. +10. **Headphone jack detection** (05) — investigate how stock switches speaker/HP on + a live device; may be hardware auto-mute (= nothing to do). Cheap to answer, + closes a matrix row either way. +11. **Measure real panel refresh** — `SCREEN_FPS 60.0` is assumed. A vsync-timing + test per device takes minutes and protects frame pacing math. +12. Later: RGcubexx bring-up (720×720, wired but untested), HDMI out (`SetHDMI()` is + a no-op; mechanism documented in 04), RG35XX-family variants, Panel-Fix tool. + +## P2 — Cleanup / refactors / simplifications + +13. **Gate the crash-loop network behavior**: after 5 nextui crashes, launch.sh + brings up WiFi+SSH for 300 s unconditionally — great for beta, a mild security + surprise for release. Tie it to the `debug-keep-network` flag (or a + `.userdata` setting) before calling the port done. +14. **Dedupe boot/installer shell code** — `boot/boot.sh` and `install/boot.sh` + share mount/splash/log idioms with subtle divergence risk. Extract the common + helpers into one sourced file inside the shim payload. +15. **Dedicated h700 toolchain image, revisited** (01) — a thin + `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 (and bluealsa if #8 + ships) removes the pitfall classes 1–3 in 01 structurally and cuts CI time. Do + it when the next external dep lands. +16. **Trim remaining tg5040 residue in the skeleton** — sweep h700 paks/cfgs for + trimui-isms and stale comments (the big items — reboot_next, -brick cfgs, + libUMP/libasound bundling — are already gone). +17. **settings glib check** — settings.elf links the sysroot's glib and empirically + loads against the device's 2.72; add a one-line `ldd`-against-stock-rootfs CI + check (01's bundling rule) so an SDK bump can't silently break it. +18. **Wire richer battery metrics** (optional) — `time_to_empty_now`/`voltage_now`/ + `charge_counter` exist on the PMIC; batmon's SQLite would get better data for a + trivial PLAT extension. + +## What "9.5/10" looks like + +- Sleep/wake solid across a 20-cycle soak + overnight drain ≤ stock + 1% (P0 #1) +- Every 08-matrix row ✅ on RG40XXV, and the functional set ✅ on RG34XXSP + RG28XX +- BT audio shipped or explicitly descoped in README +- No debug behaviors in the release path; docs (README.txt) match actual behavior +- CI: h700 + tg5040 both build on every PR touching shared code, with the ldd check diff --git a/docs/h700-port/10-branch-review-supplement.md b/docs/h700-port/10-branch-review-supplement.md deleted file mode 100644 index 9e15f422a..000000000 --- a/docs/h700-port/10-branch-review-supplement.md +++ /dev/null @@ -1,104 +0,0 @@ -# 10 — h700 Branch Review Supplement (2026-07-08) - -Additive findings **not covered** in [09-branch-review.md](09-branch-review.md). -Use doc 09 as the primary review; this file only extends it. - -**Primary verdict (doc 09):** architecturally faithful to the plan and remarkably -complete for a first beta. This supplement records code-quality issues, validation -debt, and one factual correction to doc 09 §E. - ---- - -## Completion framing - -Doc 09's verdict stands: this is a **faithful, build-complete first beta**, not a -finished port. Against [08-testing-and-rollout.md](08-testing-and-rollout.md): - -- Phases 1–6 are largely implemented in tree -- **Phase 8** (full validation matrix) is entirely open -- **Phase 9** (RG28XX rotation) has not started -- No on-device parity testing is recorded yet - ---- - -## F. Additional findings (not in doc 09) - -**18. `scaleColortemp()` undefined behavior on bad input** — -[workspace/h700/libmsettings/msettings.c](../../workspace/h700/libmsettings/msettings.c): -the switch covers 0–40 but has no `default`; a corrupt settings value returns an -uninitialized `raw`. - -**19. Production debug logging in libmsettings** — `SetRawBrightness`, -`SetRawColortemp`, `SetRawDisplayCal`, `SetJack`, `SetAudioSink`, contrast/ -saturation/exposure all `printf` to stdout on every change. Will flood -`$LOGS_PATH/*.txt` on device; strip or gate behind a debug flag before beta. - -**20. `PLAT_setDateTime()` buffer overflow risk** — -[platform.c](../../workspace/h700/platform/platform.c) uses `sprintf(cmd, ...)` into -a 512-byte stack buffer; the governor path already uses `snprintf`. Align them. - -**21. `PLAT_getModel()` returns `getenv("RGXX_MODEL")` directly** — fragile if -anything retains the pointer across env changes. Low probability at runtime, but a -static copy would be safer. - -**22. HDMI hotplug never wired** — `GetHDMI()` / `SetHDMI()` are no-ops in h700 -`msettings.c`. [00-device-facts.md](00-device-facts.md) confirms -`/sys/class/extcon/hdmi/` exists; `hdmimon()` in minarch/nextui therefore never -fires. Affects HDMI-aware sleep, rumble skip (plan 03), and any HDMI UI. - -**23. `hasMuteToggle()` excludes h700** — [settings.cpp](../../workspace/all/settings/settings.cpp) -gates the FN-switch / mute-advanced UI to tg5040/tg5050 only. H700 has mute via `SPK` -mixer + `PLAT_overrideMute`; users won't see controls the hardware supports. - -**24. Post-resume display state not re-applied** — Plan 06 calls for re-applying -brightness + displaycal gamma LUT after wake (panel may clear LUT). No hook in -`suspend`, `launch.sh`, or a `post-resume.d` default script does this. - -**25. Suspend `after()` races the UI** — -[suspend](../../skeleton/SYSTEM/h700/bin/suspend) runs service restore (`after &`) in -background for wake latency. UI can resume before WiFi/BT are up — relevant for RA -login, Pak Store, settings WiFi pane immediately after wake. - -**26. muOS precedence is warn-only** — [boot.sh](../../workspace/h700/boot/boot.sh) -and [launch.sh](../../skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh) log/write -`stockmod-warning.txt` when `muos1.ini` is present but still boot NextUI. Plan 02 -flags this as a top risk; consider hard-failing or a blocking installer message. - -**27. systemd logind power-key conflict unaddressed** — Plan 06 says verify -`HandlePowerKey=ignore`; `launch.sh` doesn't configure logind. Risk of -double-handling with NextUI's power-key sleep/wake. - -**28. No TF2 filesystem recovery** — Plan 08 calls for a vfat `fsck.fat` hook -(MinUI.pak e2fsck equivalent). Not present in h700 skeleton. - -**29. RG28XX rotation still unimplemented** — Doc 09 D14 notes missing per-device emu -cfgs; worth stating explicitly: `is_rg28xx` is detected but there is no SDL rotation -env, no `PLAT_getDisplayRotation()` hook in `generic_video.c`, and no 480×640 panel -handling beyond logical 640×480. - -**30. 480p UI audit not started** — Plan 04's top risk (first 480p platform in ~2 -years): fonts, pills, quick switcher at 640×480. No evidence of a desktop or on-device -pass. - -**31. No user-facing install docs** — [skeleton/BASE/README.txt](../../skeleton/BASE/README.txt) -has no RG40XX / H700 / `dmenu.bin` section. Install flow exists in code but isn't -documented for end users. - -**32. Correction to doc 09 §E ("suspend")** — §E claims "ALSA state save/restore." -The script **saves** in `before()` but **restore is commented out** in `after()` -(lines 58–60). Save-only is accurate; full restore is not implemented. - ---- - -## G. Suggested additions to doc 09 fix order - -Doc 09's sequence is good. Slot these in: - -| When | Items | -|---|---| -| Before first boot (mechanical) | #18 (`scaleColortemp` default), #19 (strip debug prints) | -| With C7/C8 (installer + WiFi) | #24 (post-resume displaycal/brightness hook) | -| First on-device session | #22 (HDMI extcon probe), #23 (mute UI gate decision), #25 (post-wake WiFi race) | -| Before any public beta | #29–31 (rotation, 480p UI, README) | - -Do **not** re-litigate doc 09 items A1–D17 here — they remain the priority queue. \ No newline at end of file diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 46037e79c..f2c5dba2d 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -1,87 +1,73 @@ -# NextUI → Allwinner H700 (Anbernic RG XX) Port Plan +# NextUI → Allwinner H700 (Anbernic RG XX) Port -**Goal:** run NextUI on the Anbernic RG XX line (Allwinner H700) with feature parity -with the TrimUI Brick (tg5040) — including displaycal, WiFi/BT, and first-class -sleep leveraging the stock OS's excellent suspend — installed *on top of the latest -Anbernic stock OS*, no reflash, fully reversible. +**Goal:** NextUI on the Anbernic RG XX line (Allwinner H700) with feature parity with +the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top +of the stock Anbernic OS*, no reflash, fully reversible. -**Initial targets:** RG40XXV and RG34XXSP. RG28XX (rotated panel) follows. CubeXX, -HDMI-out and the wider RG35XX family are follow-ups on the same platform code. +**Status (2026-07-09): working beta on RG40XXV.** Boot, video (custom Mali SDL2 + +full GLES shader pipeline), audio, input, games at full speed, brightness/colortemp/ +displaycal, WiFi, and rumble are all tested-good on hardware. Known open items: sleep +wake is unreliable (the #1 defect), BT audio is gated off, RG34XXSP/RG28XX/cube are +wired but untested. Full status in [08](08-testing-status.md), path to done in +[09](09-roadmap.md). + +These docs began as the implementation plan and were restructured after the +implementation landed (branch `h700`, 17 commits) into reference documentation: +verified device facts, the architecture as shipped, deviations from the plan and why, +and the lessons that transfer to future platform ports. ## Documents | Doc | Contents | |---|---| -| [00-device-facts.md](00-device-facts.md) | Ground truth: live probe results from RG40XXV + TG5040, old-port sysfs inventory, boot-chain analysis | -| [01-toolchain-and-build.md](01-toolchain-and-build.md) | h700-toolchain docker image, sysroot, repo/build integration | -| [02-boot-and-installer.md](02-boot-and-installer.md) | dmenu.bin hijack, installer, SD layouts, skeleton tree | -| [03-platform-layer.md](03-platform-layer.md) | `workspace/h700/`: platform.c/h, input, libmsettings, keymon, cores | -| [04-video-display.md](04-video-display.md) | SDL2+Mali/GLES stack, per-device geometry, RG28XX rotation, HDMI, displaycal | -| [05-audio.md](05-audio.md) | ALSA/SDL audio, volume/mute, jack, BT audio | -| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Deep sleep, wake, lid (34XXSP), battery, governors, poweroff | -| [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | wpa_supplicant strategy, bluealsa, parity checklist | -| [08-testing-and-rollout.md](08-testing-and-rollout.md) | Phase-0 spikes, validation matrix, phases & estimates | +| [00-device-facts.md](00-device-facts.md) | Ground truth: probed hardware facts, sysfs/ioctl/evdev reference, boot chain, quirks | +| [01-toolchain-and-build.md](01-toolchain-and-build.md) | tg5040-image reuse, in-tree SDL2, **toolchain-reuse pitfalls (read before porting anything else)** | +| [02-boot-and-installer.md](02-boot-and-installer.md) | dmenu.bin hijack, boot shim, installer, SD layout, uninstall | +| [03-platform-layer.md](03-platform-layer.md) | `workspace/h700/`: platform.c/h, input (evdev-primary), libmsettings, keymon, cores | +| [04-video-display.md](04-video-display.md) | SDL2+Mali/GLES stack, geometry, rotation, HDMI, displaycal, the alpha-blit question | +| [05-audio.md](05-audio.md) | ALSA path, the dlopen'd-libasound bug story, volume/mute quirks, BT-audio gating | +| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Sleep design, **the wake-reliability issue**, lid, battery, governors | +| [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | NextUI-owned wpa_supplicant, DHCP/creds handling, BT status | +| [08-testing-status.md](08-testing-status.md) | Validation matrix with real results, regression guardrails, shared-code touch list | +| [09-roadmap.md](09-roadmap.md) | Prioritized path from beta to a 9.5/10 port | -## Why this port is very tractable (evidence-based) +## Architecture in one paragraph -1. **Same silicon family, same BSP generation as the reference platform.** H700 and - the TG5040's A133P are both quad-A53 Allwinner SoCs on 4.9 BSP kernels with the - same disp2 display driver (`/dev/disp`, identical `/sys/class/disp` attrs — verified), - the same AXP2202-family PMIC with the *same* battery sysfs paths (verified), and - `freeze mem` suspend (verified working by suspending the actual RG40XXV remotely). -2. **Same CPU arch and compatible glibc.** Stock RG OS is Ubuntu 22.04 arm64 - (glibc 2.35) vs tg5040's glibc 2.33 — tg5040-built aarch64/cortex-a53 binaries are - ABI-compatible with the target. Cores list ports unchanged; no 32-bit toolchain - resurrection needed (the old rg35xxplus port was 32-bit — we go 64-bit). -3. **NextUI's platform abstraction is clean.** Shared code (`workspace/all/`) has - essentially zero platform #ifdefs; a platform = one directory + skeleton + toolchain - image. tg5050 proves the clone-and-repoint model. -4. **The old MinUI rg35xxplus port is recoverable from git** (`git show 8cd78866:...`) - and documents every H700 hardware path — buttons, brightness ioctl, rumble, lid, - HDMI, boot hijack — most re-verified live on 2026 firmware during this planning. - It is a *hardware-paths reference only*: its software architecture (32-bit, - SDL_Renderer, pre-shader-era APIs) is obsolete; **tg5040 is the golden platform** - and the code clone base. -5. **The boot hijack still exists on current firmware** (verified in the stock - launcher scripts on-device): drop `dmenu.bin` on the FAT ROMs partition → stock - runs it instead of its frontend. Reversible by deleting one file. +One `h700` platform serves rg40xx/rg34xx/rg28xx/cube (`DEVICE` env, detected at boot +from the stock dmenu.bin binary). It builds inside the **tg5040 toolchain image** (same +aarch64/A53 target, forward-compatible glibc) with one in-tree extra: a pinned custom +SDL2 (`JohnnyonFlame/SDL-malifbdev-rot`) targeting the Mali blob's fbdev EGL winsys. +NextUI's shared `generic_video.c`/`generic_wifi.c`/`generic_bt.c` run unchanged. Boot +is hijacked by dropping one `dmenu.bin` file on the stock card's FAT partition; NextUI +itself lives entirely on TF2. The stock Ubuntu userland is used aggressively +(systemd, timedatectl, dhclient, BlueZ 5.64, stock unzip) rather than bundled around. -## Key decisions (rationale in the linked docs) +## Key decisions — outcome register -| Decision | Choice | Doc | +| Decision | Planned | Shipped / outcome | |---|---|---| -| Platform name | `h700` (one platform, `DEVICE` env selects rg40xx/rg34xx/rg28xx/cube — the tg5040 `is_brick` pattern) | 03 | -| Arch | aarch64 / cortex-a53, 64-bit (matches stock OS & tg5040 flags) | 01 | -| Toolchain | **Reuse the tg5040 docker image** (empirically proven: tg5040-built displaycal.elf runs on stockmod + Knulli); custom SDL2 built in-tree (`workspace/h700/other/`, old-port pattern); dedicated image deferred | 01 | -| Video | Bundled custom SDL2 (JohnnyonFlame/SDL-malifbdev-rot, rebuilt 64-bit) + Mali-G31 blob GLES 3.2 → NextUI's generic_video/shader pipeline unchanged | 04 | -| Rotation (28xx) | Try SDL-level rot first; durable plan = small rotation hook in generic_video present pass | 04 | -| Sleep | `echo mem` (verified) + tg5040-style suspend wrapper (wifi bounce on resume required — observed); power-button wake; RTC wake unavailable | 06 | -| Lid (34XXSP) | `axp2202-battery/hallkey`, old-port semantics in current `PLAT_initLid/lidChanged` API | 06 | -| WiFi | NextUI-owned wpa_supplicant (generic_wifi.c unchanged); stop NetworkManager at launch | 07 | -| BT | System BlueZ 5.64 + ship bluealsa (no btmanager pakz needed) | 07 | -| Rumble | `axp2202-battery/moto` (on/off) | 03 | -| LEDs | `MAX_LIGHTS 0`; `work_led`/`workled_sleep` for power-LED sleep signaling only | 03 | -| Brightness / displaycal | Same `/dev/disp` ioctls as tg5040 (0x102 brightness, 0x10b-d gamma LUT) — expected 1:1 | 04 | -| Install location | NextUI entirely on TF2 (`/mnt/sdcard`); stock TF1 card untouched except one drag-dropped `dmenu.bin` on its FAT ROMs partition (the verified stock-boot hijack; stock OS partitions never written). No TF1-only mode. | 02 | - -## Top risks (each has a fallback documented) - -1. ~~Mali blob 32-bit-only / wrong winsys~~ **RESOLVED ✔** (verified on device): - blob is 64-bit aarch64, OpenGL ES 3.2 (r20p0, matching kernel kbase), fbdev EGL - winsys — and the stock OS's own SDL2 is 64-bit built on the `mali` video driver. - The planned stack is exactly what the device already runs (00/04). -2. **NextUI UI regressions at 480p** — no 480-line platform has existed for ~2 years; - layout/pill/font audit budgeted (04). -3. **RG28XX rotation through the GL path** — the malifbdev-rot patch may only rotate - the non-GL blitter; the generic_video rotation hook is the designed fallback (04). -4. **stockmod boot precedence** (`muos1.ini` beats our hijack) — documentation + - installer detection (02). -5. **Sleep-resume WiFi/panel quirks** — resume-side re-init is planned work, not an - afterthought (06); 20-cycle + overnight-drain acceptance tests (08). +| Platform | one `h700`, `DEVICE` env per device | ✅ as planned | +| Arch / toolchain | 64-bit, reuse tg5040 image | ✅ as planned — with real costs; pitfalls catalogued in 01 | +| SDL2 | in-tree malifbdev-rot build | ✅ as planned, pinned + config-asserted | +| Video | generic_video GLES pipeline on Mali blob | ✅ worked 1:1; shaders/overlays/effects tested-good | +| **Input** | SDL joystick route | **Deviation:** raw evdev primary (SDL js enumeration unreliable on stock image); SDL kept for BT pads (03) | +| **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | +| **BT audio** | build + ship bluealsa | **Deviation:** gated off this beta (`NO_BT_AUDIO`); re-enable path documented (05/07) | +| Sleep | `echo mem` + tg5040-style wrapper | ✅ implemented incl. resume restore — ⚠️ wake unreliable, open (06) | +| Lid | hallkey → PLAT lid API | ✅ wired; untested (no 34XXSP yet) | +| WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | +| Rumble / LEDs | moto sysfs; MAX_LIGHTS 0 | ✅ as planned; rumble tested-good | +| Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | +| Install | TF1 gets one file; NextUI on TF2; no TF1-only mode | ✅ as planned; TF1 writes mountpoint+cmp guarded | +| **Splash** | per-panel raw-BMP `dd` assets | **Deviation:** `fbsplash` text renderer — no per-resolution assets needed (02) | +| RG28XX rotation | SDL-level first, GL hook fallback | Both layers plumbed; unvalidated (04) | +| HDMI | stretch goal | Detection wired; `SetHDMI()` no-op — still a stretch goal (04) | -## Timeline +## Top open risks -~6–8 weeks single-dev to a 40XXV + 34XXSP beta; RG28XX ≈ +1 week after. Phase table -with per-phase exit criteria in [08-testing-and-rollout.md](08-testing-and-rollout.md). -Start with the Phase-0 spike list — every architectural bet above gets proven or -re-planned within the first week, before any large code investment. +1. **Sleep/wake hangs** — headline feature not yet trustworthy ([06](06-power-sleep-battery.md), roadmap P0). +2. **Untested device matrix** — 34XXSP/28XX/cube code paths have never met hardware. +3. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read + Anbernic's binaries/scripts; a firmware update can move them (guardrails in 08). +4. **Alpha-blit unknown** — rendering differs from what a compat experiment expected; + currently looks right, root cause unowned (04). From c175e86f3625d097d758202f3d29408abf1207d6 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 12:03:22 +0200 Subject: [PATCH 21/76] docs(h700): update roadmap with alpha-blit resolution and UI findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Alpha/tinted-bitmap question resolved: glitches were the missing 64-bit libpng bundle, not main's alpha-blending work; plan is to rebase the h700 branch onto main including that work. - 480p UI verdict from use: OK for alpha; Battery pak hint pills overlap. - New roadmap item: audit Brick-era hardware assumptions in shared UI (Input tester layout, Fn switch, dead enhance display controls — only backlight/colortemp/white-point/RGB tuning work on RG XX). --- docs/h700-port/00-device-facts.md | 2 +- docs/h700-port/03-platform-layer.md | 10 +++-- docs/h700-port/04-video-display.md | 50 ++++++++++++++--------- docs/h700-port/09-roadmap.md | 61 ++++++++++++++++++----------- docs/h700-port/README.md | 7 +++- 5 files changed, 83 insertions(+), 47 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index c4d344f59..c990951d0 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -35,7 +35,7 @@ Anbernic stock-firmware update — paths have historically been stable, but the ### Display - `/dev/fb0`: 640×480 (virtual_size `640,480`); modes list includes `U:1280x1024p-59`, `U:640x480p-75`, `U:640x480p-59` (HDMI modes appear here) - Allwinner **disp2** driver: `/dev/disp` char device present -- `/sys/class/disp/disp/attr/` contains: `color_temperature`, `enhance_bright`, `enhance_contrast`, `enhance_saturation`, `enhance_mode`, `xres`, `yres`, … — near-identical attribute set to TG5040 (same disp2 driver family) +- `/sys/class/disp/disp/attr/` contains: `color_temperature`, `enhance_bright`, `enhance_contrast`, `enhance_saturation`, `enhance_mode`, `xres`, `yres`, … — near-identical attribute set to TG5040 (same disp2 driver family). ⚠ `color_temperature` works; the `enhance_*` attrs accept writes but have **no visible effect** on RG XX panels (unlike tg5040) - **No `/sys/class/backlight`** — brightness via `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` (0x102), args `{0, raw 0-255, 0, 0}`. Confirmed working in the shipped port (level curve in 03). There is also a `brightness` file under the AXP battery sysfs used by the stock `brightCtrl.bin` daemon — we kill that daemon at launch. - Gamma LUT ioctls `DISP_LCD_SET_GAMMA_TABLE (0x10b)` / `GAMMA_CORRECTION_ENABLE (0x10c)` / `DISABLE (0x10d)` — **confirmed working**: displaycal RGB gains visibly act, persist, and survive sleep + game launch on RG40XXV. - Boot arg: `lcd_type=boe` (panel vendor in cmdline — may vary per unit) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index d3307482c..2304f1c81 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -87,10 +87,12 @@ open/closed per poll and could drop the wake press between polls. correct by ear; the control's TLV metadata is garbage). `lineout volume` secondary. - **Mute**: `SPK` switch off + store/restore volume (no `/sys/class/speaker/mute` on H700). h700 is included in `hasMuteToggle()` in settings.cpp. -- **Color temperature**: `/sys/class/disp/disp/attr/color_temperature`, plus - `enhance_contrast` / `enhance_saturation` / `enhance_bright` — same disp2 attrs as - tg5040. All `scale*()` switches carry `default:` cases (a draft could hit - uninitialized values on out-of-range input). +- **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — works + (tested ✅). The sibling `enhance_contrast` / `enhance_saturation` / + `enhance_bright` attrs are also written, **but have no visible effect on RG XX + panels** — those settings need gating off for h700 (09-roadmap #8). All + `scale*()` switches carry `default:` cases (a draft could hit uninitialized + values on out-of-range input). - **DisplayCal**: same gamma-LUT ioctls as tg5040 (0x10b/0x10c/0x10d) — worked 1:1 as predicted; tested passing on RG40XXV including persistence across sleep and game launch. diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index d45169e75..47d92cf90 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -30,11 +30,15 @@ The stack: | RG28XX | 480×640 portrait | 640×480 logical | rotation plumbed, untested (below) | | RGcubexx | 720×720 | 720×720 | wired (`is_cube`), untested | -### 480p UI audit — still open +### 480p UI — mostly fine, polish pass pending These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't -rendered at 480p for ~2 years. `FIXED_SCALE 2` + `MAIN_ROW_COUNT 6` work, and general -browsing looks right on RG40XXV, but no systematic audit of fonts / pills / quick -switcher / long-text layouts at 640×480 (or 720×480) has been done. See 09-roadmap. +rendered at 480p for ~2 years. Real-use verdict on RG40XXV: **no systemic breakage — +OK for alpha**. Known concrete issue: in some paks (e.g. the Battery pak) the +button-hint pills are large enough to overlap each other. A full audit of every +shipped-by-default UI surface at 640×480/720×480 is still owed before release +(09-roadmap). Related but distinct: several shared UI pieces hardcode Brick-era +hardware assumptions (Input tester layout, Fn switch, dead display controls) — see +09-roadmap #8. ## RG28XX rotation — implemented, unvalidated @@ -64,22 +68,32 @@ Treat the whole path as unverified. Same `/dev/disp` gamma-LUT ioctls as tg5040 (`0x10b` set / `0x10c` enable / `0x10d` disable). On RG40XXV: RGB gain sliders visibly act, persist, and **survive sleep and -game launch** (syncsettings.elf re-applies the LUT after resume — 06). The `enhance_*` -attrs (contrast/saturation/exposure) are exposed through settings just like tg5040; -`settings.cpp` gained the Anbernic vendor + RG40XX/RG34XX/RG28XX/RGCubeXX models and -enables colortemp/displaycal/mute/analog-stick/wifi/bt capability flags for h700. +game launch** (syncsettings.elf re-applies the LUT after resume — 06). `settings.cpp` +gained the Anbernic vendor + RG40XX/RG34XX/RG28XX/RGCubeXX models and enables +colortemp/displaycal/mute/analog-stick/wifi/bt capability flags for h700. Per-panel default gain presets: not yet measured (neutral defaults). -## Known unresolved: alpha/tinted-bitmap blits - -An attempt to normalize the asset sheet and force alpha-blend blits for H700's -SDL2/SDL_image behavior (`GFX_needsBitmapBlendCompat()` gated in shared `api.c`) was -committed and **reverted 16 minutes later** — it regressed the known-good rendering. -The branch deliberately stays on the "pre-alpha graphics stack"; `workspace/all/` -carries **zero net change** from the experiment. Symptom class to look for when -revisiting: bitmaps whose alpha should tint/blend rendering opaque (or vice versa) -where tg5040 renders correctly. Root cause not yet established — likely a pixel-format -or blend-mode default difference in our SDL2/SDL2_image build. See 09-roadmap. +**What actually works on RG XX panels:** LCD backlight brightness, color temperature, +white-point correction (displaycal), RGB tuning. The `enhance_*` display controls +(brightness/contrast/saturation/exposure) are exposed in settings just like tg5040 +**but do nothing on RG XX** — the sysfs attrs exist (00) yet have no visible effect. +They need per-platform gating, and syncsettings shouldn't bother restoring them +(09-roadmap #8). + +## Alpha/tinted-bitmap blits — resolved (it was libpng all along) + +During bring-up, graphical glitches were blamed on main's alpha-blending work; a +compat experiment (`GFX_needsBitmapBlendCompat()` gated in shared `api.c`) was +committed and reverted 16 minutes later, and the branch stayed pinned on the +pre-alpha graphics stack. **The real root cause turned out to be the missing 64-bit +`libpng12` bundle** — SDL2_image dlopens libpng, the stock OS only has a 32-bit copy, +and the silent dlopen failure corrupted image loading (fixed in `510d3bb1`, see +pitfall #2 in 01). The alpha-blending code on main was never at fault. + +Consequence: the plan is to **rebase/merge the h700 branch back onto current main, +alpha-blending work included** (09-roadmap #7). `workspace/all/` carries zero net +change from the reverted experiment, so the rebase is clean on that front; verify +rendering on device after the merge as the closing check. ## Boot splash diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index e4185d527..3d296b38c 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,7 +1,7 @@ # 09 — Roadmap: from working beta to a 9.5/10 port -Everything below is verified against branch tip `752cefe8` (2026-07-09). Ordered by -impact within each section. +Everything below is verified against branch tip `752cefe8` (updated 2026-07-09). +Ordered by impact within each section. ## P0 — Correctness / robustness @@ -36,47 +36,64 @@ impact within each section. env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot patch covers GL contexts and that the two layers don't double-rotate; add `default-rg28xx.cfg` cfgs. -7. **Resolve the alpha/tinted-bitmap question** (04) — the reverted experiment means - H700 rides a rendering path that *looks* right but differs from what was attempted. - Reproduce the original artifact, root-cause it (likely SDL2/SDL2_image - pixel-format or blend defaults in our custom build), and either fix in the SDL - build (preferred — keeps `workspace/all/` clean) or land a properly-gated shared - fix. -8. **BT audio: ship bluealsa or formally drop it.** The gate-off is clean and +7. **Rebase/merge the h700 branch back onto main, including the alpha-blending + work.** The alpha/tinted-bitmap question is solved: the graphical glitches were + caused by the missing 64-bit libpng bundle (SDL2_image's dlopen failing — + fixed in `510d3bb1`), **not** by main's alpha-blending changes. The blend-compat + revert was treating the wrong suspect. With libpng fixed, re-apply/merge on top + of current main and confirm rendering stays clean on device (04). +8. **Audit Brick-era feature assumptions in shared UI** — NextUI only ever targeted + the Brick / Smart Pro, and several UI pieces hardcode that hardware. Known cases + on RG XX: + - **Input tester pak** shows the Brick's button layout: no analog sticks + rendered, R3 assumed always present. Needs device-aware layout (RG40XXV has + dual sticks + L3/R3; 34XX/28XX have none). + - **Fn switch option** in the settings app — the sliding Fn button doesn't exist + on any RG XX device; hide/gate it for h700. + - **Display settings** expose brightness/saturation/contrast/exposure enhance + controls that **do nothing on RG XX**. What actually works: LCD backlight + brightness, color temperature, white-point correction (displaycal), RGB + tuning. Gate the dead controls per-platform (and stop syncsettings from + "restoring" values that have no effect). + Worth a systematic sweep: grep settings.cpp / paks for capability flags that + default to "present" and decide each for h700. +9. **BT audio: ship bluealsa or formally drop it.** The gate-off is clean and reversible (drop a `bluealsa` binary in `.system/h700/bin` and the path lights up). Building bluez-alsa in the toolchain is the last piece of tg5040 feature parity. If dropped instead, remove the dormant bt_init/audiomon plumbing. -9. **480p UI audit** (04) — systematic pass over fonts, pills, quick switcher, long - titles at 640×480 and 720×480. NextUI hadn't rendered at 480p in ~2 years; - browsing looks fine but nobody has checked the corners. -10. **Headphone jack detection** (05) — investigate how stock switches speaker/HP on +10. **480p UI polish pass** (04) — verdict from real use: **mostly fine, OK for + alpha**. No systemic layout breakage; known concrete issue: in some paks + (e.g. the Battery pak) the button-hint pills are large enough to overlap each + other. Before release, audit every shipped-by-default UI surface at 640×480 + and 720×480 and fix pill/hint sizing where cramped. +11. **Headphone jack detection** (05) — investigate how stock switches speaker/HP on a live device; may be hardware auto-mute (= nothing to do). Cheap to answer, closes a matrix row either way. -11. **Measure real panel refresh** — `SCREEN_FPS 60.0` is assumed. A vsync-timing +12. **Measure real panel refresh** — `SCREEN_FPS 60.0` is assumed. A vsync-timing test per device takes minutes and protects frame pacing math. -12. Later: RGcubexx bring-up (720×720, wired but untested), HDMI out (`SetHDMI()` is +13. Later: RGcubexx bring-up (720×720, wired but untested), HDMI out (`SetHDMI()` is a no-op; mechanism documented in 04), RG35XX-family variants, Panel-Fix tool. ## P2 — Cleanup / refactors / simplifications -13. **Gate the crash-loop network behavior**: after 5 nextui crashes, launch.sh +14. **Gate the crash-loop network behavior**: after 5 nextui crashes, launch.sh brings up WiFi+SSH for 300 s unconditionally — great for beta, a mild security surprise for release. Tie it to the `debug-keep-network` flag (or a `.userdata` setting) before calling the port done. -14. **Dedupe boot/installer shell code** — `boot/boot.sh` and `install/boot.sh` +15. **Dedupe boot/installer shell code** — `boot/boot.sh` and `install/boot.sh` share mount/splash/log idioms with subtle divergence risk. Extract the common helpers into one sourced file inside the shim payload. -15. **Dedicated h700 toolchain image, revisited** (01) — a thin - `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 (and bluealsa if #8 +16. **Dedicated h700 toolchain image, revisited** (01) — a thin + `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 (and bluealsa if #9 ships) removes the pitfall classes 1–3 in 01 structurally and cuts CI time. Do it when the next external dep lands. -16. **Trim remaining tg5040 residue in the skeleton** — sweep h700 paks/cfgs for +17. **Trim remaining tg5040 residue in the skeleton** — sweep h700 paks/cfgs for trimui-isms and stale comments (the big items — reboot_next, -brick cfgs, libUMP/libasound bundling — are already gone). -17. **settings glib check** — settings.elf links the sysroot's glib and empirically +18. **settings glib check** — settings.elf links the sysroot's glib and empirically loads against the device's 2.72; add a one-line `ldd`-against-stock-rootfs CI check (01's bundling rule) so an SDK bump can't silently break it. -18. **Wire richer battery metrics** (optional) — `time_to_empty_now`/`voltage_now`/ +19. **Wire richer battery metrics** (optional) — `time_to_empty_now`/`voltage_now`/ `charge_counter` exist on the PMIC; batmon's SQLite would get better data for a trivial PLAT extension. diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index f2c5dba2d..9c038b246 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -69,5 +69,8 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively 2. **Untested device matrix** — 34XXSP/28XX/cube code paths have never met hardware. 3. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read Anbernic's binaries/scripts; a firmware update can move them (guardrails in 08). -4. **Alpha-blit unknown** — rendering differs from what a compat experiment expected; - currently looks right, root cause unowned (04). +4. **Brick-era assumptions in shared UI** — Input tester shows Brick's layout, an + Fn-switch setting exists for hardware RG XX doesn't have, and dead enhance + display controls are exposed; needs a capability-flag sweep (09-roadmap #8). + (Formerly listed here: the alpha-blit unknown — resolved; it was the missing + 64-bit libpng, and the branch will rebase onto main incl. alpha blending, 04.) From c2aee779ce72108c5100c0062279060309785025 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 12:14:20 +0200 Subject: [PATCH 22/76] docs(h700): record rebase onto main as done --- docs/h700-port/04-video-display.md | 8 ++++---- docs/h700-port/09-roadmap.md | 12 ++++++------ docs/h700-port/README.md | 3 ++- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index 47d92cf90..ad42d3bf0 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -90,10 +90,10 @@ pre-alpha graphics stack. **The real root cause turned out to be the missing 64- and the silent dlopen failure corrupted image loading (fixed in `510d3bb1`, see pitfall #2 in 01). The alpha-blending code on main was never at fault. -Consequence: the plan is to **rebase/merge the h700 branch back onto current main, -alpha-blending work included** (09-roadmap #7). `workspace/all/` carries zero net -change from the reverted experiment, so the rebase is clean on that front; verify -rendering on device after the merge as the closing check. +Consequence: the h700 branch has been **rebased onto current main, alpha-blending +work included** (done 2026-07-09). `workspace/all/` carried zero net change from the +reverted experiment, so the rebase was clean on that front. Closing check still open: +verify rendering on device with the rebased build (09-roadmap #7). ## Boot splash diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 3d296b38c..7ad79a984 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -36,12 +36,12 @@ Ordered by impact within each section. env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot patch covers GL contexts and that the two layers don't double-rotate; add `default-rg28xx.cfg` cfgs. -7. **Rebase/merge the h700 branch back onto main, including the alpha-blending - work.** The alpha/tinted-bitmap question is solved: the graphical glitches were - caused by the missing 64-bit libpng bundle (SDL2_image's dlopen failing — - fixed in `510d3bb1`), **not** by main's alpha-blending changes. The blend-compat - revert was treating the wrong suspect. With libpng fixed, re-apply/merge on top - of current main and confirm rendering stays clean on device (04). +7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch now sits + on top of current main including the alpha-blending work. (The alpha/tinted- + bitmap question was solved: the glitches were the missing 64-bit libpng bundle, + not main's alpha changes — 04.) Remaining: **confirm rendering stays clean on + device with the rebased build** (blit-heavy screens: browse list with box art, + game switcher, overlays). 8. **Audit Brick-era feature assumptions in shared UI** — NextUI only ever targeted the Brick / Smart Pro, and several UI pieces hardcode that hardware. Known cases on RG XX: diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 9c038b246..4c42657b5 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -73,4 +73,5 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively Fn-switch setting exists for hardware RG XX doesn't have, and dead enhance display controls are exposed; needs a capability-flag sweep (09-roadmap #8). (Formerly listed here: the alpha-blit unknown — resolved; it was the missing - 64-bit libpng, and the branch will rebase onto main incl. alpha blending, 04.) + 64-bit libpng. The branch is now rebased onto main incl. alpha blending; only + the on-device rendering re-check remains, 04.) From 043327e958f2352c2c2404b64de0318206b8a6fd Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 14:39:04 +0200 Subject: [PATCH 23/76] docs: record rg34xxsp h700 validation Document that the RG34XXSP generally behaves like the RG40XXV on the H700 port while lid sleep/wake remains broken. Replace local test fleet IP/login details with public-safe evidence notes so the bring-up docs can be committed without leaking LAN-specific data. --- docs/h700-port/00-device-facts.md | 18 ++++++++++-------- docs/h700-port/03-platform-layer.md | 2 +- docs/h700-port/04-video-display.md | 6 +++--- docs/h700-port/06-power-sleep-battery.md | 13 +++++++------ docs/h700-port/08-testing-status.md | 21 ++++++++++++--------- docs/h700-port/09-roadmap.md | 15 +++++++++------ docs/h700-port/README.md | 18 ++++++++++-------- 7 files changed, 52 insertions(+), 41 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index c990951d0..540aee234 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -8,12 +8,12 @@ Anbernic stock-firmware update — paths have historically been stable, but the ## Devices -| Device | IP | Login | Role | -|---|---|---|---| -| TrimUI Brick (TG5040, A133P) | 192.168.34.81 | root / tina | Reference — NextUI runs perfectly | -| Anbernic RG40XXV (H700) | 192.168.34.55 | root / root | Port target #1 (was running stockmod) — **primary tested device** | -| Anbernic RG34XXSP (H700) | — | — | Port target #2 (clamshell, lid sensor) — untested | -| Anbernic RG28XX (H700) | — | — | Port target #3 (rotated 480×640 panel) — untested | +| Device | Evidence | Role | +|---|---|---| +| TrimUI Brick (TG5040, A133P) | Probed live | Reference — NextUI runs perfectly | +| Anbernic RG40XXV (H700) | Probed live | Port target #1 (was running stockmod) — **primary tested device** | +| Anbernic RG34XXSP (H700) | User-tested | Port target #2 (clamshell, lid sensor) — general parity with RG40XXV, lid wake/sleep broken | +| Anbernic RG28XX (H700) | Not yet tested | Port target #3 (rotated 480×640 panel) | ## RG40XXV (H700) — probed live @@ -100,7 +100,8 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `work_led` — power LED (0=on, 1=off) — used by the port around backlight off/on - `workled_sleep` — LED behavior during sleep - `lowpwr_led`, `led_test` - - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — wired but unverified + - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — wired, but lid + wake/sleep is broken on RG34XXSP (screen stays on); polarity/values still need probing - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` - `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) @@ -199,7 +200,8 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf clone base. ## Facts still unverified (need hardware/testing) -1. `hallkey` presence + semantics on an actual RG34XXSP (lid code is written, untested). +1. `hallkey` semantics on RG34XXSP: polarity/values, whether `has_lid` is set, and why + lid close does not sleep/blank the screen. 2. RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path end-to-end. 3. Headphone jack detection on 2026 firmware (old note: `jack_state` never changes). 4. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 2304f1c81..af1bcea08 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -69,7 +69,7 @@ open/closed per poll and could drop the wake press between polls. | Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | | LEDs | `MAX_LIGHTS 0`, all `PLAT_setLed*` stubs — hardware has no RGB LEDs. `work_led` used only as sleep/backlight indicator | | Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | -| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid-close → sleep, power-key swallowed while closed. **Untested — no RG34XXSP hardware yet** | +| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); intended behavior is lid-close → sleep and power-key swallowed while closed. **Tested on RG34XXSP: not working yet; the screen stays on when the lid closes.** | | Model | `PLAT_getModel` → "Anbernic " + `RGXX_MODEL` (copied into a static buffer, not a raw getenv pointer) | | Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezones via `timedatectl set-timezone`/`list-timezones`, NTP via `set-ntp` (systemd-timesyncd) — much cleaner than tg5040's uci | | Turbo | `PLAT_canTurbo()=false`, no-ops (tg5040's turbo rides trimui_inputd; no H700 equivalent wired) | diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index ad42d3bf0..0ab86f905 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -26,14 +26,14 @@ The stack: | Device | Panel | FIXED_W×H | Status | |---|---|---|---| | RG40XXV | 640×480 4:3 | 640×480 | ✅ shipped, tested | -| RG34XXSP | 720×480 3:2 | 720×480 | wired (`is_rg34xx`), untested | +| RG34XXSP | 720×480 3:2 | 720×480 | ✅ user-tested; works like RG40XXV | | RG28XX | 480×640 portrait | 640×480 logical | rotation plumbed, untested (below) | | RGcubexx | 720×720 | 720×720 | wired (`is_cube`), untested | ### 480p UI — mostly fine, polish pass pending These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't -rendered at 480p for ~2 years. Real-use verdict on RG40XXV: **no systemic breakage — -OK for alpha**. Known concrete issue: in some paks (e.g. the Battery pak) the +rendered at 480p for ~2 years. Real-use verdict on RG40XXV and RG34XXSP: **no systemic +breakage — OK for alpha**. Known concrete issue: in some paks (e.g. the Battery pak) the button-hint pills are large enough to overlap each other. A full audit of every shipped-by-default UI surface at 640×480/720×480 is still owed before release (09-roadmap). Related but distinct: several shared UI pieces hardcode Brick-era diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index b72ac3d5f..df4a74637 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -59,14 +59,15 @@ Two layers, as on tg5040: event0; lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled while charging/HDMI) works unchanged on top. -## Lid (RG34XXSP) — implemented, untested +## Lid (RG34XXSP) — implemented, broken `LID_PATH = axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if the file exists -(absent on RG40XXV, so the code has *never run against real hardware*). -Lid close → sleep; while closed, power-key wake is swallowed (only lid-open wakes). -To verify on first RG34XXSP contact: hallkey polarity/values, whether the kernel -already suspends on hall-close by itself (would double-handle), and power-key-while- -closed behavior. +(absent on RG40XXV). RG34XXSP hardware has now been tested: the rest of the H700 port +works like RG40XXV, but lid sleep/wake does not. Closing the lid leaves the screen on. + +Next debug targets: `hallkey` polarity/values, whether `PLAT_initLid` sees the path and +sets `has_lid`, whether the kernel already emits/handles any lid action before NextUI, +and power-key-while-closed behavior. ## Battery diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 08c45e201..b1844c5de 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -2,12 +2,12 @@ ## Test fleet -| Device | IP | Login | Role | -|---|---|---|---| -| RG40XXV | 192.168.34.55 | root/root | Primary — all testing to date happened here | -| RG34XXSP | — | — | Untested (lid, 720×480) | -| RG28XX | — | — | Untested (rotation) | -| TrimUI Brick TG5040 | 192.168.34.81 | root/tina | Regression reference (behavioral 1:1 comparisons) | +| Device | Evidence | Role | +|---|---|---| +| RG40XXV | Probed live | Primary bring-up device | +| RG34XXSP | User-tested | General parity with RG40XXV; lid wake/sleep broken | +| RG28XX | Not yet tested | Rotation validation target | +| TrimUI Brick TG5040 | Probed live | Regression reference (behavioral 1:1 comparisons) | **Dev-loop tips:** - The stock OS runs sshd with a full Ubuntu userland — iterate by `scp`ing freshly @@ -44,7 +44,8 @@ | BT controller pairing + input | ⬜ | | BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | | Headphone jack detection | ✖ not wired (05) | -| RG34XXSP: lid sleep/wake, 720×480 UI | ⬜ (no hardware tested; code wired) | +| RG34XXSP: general H700 port + 720×480 UI | ✅ user-tested; works like RG40XXV | +| RG34XXSP: lid sleep/wake | ⚠️ tested, broken — lid does not sleep/wake; screen stays on | | RG28XX: rotated UI + games | ⬜ (plumbing in place, unvalidated — 04) | | RGcubexx: 720×720 | ⬜ | @@ -82,5 +83,7 @@ - **Re-run the 00-device-facts probes after each Anbernic stock-firmware update.** Paths have been stable historically, but `dmenu_ln`/muOS hooks are stockmod-version-dependent, and the model-string detector reads a stock binary. -- When adding a device (34XXSP/28XX/cube): walk this matrix top to bottom on that - device; the ⬜ rows above are the backlog for RG40XXV too. +- When adding or promoting a device (34XXSP/28XX/cube): walk this matrix top to + bottom on that device; the ⬜ rows above are the backlog for RG40XXV too. For + RG34XXSP specifically, the next targeted probes are `hallkey` polarity/values and + whether the kernel/stock stack handles any lid action before NextUI sees it. diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 7ad79a984..e2c7ca64e 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -29,9 +29,11 @@ Ordered by impact within each section. ## P1 — Feature completeness -5. **RG34XXSP bring-up** — mostly config already wired (`is_rg34xx` 720×480, lid). - Needs hardware in hand: hallkey semantics, lid sleep/wake, 720×480 UI pass, and - per-Emu `default-rg34xx.cfg` device cfgs (none exist yet — only `default.cfg`). +5. **RG34XXSP lid fix + polish** — general bring-up is now user-tested and works like + RG40XXV, including the 720×480 UI path. Remaining SP-specific work: fix lid + sleep/wake (currently the screen stays on), probe hallkey semantics/polarity, verify + power-key-while-closed behavior, and decide whether per-Emu `default-rg34xx.cfg` + device cfgs are needed (none exist yet — only `default.cfg`). 6. **RG28XX rotation validation** — plumbing exists on both layers (SDL_ROTATION=1 env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot patch covers GL contexts and that the two layers don't double-rotate; add @@ -61,8 +63,8 @@ Ordered by impact within each section. reversible (drop a `bluealsa` binary in `.system/h700/bin` and the path lights up). Building bluez-alsa in the toolchain is the last piece of tg5040 feature parity. If dropped instead, remove the dormant bt_init/audiomon plumbing. -10. **480p UI polish pass** (04) — verdict from real use: **mostly fine, OK for - alpha**. No systemic layout breakage; known concrete issue: in some paks +10. **480p UI polish pass** (04) — verdict from real use on RG40XXV/RG34XXSP: + **mostly fine, OK for alpha**. No systemic layout breakage; known concrete issue: in some paks (e.g. the Battery pak) the button-hint pills are large enough to overlap each other. Before release, audit every shipped-by-default UI surface at 640×480 and 720×480 and fix pill/hint sizing where cramped. @@ -100,7 +102,8 @@ Ordered by impact within each section. ## What "9.5/10" looks like - Sleep/wake solid across a 20-cycle soak + overnight drain ≤ stock + 1% (P0 #1) -- Every 08-matrix row ✅ on RG40XXV, and the functional set ✅ on RG34XXSP + RG28XX +- Every 08-matrix row ✅ on RG40XXV, lid fixed on RG34XXSP, and the functional set ✅ + on RG34XXSP + RG28XX - BT audio shipped or explicitly descoped in README - No debug behaviors in the release path; docs (README.txt) match actual behavior - CI: h700 + tg5040 both build on every PR touching shared code, with the ldd check diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 4c42657b5..dba2b08c2 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,12 +4,13 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Status (2026-07-09): working beta on RG40XXV.** Boot, video (custom Mali SDL2 + -full GLES shader pipeline), audio, input, games at full speed, brightness/colortemp/ -displaycal, WiFi, and rumble are all tested-good on hardware. Known open items: sleep -wake is unreliable (the #1 defect), BT audio is gated off, RG34XXSP/RG28XX/cube are -wired but untested. Full status in [08](08-testing-status.md), path to done in -[09](09-roadmap.md). +**Status (2026-07-09): working beta on RG40XXV and RG34XXSP.** Boot, video (custom +Mali SDL2 + full GLES shader pipeline), audio, input, games at full speed, +brightness/colortemp/displaycal, WiFi, and rumble are all tested-good on RG40XXV +hardware. RG34XXSP has also been user-tested and behaves the same as RG40XXV, except +lid wake/sleep does not work yet (the screen stays on). Known open items: sleep wake is +unreliable (the #1 defect), BT audio is gated off, RG28XX/cube are wired but untested. +Full status in [08](08-testing-status.md), path to done in [09](09-roadmap.md). These docs began as the implementation plan and were restructured after the implementation landed (branch `h700`, 17 commits) into reference documentation: @@ -54,7 +55,7 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | | **BT audio** | build + ship bluealsa | **Deviation:** gated off this beta (`NO_BT_AUDIO`); re-enable path documented (05/07) | | Sleep | `echo mem` + tg5040-style wrapper | ✅ implemented incl. resume restore — ⚠️ wake unreliable, open (06) | -| Lid | hallkey → PLAT lid API | ✅ wired; untested (no 34XXSP yet) | +| Lid | hallkey → PLAT lid API | ⚠️ wired, but RG34XXSP lid wake/sleep does not work yet (screen stays on) | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | | Rumble / LEDs | moto sysfs; MAX_LIGHTS 0 | ✅ as planned; rumble tested-good | | Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | @@ -66,7 +67,8 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively ## Top open risks 1. **Sleep/wake hangs** — headline feature not yet trustworthy ([06](06-power-sleep-battery.md), roadmap P0). -2. **Untested device matrix** — 34XXSP/28XX/cube code paths have never met hardware. +2. **Partially tested device matrix** — RG34XXSP broadly works, but lid handling is + broken; RG28XX/cube code paths have never met hardware. 3. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read Anbernic's binaries/scripts; a firmware update can move them (guardrails in 08). 4. **Brick-era assumptions in shared UI** — Input tester shows Brick's layout, an From 0df73459fc4905cb139cd9bb82f6f63cb6405d86 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 15:15:15 +0200 Subject: [PATCH 24/76] fix(h700): MENU short-tap no longer misreads as long-press The H700 firmware emits a compound sequence for a short MENU tap: 312 (BTN_TL2) down/up tracking the physical button, then a synthetic 354 (KEY_GOTO) pulse starting the instant 312 releases and lasting ~190ms (on a long hold, 354 never fires). Mapping both codes to BTN_MENU stretched every tap past the 250ms MENU_DELAY threshold, so a quick tap at the home screen flipped the shortcuts overlay into brightness-adjust mode, and the Input tester showed MENU held after release. Drop the CODE_MENU_ALT (354) -> BTN_MENU mapping in the platform layer and keymon; tap-vs-hold is derived from the clean 312 timing. The SDL joystick path is unaffected (JOY_MENU_ALT = JOY_NA). Verified via evtest and on-device testing on RG34XXSP; the quirk is firmware-common across the RG XX H700 line. --- docs/h700-port/00-device-facts.md | 10 +++++++++- docs/h700-port/03-platform-layer.md | 13 ++++++++++++- docs/h700-port/08-testing-status.md | 1 + workspace/h700/keymon/keymon.c | 5 ++++- workspace/h700/platform/platform.c | 9 ++++++++- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 540aee234..038463300 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -80,8 +80,16 @@ Anbernic stock-firmware update — paths have historically been stable, but the the stock image** (udev interplay) — the shipped port reads evdev directly for built-in controls and keeps SDL joystick (with `SDL_JOYSTICK_DISABLE_UDEV=1`) for BT controllers. - Verified evdev button codes (event1): A 304, B 305, Y 306, X 307, L1 308, R1 309, - SELECT 310, START 311, MENU 312 (alt 354), L3 313, L2 314, R2 315, R3 316, + SELECT 310, START 311, MENU 312, L3 313, L2 314, R2 315, R3 316, PLUS 115, MINUS 114. +- **MENU emits a compound sequence on short taps** (verified via evtest on RG34XXSP, + likely all RG XX H700 models): 312 down at press, 312 up at release, then a + synthetic 354 (`KEY_GOTO`) down at the same instant as the 312 up, 354 up ~190 ms + later. On a long hold, only 312 fires (down/up, no 354). So 312 tracks the physical + button; 354 is a firmware "tap detected" pulse and **must not be mapped to + BTN_MENU** — doing so extends every tap past the 250 ms long-press threshold + (tap misread as hold → brightness overlay instead of shortcuts). The extra + KEY_ESC (code 1) capability bit has not been observed to fire. - SDL joystick indices for the built-in pad (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 MENU=8, L3=9 L2=10 R2=11 R3=12, MINUS=15 PLUS=16; axes LX=0 LY=1 RX=2 RY=3. - `evtest` is available on the device for mapping discovery. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index af1bcea08..58ec78296 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -43,6 +43,16 @@ Verified mappings (also recorded in 00): SELECT 310, START 311, MENU 312, L3 313, L2 314, R2 315, R3 316; PLUS 115 / MINUS 114 (event2); POWER 116 (event0, `axp2202-pek` — note tg5040 uses 102). **D-pad has no keycodes on current firmware — it arrives as ABS_HAT0X/Y.** +- **MENU compound-tap quirk (fixed)**: the firmware reports the physical MENU button + faithfully on 312 (down while held, up on release), but on a *short tap* it also + emits a synthetic 354 (`KEY_GOTO`) pulse that starts the instant 312 releases and + lasts ~190 ms (verified via evtest on RG34XXSP; on a long hold 354 never fires). + Mapping both 312 and 354 to `BTN_MENU` (as the old rg35xxplus platform did via + `CODE_MENU_ALT`) stretched every tap past the 250 ms `MENU_DELAY` threshold — + a quick MENU tap registered as a hold, so the home screen flipped from the + shortcuts overlay into brightness mode. Fix: `button_from_code()` no longer maps + `CODE_MENU_ALT` to `BTN_MENU` (keymon likewise ignores it); tap-vs-hold is derived + from the clean 312 timing. The SDL path was never affected (`JOY_MENU_ALT = JOY_NA`). - Analog sticks: ABS_Z/RX/RY/RZ, raw 0..4096, scaled ×32767/4096. Sticks exist on RG40XXV and cube only; `is_*` conditionals set JOY_L3/R3 = NA elsewhere. - SDL indices (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 MENU=8, @@ -105,7 +115,8 @@ open/closed per poll and could drop the wake press between polls. tg5040 structure + H700 codes: reads event1 (buttons) + event2 (volume 115/114) + event0 (power 116). MENU+vol = brightness, SELECT+vol = colortemp, plain vol = volume — -tg5040 parity. No mute DIP switch on H700 (gpio243 watcher dropped). +tg5040 parity. No mute DIP switch on H700 (gpio243 watcher dropped). Tracks MENU on +code 312 only — the synthetic 354 post-tap pulse is ignored (see MENU quirk above). ## Cores (`workspace/h700/cores/`) diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index b1844c5de..60ac3a1ba 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -27,6 +27,7 @@ | Browse/launch/quit games across system pak cores; save/load state; in-game menu | ✅ | | Fast resume (BTN_RESUME) + auto-resume after power loss | ✅ | | Brightness 0–10 + colortemp ramps; persist across reboot | ✅ | +| MENU short-tap → shortcuts overlay vs. hold → brightness (compound-tap fix, see 00/03) | ✅ tested on RG34XXSP; firmware quirk is common to the H700 line, expected fine on all RG XX | | Displaycal RGB gains: act, persist, survive sleep + game launch | ✅ | | Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | | Volume 0–20 + mute | ✅ | diff --git a/workspace/h700/keymon/keymon.c b/workspace/h700/keymon/keymon.c index 83a017e34..ff50de9a9 100644 --- a/workspace/h700/keymon/keymon.c +++ b/workspace/h700/keymon/keymon.c @@ -117,7 +117,10 @@ int main(int argc, char *argv[]) { switch (ev.code) { case CODE_MENU: - case CODE_MENU_ALT: + // Only the real MENU code (312) tracks the physical button. + // CODE_MENU_ALT (354/KEY_GOTO) is a synthetic post-tap pulse + // (see platform.c) and must not be treated as MENU held, or a + // stray tap could momentarily divert vol +/- to brightness. menu_pressed = ev.value; break; case CODE_SELECT: diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 91ed6e2a7..adbe4ee4e 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -127,7 +127,14 @@ static int button_from_code(int code, int *id) { else if (code == CODE_START) { *id = BTN_ID_START; return BTN_START; } else if (code == CODE_SELECT) { *id = BTN_ID_SELECT; return BTN_SELECT; } else if (code == CODE_MENU) { *id = BTN_ID_MENU; return BTN_MENU; } - else if (code == CODE_MENU_ALT) { *id = BTN_ID_MENU; return BTN_MENU; } + // NOTE: CODE_MENU_ALT (354/KEY_GOTO) is deliberately NOT mapped to BTN_MENU. + // The H700 firmware reports the physical MENU button faithfully on CODE_MENU + // (312/BTN_TL2) — down while held, up on release. On a *short* tap it also + // emits a synthetic KEY_GOTO pulse that starts the instant CODE_MENU releases + // and lasts ~190ms. Mapping both to BTN_MENU stretches every tap past the + // 250ms long-press threshold, so a quick MENU tap wrongly registers as a hold + // (brightness overlay instead of the shortcuts overlay). Ignore the synthetic + // pulse and let NextUI derive tap-vs-hold from the clean CODE_MENU timing. else if (code == CODE_L1) { *id = BTN_ID_L1; return BTN_L1; } else if (code == CODE_L2) { *id = BTN_ID_L2; return BTN_L2; } else if (code == CODE_L3) { *id = BTN_ID_L3; return BTN_L3; } From da658c384d50af7e6d95ccaada4d14656d93401d Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 15:26:46 +0200 Subject: [PATCH 25/76] docs: confirm h700 volume controls Record that volume control is working correctly on both RG40XXV and RG34XXSP, including the UI and audible levels from mute through 100%. Retire the roadmap note that treated the digital-volume inversion as an unresolved documentation task. --- docs/h700-port/00-device-facts.md | 2 +- docs/h700-port/03-platform-layer.md | 2 ++ docs/h700-port/05-audio.md | 4 +++- docs/h700-port/08-testing-status.md | 2 +- docs/h700-port/09-roadmap.md | 7 +++---- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 038463300..51e8c9230 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -54,7 +54,7 @@ Anbernic stock-firmware update — paths have historically been stable, but the ### Audio - ALSA cards: `0 audiocodec` (speaker/lineout/headphone), `1 ahubdam`, `2 ahubhdmi` (HDMI audio) - amixer simple controls on card 0: `'digital volume'`, `'lineout volume'`, `'LINEOUT'`, `'SPK'`, `'OutputL/R Mixer DACL/R'`, `'tx hub mode'` -- `digital volume` is an **attenuator with a reversed scale** (range 0–63; larger raw value = quieter). The shipped msettings writes `100 - val` percent — confirmed correct by listening on device. +- `digital volume` is an **attenuator with a reversed scale** (range 0–63; larger raw value = quieter). The shipped msettings writes `100 - val` percent — confirmed correct by listening on device. Volume control has no known issues on RG40XXV or RG34XXSP; the UI and audible levels are correct from mute through 100%. - Codec supports 48000/44100 natively. - **Stock libasound quirk (critical):** the device's `/usr/lib/libasound.so` exports both versioned symbols and legacy unversioned `ALSA_0.9` value-semantic `snd_pcm_hw_params_set_*` diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 58ec78296..e9a7169f1 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -95,6 +95,8 @@ open/closed per poll and could drop the wake press between polls. - **Volume**: tinyalsa on card 0. `digital volume` is a 0–63 **attenuator** — the code writes `mixer_ctl_set_percent(digital, 0, 100 - val)` (reversed mapping, confirmed correct by ear; the control's TLV metadata is garbage). `lineout volume` secondary. + Tested on RG40XXV and RG34XXSP: UI and audible levels are correct from mute through + 100%, with no current volume-control issues. - **Mute**: `SPK` switch off + store/restore volume (no `/sys/class/speaker/mute` on H700). h700 is included in `hasMuteToggle()` in settings.cpp. - **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — works diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md index ad53d97c7..9762114b9 100644 --- a/docs/h700-port/05-audio.md +++ b/docs/h700-port/05-audio.md @@ -4,7 +4,7 @@ `SND_init` (shared `api.c`) → SDL audio → **ALSA backend → card 0 `audiocodec`**. `SDL_AUDIODRIVER=alsa` exported by launch.sh. GBA/SNES/PS1 run full speed with clean -audio, no underruns, on RG40XXV. +audio, no underruns, on RG40XXV; RG34XXSP behaves the same in user testing. ``` card 0: audiocodec ← speaker / lineout / headphone (the one we use) @@ -39,6 +39,8 @@ for libraries that exist on the target. garbage, so don't trust `amixer` ranges here. `lineout volume` secondary. - Mute: `SPK` switch off + saved/restored volume (H700 has no `/sys/class/speaker/mute`). Mute toggle enabled for h700 in settings. Tested ✅. +- Validation: no known issues on RG40XXV or RG34XXSP. The volume UI behaves correctly, + and audible levels are as expected across the full range from mute through 100%. - Suspend: the `suspend` script saves the full mixer state (`alsactl store`) in `before()` and **restores it in `after()`** on resume (an early version had the restore commented out; it's live now). diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 60ac3a1ba..34b81f877 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -30,7 +30,7 @@ | MENU short-tap → shortcuts overlay vs. hold → brightness (compound-tap fix, see 00/03) | ✅ tested on RG34XXSP; firmware quirk is common to the H700 line, expected fine on all RG XX | | Displaycal RGB gains: act, persist, survive sleep + game launch | ✅ | | Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | -| Volume 0–20 + mute | ✅ | +| Volume UI + levels, mute through 100% | ✅ tested on RG40XXV and RG34XXSP; no known issues | | Rumble (moto on/off) | ✅ | | WiFi scan/connect/forget | ✅ | | WiFi survives sleep; NTP sync | ✅ | diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index e2c7ca64e..3e2026f52 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -22,10 +22,9 @@ Ordered by impact within each section. recents/box art, RetroAchievements, Pak Store, OTA update. Each is implemented; none has been exercised. OTA especially — a broken update path is the worst post-release bug class. -4. **Document-or-fix the `digital volume` inversion** (`msettings.c` `100 - val`): - it's confirmed correct by ear, but the only in-tree explanation is a terse - comment. One paragraph in the code explaining the attenuator semantics + garbage - TLV prevents a future "cleanup" from re-breaking audio. +4. **~~Document the `digital volume` inversion~~ Done (2026-07-09)** — `100 - val` + is intentional because the control is an attenuator. Volume UI and levels are + tested-good on RG40XXV and RG34XXSP from mute through 100% (05). ## P1 — Feature completeness From 49fd0c1c14d0d5a911eba7f7a1696b6d75f369da Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 16:47:56 +0200 Subject: [PATCH 26/76] =?UTF-8?q?fix(h700):=20sleep/wake=20=E2=80=94=20sus?= =?UTF-8?q?pend=20poweroff,=20wake=20bounce,=20lid=20sleep,=20resume=20fre?= =?UTF-8?q?eze?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four stacked bugs, all verified on RG34XXSP hardware: - bin/suspend died on 'set -o pipefail' (unsupported by stock /bin/sh), exiting 2 before writing /sys/power/state; PWR_deepSleep treated that as suspend failure and powered off. Use 'set -u' only. - The persistent wake_fd buffered the power-key release that triggered sleep, so every 2nd+ sleep of a process woke instantly. Drain the fd each PLAT_pollInput. - Lid close injected a BTN_SLEEP release, which can never satisfy the manual-sleep condition (requires a power-key press). Add PWR_requestSleep() and call it on lid close; stop firing on lid open. - Wake froze UI/input 5-10s: an ALSA PCM held open across suspend takes SDL ~9s to close. Close audio in PWR_enterSleep (reopened on wake; reinit now 150-200ms), and split the suspend script's resume work into after_sync (alsactl/syncsettings) and backgrounded after_async (wifi/bt). Update h700-port docs: postmortem in 06, test matrix, roadmap P0 #1 done. --- docs/h700-port/06-power-sleep-battery.md | 89 ++++++++++++++---------- docs/h700-port/08-testing-status.md | 19 ++--- docs/h700-port/09-roadmap.md | 25 ++++--- skeleton/SYSTEM/h700/bin/suspend | 20 ++++-- workspace/all/common/api.c | 10 ++- workspace/all/common/api.h | 1 + workspace/h700/platform/platform.c | 26 ++++++- 7 files changed, 128 insertions(+), 62 deletions(-) diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index df4a74637..890bdf669 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -1,29 +1,44 @@ # 06 — Power, Sleep, Battery, Lid -## ⚠️ Known issue: wake is unreliable - -Deep sleep is implemented end-to-end, but on RG40XXV **the device sometimes hangs -entering or leaving suspend** (fails to wake, or freezes on the way down). This is the -port's #1 open defect. What is *known good*: when a sleep/wake cycle succeeds, state -restores correctly (display settings incl. displaycal survive sleep — tested ✅) and -WiFi reconnects (tested ✅). Debugging leads, roughly in order of suspicion: - -- The kernel's own suspend reliability with our device population of drivers still up - (stock stops different services than we do) — compare the exact pre-suspend state - vs stock's sleep path. -- The `suspend` script's false-negative retry loop (5 tries, "asleep >5 s ⇒ treat - write failure as success" heuristic) — a retry storm around a half-suspended SoC - could itself wedge the device. -- `hallkey`/PEK event handling racing the suspend write (persistent `wake_fd` drains - event0; verify no wake press is consumed *during* the transition). -- Serial/UART console (if accessible) or persisting a pre/post-suspend breadcrumb log - to /tmp would localize hang-on-entry vs hang-on-exit — currently unknown which side - fails. - -Not suspects anymore (all verified fixed/in place): logind power-key handling -(drop-in sets `HandlePowerKey=ignore`), backgrounded resume restore (now synchronous), -per-poll event0 fd churn (persistent fd), post-resume display re-apply -(syncsettings.elf runs in `after()`). +## ✅ Sleep/wake fixed (2026-07-09, verified on RG34XXSP) + +The former "#1 open defect" turned out to be four separate bugs, all found and fixed: + +1. **Deep sleep powered off instead of suspending.** The `suspend` script began with + `set -uo pipefail`; the device's `/bin/sh` rejects `-o pipefail` and the script + exited 2 *before ever writing to `/sys/power/state`*. `PWR_deepSleep` treats a + non-zero script exit as suspend failure and escalates to `PWR_powerOff`. Fix: + `set -u` only (comment in the script warns about this). +2. **Second and later sleeps bounced back awake (~1 s black screen).** The persistent + `wake_fd` (a second open of event0 used only by `PLAT_shouldWake`) was never + drained while awake, so the power-key release that *triggered* a sleep was still + buffered and woke the device instantly. Only the first sleep of a process worked + (fd opened lazily); launching any pak "fixed" it once by restarting nextui.elf. + Fix: `drain_wake_fd()` runs every `PLAT_pollInput`. +3. **Lid close never slept.** Lid close injected `just_released |= BTN_SLEEP`, but the + manual-sleep condition in `PWR_update` also requires `power_pressed_at` (a real + power-key press), so it was a guaranteed no-op. Fix: lid close now calls the new + `PWR_requestSleep()` (api.c), which the existing "hardware requested sleep" branch + honors; the old injection also mis-fired on lid *open* and is gone. +4. **Keys/UI frozen ~5–10 s after wake.** Two stacked causes: (a) the script's + `after()` (alsactl restore, syncsettings, wifi/bt restart) ran synchronously while + the caller blocks in `system()`; (b) far worse, an ALSA PCM left open across + suspend takes SDL ~9–10 s to close on wake (`SND_quit` inside `SND_resetAudio`). + Fix: `PWR_enterSleep` now calls `SND_quit()` (close the healthy PCM *before* + suspend; wake just reopens), and the script splits resume work into `after_sync` + (alsactl/syncsettings, must finish before the script exits) and `after_async &` + (wifi/bt/hooks). Measured wake-to-responsive: ~0.5–1.2 s (audio reinit 150–200 ms, + formerly 9–10 s). + +Verified by physical testing on RG34XXSP (stockmod OS): repeated power-tap sleep/wake +cycles, screen-off → suspend two-stage escalation with 10 s/10 s timers, suspend → +power-key wake, lid-close → sleep, and state restore (display settings, WiFi +reconnect). Long-press power-off unaffected. + +Stockmod/logind interference was ruled out: `HandlePowerKey=ignore` is in place (our +launch.sh drop-in), stockmod's `pwr_new.sh` is not running under NextUI, and no evdev +device exposes a lid switch (`sw=0` everywhere) — the hall sensor exists *only* as the +AXP2202 `hallkey` sysfs node that our code polls, so nothing else can react to it. ## Verified hardware facts (00 has the full list) @@ -45,29 +60,33 @@ Two layers, as on tg5040: - `echo mem > /sys/power/state` in a retry loop (5 tries, with the tg5040-style false-negative workaround: if we were asleep >5 s, a failed-looking write is counted as success) - - `after()` (runs **synchronously**): `alsactl restore` mixer, + - `after_sync()` (before the script exits): `alsactl restore` mixer, **`syncsettings.elf`** (re-applies volume, brightness, colortemp, contrast, saturation, exposure **and the displaycal gamma LUT** — the panel does lose - state across suspend), restart wifi/bt services, then `post-resume.d` hooks - (hooks themselves backgrounded, by design) + state across suspend). Must stay synchronous: the caller reinitializes ALSA + as soon as `system()` returns, and a concurrent alsactl restore stalls it. + - `after_async()` (backgrounded, `&`): restart wifi/bt services, then + `post-resume.d` hooks — takes ~5 s and must not delay the script's exit or + the caller's input handling freezes for that long. - systemd is bypassed on purpose (direct sysfs write); launch.sh installs a logind drop-in (`HandlePowerKey=ignore`, `HandlePowerKeyLongPress=ignore`) and restarts logind so systemd never handles the power key (02) ### Wake & autosleep - `PLAT_shouldWake`: power-key (code 116) read from a persistent non-blocking fd on - event0; lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled + event0; the same fd is drained every `PLAT_pollInput` while awake (see fix #2 + above); lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled while charging/HDMI) works unchanged on top. -## Lid (RG34XXSP) — implemented, broken +## Lid (RG34XXSP) — working `LID_PATH = axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if the file exists -(absent on RG40XXV). RG34XXSP hardware has now been tested: the rest of the H700 port -works like RG40XXV, but lid sleep/wake does not. Closing the lid leaves the screen on. - -Next debug targets: `hallkey` polarity/values, whether `PLAT_initLid` sees the path and -sets `has_lid`, whether the kernel already emits/handles any lid action before NextUI, -and power-key-while-closed behavior. +(absent on RG40XXV). Polarity verified on hardware: 1 = open. Lid close → +`PWR_requestSleep()` → normal two-stage sleep (screen off, then suspend after the +suspend timeout). Lid open wakes from *screen-off* sleep (hallkey polled by +`PLAT_shouldWake`); waking from *deep* suspend requires the power key because the hall +sensor is not a kernel wake source — same as stock firmware, considered desirable. +Power key is ignored as a wake source while the lid is closed. ## Battery diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 34b81f877..3924a8d7a 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -5,7 +5,7 @@ | Device | Evidence | Role | |---|---|---| | RG40XXV | Probed live | Primary bring-up device | -| RG34XXSP | User-tested | General parity with RG40XXV; lid wake/sleep broken | +| RG34XXSP | User-tested | General parity with RG40XXV; sleep/wake + lid validated here | | RG28XX | Not yet tested | Rotation validation target | | TrimUI Brick TG5040 | Probed live | Regression reference (behavioral 1:1 comparisons) | @@ -34,11 +34,11 @@ | Rumble (moto on/off) | ✅ | | WiFi scan/connect/forget | ✅ | | WiFi survives sleep; NTP sync | ✅ | -| **Deep sleep (auto/manual/in-game) + wake** | ⚠️ **wake unreliable — sometimes hangs entering/leaving suspend (see 06)** | +| Deep sleep (auto/manual) + wake | ✅ fixed & user-tested on RG34XXSP 2026-07-09 (4 stacked bugs — see 06); in-game (minarch) path shares the code but untested; RG40XXV re-test pending | | Screenshots, Recently Played, game switcher, box art | ⬜ | | Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | | Battery % accuracy vs stock; charging indicator; charge-while-sleeping | ⬜ | -| Overnight drain (8 h mem-sleep vs stock baseline) | ⬜ (blocked on wake reliability) | +| Overnight drain (8 h mem-sleep vs stock baseline) | ⬜ (unblocked — sleep/wake now reliable) | | RetroAchievements login + unlock | ⬜ | | Pak Store install | ⬜ | | OTA update flow | ⬜ | @@ -46,7 +46,7 @@ | BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | | Headphone jack detection | ✖ not wired (05) | | RG34XXSP: general H700 port + 720×480 UI | ✅ user-tested; works like RG40XXV | -| RG34XXSP: lid sleep/wake | ⚠️ tested, broken — lid does not sleep/wake; screen stays on | +| RG34XXSP: lid sleep/wake | ✅ lid close sleeps; lid open wakes from screen-off; power key wakes from deep suspend (stock-like, desired — see 06) | | RG28XX: rotated UI + games | ⬜ (plumbing in place, unvalidated — 04) | | RGcubexx: 720×720 | ⬜ | @@ -79,12 +79,13 @@ 8. `workspace/all/syncsettings/syncsettings.c` — also restore colortemp/contrast/saturation/exposure/displaycal on resume 9. `workspace/makefile` — rfkill for h700; ledcontrol/bootlogo gated to tg50x0 10. Root `makefile` + `makefile.toolchain` — h700 platform + tg5040-image reuse - (`workspace/all/common/api.c` was touched by the alpha-blit experiment and fully - reverted — net zero.) + 11. `workspace/all/common/api.c`/`api.h` — `PWR_requestSleep()` (lid sleep) and + `SND_quit()` in `PWR_enterSleep` (close ALSA before suspend; see 06). Both are + platform-agnostic changes — watch them when rebasing onto main. - **Re-run the 00-device-facts probes after each Anbernic stock-firmware update.** Paths have been stable historically, but `dmenu_ln`/muOS hooks are stockmod-version-dependent, and the model-string detector reads a stock binary. - When adding or promoting a device (34XXSP/28XX/cube): walk this matrix top to - bottom on that device; the ⬜ rows above are the backlog for RG40XXV too. For - RG34XXSP specifically, the next targeted probes are `hallkey` polarity/values and - whether the kernel/stock stack handles any lid action before NextUI sees it. + bottom on that device; the ⬜ rows above are the backlog for RG40XXV too. + (RG34XXSP hallkey semantics are settled: 1 = lid open, polled from sysfs, no evdev + switch exists, and nothing else in the stock/stockmod stack reacts to it — 06.) diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 3e2026f52..66f55558d 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -5,13 +5,15 @@ Ordered by impact within each section. ## P0 — Correctness / robustness -1. **Fix unreliable sleep/wake** (the #1 defect — see 06 for the state of play and - suspects). All previously-identified software suspects are already fixed, so this - needs real debugging: instrument `skeleton/SYSTEM/h700/bin/suspend` with - breadcrumbs to distinguish hang-on-entry from hang-on-exit, compare our - pre-suspend service/driver state against stock's sleep path, and reconsider the - 5-try retry loop (a retry against a half-suspended SoC may itself wedge). Blocks - the overnight-drain test and any credible "sleep is a headline feature" claim. +1. **~~Fix unreliable sleep/wake~~ Done (2026-07-09)** — was four stacked bugs, all + fixed and user-verified on RG34XXSP (see 06 for the full postmortem): the suspend + script died on `set -o pipefail` (unsupported shell → non-zero exit → poweroff + instead of suspend), the persistent `wake_fd` buffered the sleep-triggering + power-key release (instant bounce-back on every 2nd+ sleep), lid close could never + satisfy the sleep condition (now `PWR_requestSleep()`), and wake froze the UI + ~5–10 s (ALSA PCM held open across suspend takes SDL ~9 s to close — now closed in + `PWR_enterSleep`; plus wifi/bt restart moved to `after_async &`). Unblocks the + overnight-drain test. 2. **Decide muOS/stockmod coexistence policy** (`boot/boot.sh` — currently shows "STOCK TARGET REQUIRED" splash but *continues booting*; launch.sh drops stockmod-warning.txt). Either hard-fail with the splash held on screen, or @@ -29,10 +31,11 @@ Ordered by impact within each section. ## P1 — Feature completeness 5. **RG34XXSP lid fix + polish** — general bring-up is now user-tested and works like - RG40XXV, including the 720×480 UI path. Remaining SP-specific work: fix lid - sleep/wake (currently the screen stays on), probe hallkey semantics/polarity, verify - power-key-while-closed behavior, and decide whether per-Emu `default-rg34xx.cfg` - device cfgs are needed (none exist yet — only `default.cfg`). + RG40XXV, including the 720×480 UI path. ~~Fix lid sleep/wake~~ Done (2026-07-09): + lid close sleeps, lid open wakes from screen-off (power key needed after deep + suspend, matching stock — hallkey polarity verified 1=open; see 06). Remaining: + decide whether per-Emu `default-rg34xx.cfg` device cfgs are needed (none exist + yet — only `default.cfg`). 6. **RG28XX rotation validation** — plumbing exists on both layers (SDL_ROTATION=1 env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot patch covers GL contexts and that the two layers don't double-rotate; add diff --git a/skeleton/SYSTEM/h700/bin/suspend b/skeleton/SYSTEM/h700/bin/suspend index 0b4103a32..747821176 100755 --- a/skeleton/SYSTEM/h700/bin/suspend +++ b/skeleton/SYSTEM/h700/bin/suspend @@ -1,5 +1,8 @@ #!/bin/sh -set -uo pipefail +# NOTE: stock H700 /bin/sh does not support `set -o pipefail`; +# using it makes the script exit 2 immediately, which NextUI treats +# as a failed suspend and escalates to poweroff. +set -u set +e exec 0<&- @@ -38,7 +41,11 @@ before() { fi } -after() { +# Resume work that must finish BEFORE this script exits: the caller +# (nextui/minarch) reinitializes the ALSA device as soon as system() +# returns, and a concurrent alsactl restore makes that reinit block +# for ~10s (buttons appear dead after wake). +after_sync() { >&2 echo "Resumed from suspend." echo 0 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true @@ -51,7 +58,11 @@ after() { >&2 echo "Restoring display settings..." "$SYSTEM_PATH/bin/syncsettings.elf" || true fi +} +# Slow resume work (radios take ~5s) that must NOT delay the script's +# exit, or it freezes the caller's input handling for that long. +after_async() { if [ -n "$wifid_running" ]; then >&2 echo "Starting wpa_supplicant..." "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start || true @@ -63,7 +74,7 @@ after() { fi # Run post-resume hooks after core services and display state are restored. - ( "$SYSTEM_PATH/bin/run_hooks.sh" post-resume.d ) >/dev/null 2>&1 & + ( "$SYSTEM_PATH/bin/run_hooks.sh" post-resume.d ) >/dev/null 2>&1 } before @@ -103,6 +114,7 @@ for i in $(seq 1 $sleep_max_tries); do sleep 3 done -after +after_sync +after_async & exit $sleep_retval diff --git a/workspace/all/common/api.c b/workspace/all/common/api.c index 19f3f5439..96737baf3 100644 --- a/workspace/all/common/api.c +++ b/workspace/all/common/api.c @@ -4179,6 +4179,11 @@ void PWR_update(int *_dirty, int *_show_setting, PWR_callback_t before_sleep, PW *_show_setting = show_setting; } +void PWR_requestSleep(void) +{ + pwr.requested_sleep = 1; +} + // TODO: this isn't whether it can sleep but more if it should sleep in response to the sleep button void PWR_disableSleep(void) { @@ -4245,7 +4250,10 @@ void PWR_powerOff(int reboot) static void PWR_enterSleep(void) { - SND_pauseAudio(true); + // Fully close the audio device before sleeping: a PCM that stays open + // across suspend-to-RAM ends up in a state SDL takes ~10s to close on + // wake, freezing the UI. PWR_exitSleep reopens it via SND_resetAudio. + SND_quit(); LEDS_pushProfileOverride(LIGHT_PROFILE_SLEEP); if (GetHDMI()) { diff --git a/workspace/all/common/api.h b/workspace/all/common/api.h index 828af8271..9669a1d1b 100644 --- a/workspace/all/common/api.h +++ b/workspace/all/common/api.h @@ -573,6 +573,7 @@ int PWR_isPoweringOff(void); void PWR_sleep(void); int PWR_deepSleep(void); +void PWR_requestSleep(void); void PWR_disableSleep(void); void PWR_enableSleep(void); diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index adbe4ee4e..f0dc688fe 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -366,6 +366,24 @@ static void poll_evdev_input(uint32_t tick) { } } +// wake_fd is a second, independent open of event0 used by PLAT_shouldWake. +// It must be kept drained while awake, otherwise the power-key release that +// triggers the next sleep is still buffered when PWR_waitForWake starts +// polling and the device wakes back up instantly. +static void drain_wake_fd(void) { + if (wake_fd < 0) + wake_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK | O_CLOEXEC); + if (wake_fd < 0) return; + + struct input_event event; + errno = 0; + while (read(wake_fd, &event, sizeof(event)) == sizeof(event)); + if (errno && errno != EAGAIN && errno != EWOULDBLOCK) { + close(wake_fd); + wake_fd = -1; + } +} + void PLAT_pollInput(void) { pad.just_pressed = BTN_NONE; pad.just_released = BTN_NONE; @@ -384,8 +402,11 @@ void PLAT_pollInput(void) { poll_sdl_input(tick); poll_evdev_input(tick); - if (lid.has_lid && PLAT_lidChanged(NULL)) - pad.just_released |= BTN_SLEEP; + drain_wake_fd(); + + int lid_open; + if (lid.has_lid && PLAT_lidChanged(&lid_open) && !lid_open) + PWR_requestSleep(); } void PLAT_updateInput(const SDL_Event *event) { @@ -595,6 +616,7 @@ int PLAT_shouldWake(void) { should_wake = 0; continue; } + LOG_debug("PLAT_shouldWake: power key release, waking\n"); should_wake = 1; } } From 90b0d1b36c5048674a21b5fa1dab87ed7bb0d36e Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 18:22:22 +0200 Subject: [PATCH 27/76] =?UTF-8?q?fix(h700):=20display=20settings=20?= =?UTF-8?q?=E2=80=94=20persistence,=20defaults,=20dead=20sliders?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Persist white point correction / RGB gains across reboots: displaycal defaults are now seeded only by the shm host and only when the settings file is missing or predates v11, instead of clobbering user values on every InitSettings() - Hide Contrast/Saturation/Exposure on H700 (disp driver lacks the enhance_* sysfs nodes), including their mute-toggle variants - Add per-model displaycal preset plumbing for the full H700 family (RG28XX..RGCubeXX), all neutral/disabled until each panel is measured; detection via RGXX_MODEL with DEVICE fallback - Map RG35xx* to DEVICE=rg35xx in launch.sh instead of lumping the RG35xx family into rg40xx - Raise default brightness to 4 on H700 devices (Brick keeps 2) Verified on RG40XXV: gains survive reboot, fresh defaults are brightness 4 with neutral displaycal; tg5040 builds unaffected. --- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 2 + workspace/all/common/displaycal.h | 40 ++++++++++++++--- workspace/all/settings/settings.cpp | 45 +++++++++++++++++-- workspace/h700/libmsettings/msettings.c | 41 +++++++++++++++-- workspace/h700/libmsettings/msettings.h | 2 +- 5 files changed, 117 insertions(+), 13 deletions(-) diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 20e04175c..8eb922ce2 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -131,6 +131,8 @@ export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^ case "$RGXX_MODEL" in RG28xx) export DEVICE="rg28xx" ;; RG34xx*|RG34XX*) export DEVICE="rg34xx" ;; + RG35xx*|RG35XX*) export DEVICE="rg35xx" ;; + RG40xx*|RG40XX*) export DEVICE="rg40xx" ;; RGcubexx) export DEVICE="cube" ;; *) export DEVICE="rg40xx" ;; esac diff --git a/workspace/all/common/displaycal.h b/workspace/all/common/displaycal.h index ec0c44ae0..d76be756f 100644 --- a/workspace/all/common/displaycal.h +++ b/workspace/all/common/displaycal.h @@ -59,19 +59,49 @@ static const struct DisplayCalDefaults DisplayCalDefaults_BrickPro = { DISPLAYCAL_BRICKPRO_DEFAULT_BLUE_GAIN }; +// Anbernic H700 family. Not measured yet: disabled with neutral gains until +// each panel is calibrated, at which point only the values below change. +#define DISPLAYCAL_H700_UNCALIBRATED { 0, 100, 100, 100 } +static const struct DisplayCalDefaults DisplayCalDefaults_RG28XX = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG34XX = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG34XXSP = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG35XX = DISPLAYCAL_H700_UNCALIBRATED; // Plus/H/2024 +static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXSP = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXPRO = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG40XXH = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG40XXV = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RGCubeXX = DISPLAYCAL_H700_UNCALIBRATED; + enum DisplayCalPreset { DISPLAYCAL_PRESET_DEFAULT = 0, DISPLAYCAL_PRESET_BRICK, DISPLAYCAL_PRESET_SMARTPRO, DISPLAYCAL_PRESET_BRICKPRO, + DISPLAYCAL_PRESET_RG28XX, + DISPLAYCAL_PRESET_RG34XX, + DISPLAYCAL_PRESET_RG34XXSP, + DISPLAYCAL_PRESET_RG35XX, + DISPLAYCAL_PRESET_RG35XXSP, + DISPLAYCAL_PRESET_RG35XXPRO, + DISPLAYCAL_PRESET_RG40XXH, + DISPLAYCAL_PRESET_RG40XXV, + DISPLAYCAL_PRESET_RGCUBEXX }; static inline DisplayCalDefaults DisplayCal_getDefaultSettings(enum DisplayCalPreset preset) { - if(preset == DISPLAYCAL_PRESET_SMARTPRO) { - return DisplayCalDefaults_SmartPro; - } - if(preset == DISPLAYCAL_PRESET_BRICK) { - return DisplayCalDefaults_Brick; + switch(preset) { + case DISPLAYCAL_PRESET_SMARTPRO: return DisplayCalDefaults_SmartPro; + case DISPLAYCAL_PRESET_BRICK: return DisplayCalDefaults_Brick; + case DISPLAYCAL_PRESET_RG28XX: return DisplayCalDefaults_RG28XX; + case DISPLAYCAL_PRESET_RG34XX: return DisplayCalDefaults_RG34XX; + case DISPLAYCAL_PRESET_RG34XXSP: return DisplayCalDefaults_RG34XXSP; + case DISPLAYCAL_PRESET_RG35XX: return DisplayCalDefaults_RG35XX; + case DISPLAYCAL_PRESET_RG35XXSP: return DisplayCalDefaults_RG35XXSP; + case DISPLAYCAL_PRESET_RG35XXPRO: return DisplayCalDefaults_RG35XXPRO; + case DISPLAYCAL_PRESET_RG40XXH: return DisplayCalDefaults_RG40XXH; + case DISPLAYCAL_PRESET_RG40XXV: return DisplayCalDefaults_RG40XXV; + case DISPLAYCAL_PRESET_RGCUBEXX: return DisplayCalDefaults_RGCubeXX; + default: break; } if(preset == DISPLAYCAL_PRESET_BRICKPRO) { return DisplayCalDefaults_BrickPro; diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index a41e07469..eb8563d7f 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -253,7 +253,13 @@ namespace { SmartProS, Flip, RG40XX, + RG40XXV, + RG40XXH, RG34XX, + RG34XXSP, + RG35XX, // Plus/H/2024 + RG35XXSP, + RG35XXPRO, RG28XX, RGCubeXX }; @@ -293,6 +299,10 @@ namespace { m_vendor = Anbernic; m_model = RG40XX; m_platform = h700; + } else if(exactMatch("rg35xx", device)) { + m_vendor = Anbernic; + m_model = RG35XX; + m_platform = h700; } else if(exactMatch("rg34xx", device)) { m_vendor = Anbernic; m_model = RG34XX; @@ -307,6 +317,21 @@ namespace { m_platform = h700; } } + // Anbernic stock firmware reports the exact model (e.g. RG40xxV, + // RG34xxSP); use it to refine the DEVICE-based family match. + char* rgModel = getenv("RGXX_MODEL"); + if (m_platform == h700 && rgModel) { + std::string model(rgModel); + if (model == "RG40xxV") m_model = RG40XXV; + else if (model == "RG40xxH") m_model = RG40XXH; + else if (model == "RG34xxSP") m_model = RG34XXSP; + else if (model.rfind("RG35xx", 0) == 0) { + std::string suffix = model.substr(6); + if (suffix.rfind("SP", 0) == 0) m_model = RG35XXSP; + else if (suffix.rfind("Pro", 0) == 0 || suffix.rfind("PRO", 0) == 0) m_model = RG35XXPRO; + else m_model = RG35XX; + } + } } Vendor getVendor() const { return m_vendor; } @@ -317,12 +342,14 @@ namespace { return m_platform == tg5040 || m_platform == h700; } + // the H700 disp driver doesn't support the enhance_* sysfs nodes, + // so contrast/saturation/exposure are hidden there bool hasContrastSaturation() const { - return m_platform == my355 || m_platform == tg5040 || m_platform == h700; + return m_platform == my355 || m_platform == tg5040; } bool hasExposure() const { - return m_platform == tg5040 || m_platform == h700; + return m_platform == tg5040; } bool hasDisplayCal() const { @@ -558,9 +585,19 @@ int main(int argc, char *argv[]) if(deviceInfo.hasDisplayCal()) { const DisplayCalDefaults defaultDisplayCal = DisplayCal_getDefaultSettings( - deviceInfo.getModel() == DeviceInfo::Brick ? DISPLAYCAL_PRESET_BRICK : + deviceInfo.getModel() == DeviceInfo::Brick ? DISPLAYCAL_PRESET_BRICK : deviceInfo.getModel() == DeviceInfo::BrickPro ? DISPLAYCAL_PRESET_BRICKPRO : - deviceInfo.getModel() == DeviceInfo::SmartPro ? DISPLAYCAL_PRESET_SMARTPRO : DISPLAYCAL_PRESET_DEFAULT); + deviceInfo.getModel() == DeviceInfo::SmartPro ? DISPLAYCAL_PRESET_SMARTPRO : + deviceInfo.getModel() == DeviceInfo::RG28XX ? DISPLAYCAL_PRESET_RG28XX : + deviceInfo.getModel() == DeviceInfo::RG34XX ? DISPLAYCAL_PRESET_RG34XX : + deviceInfo.getModel() == DeviceInfo::RG34XXSP ? DISPLAYCAL_PRESET_RG34XXSP : + deviceInfo.getModel() == DeviceInfo::RG35XX ? DISPLAYCAL_PRESET_RG35XX : + deviceInfo.getModel() == DeviceInfo::RG35XXSP ? DISPLAYCAL_PRESET_RG35XXSP : + deviceInfo.getModel() == DeviceInfo::RG35XXPRO ? DISPLAYCAL_PRESET_RG35XXPRO : + deviceInfo.getModel() == DeviceInfo::RG40XXH ? DISPLAYCAL_PRESET_RG40XXH : + deviceInfo.getModel() == DeviceInfo::RG40XXV ? DISPLAYCAL_PRESET_RG40XXV : + deviceInfo.getModel() == DeviceInfo::RGCubeXX ? DISPLAYCAL_PRESET_RGCUBEXX : + DISPLAYCAL_PRESET_DEFAULT); displayItems.push_back( new MenuItem{ListItemType::Generic, "White point correction", "Corrects the display white point to better match the \nsRGB standard, at the expense of some peak brightness.", {false, true}, on_off, []() -> std::any { return GetDisplayCalEnabled() != 0; }, [](const std::any &value) diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index b4459f71e..aad4c31d1 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -314,15 +314,44 @@ int peekVersion(const char *filename) { return version; } +static int prefixMatch(char* pre, char* str) { + if (!pre || !str) return 0; + return (strncmp(pre, str, strlen(pre))==0); +} + +// Pick the displaycal preset for this device. Exact RGXX_MODEL strings confirmed +// so far: RG28xx, RG34xx, RG34xxSP, RG40xxV, RGcubexx. The RG35xx family and +// RG40xxH are matched by prefix/suffix until their exact strings are confirmed. +static enum DisplayCalPreset displayCalPresetForDevice(void) { + char* device = getenv("DEVICE"); + char* model = getenv("RGXX_MODEL"); + + if (exactMatch("RG28xx", model) || exactMatch("rg28xx", device)) return DISPLAYCAL_PRESET_RG28XX; + if (exactMatch("RG34xxSP", model)) return DISPLAYCAL_PRESET_RG34XXSP; + if (prefixMatch("RG34xx", model) || exactMatch("rg34xx", device)) return DISPLAYCAL_PRESET_RG34XX; + if (exactMatch("RG40xxV", model)) return DISPLAYCAL_PRESET_RG40XXV; + if (exactMatch("RG40xxH", model)) return DISPLAYCAL_PRESET_RG40XXH; + if (prefixMatch("RGcube", model) || exactMatch("cube", device)) return DISPLAYCAL_PRESET_RGCUBEXX; + if (prefixMatch("RG35xx", model)) { + char* suffix = model + strlen("RG35xx"); + if (prefixMatch("SP", suffix)) return DISPLAYCAL_PRESET_RG35XXSP; + if (prefixMatch("Pro", suffix) || prefixMatch("PRO", suffix)) return DISPLAYCAL_PRESET_RG35XXPRO; + return DISPLAYCAL_PRESET_RG35XX; // Plus/H/2024 share a preset for now + } + // DEVICE=rg40xx alone can't distinguish V from H, so fall through to neutral + return DISPLAYCAL_PRESET_DEFAULT; +} + static void applyDisplayCalDefaultsForDevice(Settings *target) { - DisplayCalDefaults defaults = DisplayCal_getDefaultSettings(DISPLAYCAL_PRESET_DEFAULT); + DisplayCalDefaults defaults = DisplayCal_getDefaultSettings(displayCalPresetForDevice()); target->displaycal_enabled = defaults.enabled; target->displaycal_red_gain = defaults.red_gain; target->displaycal_green_gain = defaults.green_gain; target->displaycal_blue_gain = defaults.blue_gain; } -void InitSettings(void) { +void InitSettings(void) { + int seed_displaycal = 0; sprintf(SettingsPath, "%s/msettings.bin", getenv("USERDATA_PATH")); shm_fd = shm_open(SHM_KEY, O_RDWR | O_CREAT | O_EXCL, 0644); // see if it exists @@ -349,6 +378,8 @@ void InitSettings(void) { else { // initialize with defaults memcpy(settings, &DefaultSettings, shm_size); + // no displaycal fields before v11, seed device defaults + seed_displaycal = 1; // overwrite with migrated data if(version==10) { @@ -509,11 +540,13 @@ void InitSettings(void) { else { // load defaults memcpy(settings, &DefaultSettings, shm_size); + seed_displaycal = 1; } } else { // load defaults memcpy(settings, &DefaultSettings, shm_size); + seed_displaycal = 1; } // these shouldn't be persisted @@ -529,7 +562,9 @@ void InitSettings(void) { system("amixer -q sset 'OutputR Mixer DACR' on >/dev/null 2>&1"); } - applyDisplayCalDefaultsForDevice(settings); + // only the host seeds displaycal defaults, and only when the persisted + // settings predate them — a clean current-version load keeps user values + if (is_host && seed_displaycal) applyDisplayCalDefaultsForDevice(settings); // This will implicitly update all other settings based on FN switch state SetMute(settings->mute); diff --git a/workspace/h700/libmsettings/msettings.h b/workspace/h700/libmsettings/msettings.h index db46458bf..aedf077a9 100644 --- a/workspace/h700/libmsettings/msettings.h +++ b/workspace/h700/libmsettings/msettings.h @@ -1,7 +1,7 @@ #ifndef __msettings_h__ #define __msettings_h__ -#define SETTINGS_DEFAULT_BRIGHTNESS 2 +#define SETTINGS_DEFAULT_BRIGHTNESS 4 #define SETTINGS_DEFAULT_COLORTEMP 20 #define SETTINGS_DEFAULT_CONTRAST 0 #define SETTINGS_DEFAULT_SATURATION 0 From 9bd2315a7cb2bf57f34e758a8ceab57dadd65ac4 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 18:25:23 +0200 Subject: [PATCH 28/76] docs(h700): record display settings fixes in port docs and roadmap - 04: displaycal reboot-persistence fix, per-model preset plumbing, RGXX_MODEL detection notes, hidden enhance controls, brightness 4 - 08: add verified rows for reboot persistence, fresh defaults, gating - 09: mark display settings item done at 0e60efd, note remaining syncsettings nit, add per-panel calibration to the later list --- docs/h700-port/04-video-display.md | 32 +++++++++++++++++++++++------ docs/h700-port/08-testing-status.md | 3 +++ docs/h700-port/09-roadmap.md | 20 +++++++++++------- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index 0ab86f905..12b68abc2 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -69,16 +69,36 @@ Treat the whole path as unverified. Same `/dev/disp` gamma-LUT ioctls as tg5040 (`0x10b` set / `0x10c` enable / `0x10d` disable). On RG40XXV: RGB gain sliders visibly act, persist, and **survive sleep and game launch** (syncsettings.elf re-applies the LUT after resume — 06). `settings.cpp` -gained the Anbernic vendor + RG40XX/RG34XX/RG28XX/RGCubeXX models and enables +gained the Anbernic vendor + RG XX models and enables colortemp/displaycal/mute/analog-stick/wifi/bt capability flags for h700. -Per-panel default gain presets: not yet measured (neutral defaults). + +**Reboot persistence — fixed 2026-07-09.** `InitSettings()` used to call +`applyDisplayCalDefaultsForDevice()` unconditionally *after* loading the persisted +`msettings.bin`, clobbering white point / RGB gains back to off/100/100/100 on every +boot (and every client attach). Now only the shm host seeds displaycal defaults, and +only when the file is missing or predates v11. Verified on RG40XXV: patched values +survive reboot. (tg5040 has the same latent bug, masked by its calibrated presets — +flagged as a separate task.) + +**Per-model default presets — plumbed, not yet measured.** `displaycal.h` has a +preset per H700 model (RG28XX, RG34XX, RG34XXSP, RG35XX = Plus/H/2024 shared, +RG35XXSP, RG35XXPRO, RG40XXH, RG40XXV, RGCubeXX), all currently disabled/neutral +(100/100/100). Selection keys on `RGXX_MODEL` (exact-model string from stock +`dmenu.bin`; confirmed so far: `RG28xx`, `RG34xx`, `RG34xxSP`, `RG40xxV`, +`RGcubexx` — RG35xx-family and RG40xxH strings matched by prefix until confirmed) +with `DEVICE` fallback, in both h700 libmsettings and the settings app's +reset-to-defaults. launch.sh now maps `RG35xx*` → `DEVICE=rg35xx` instead of lumping +the 35xx family into rg40xx. Calibrating a panel later = editing numbers in +displaycal.h only. Default brightness on h700 is 4 (tg5040 Brick keeps 2). **What actually works on RG XX panels:** LCD backlight brightness, color temperature, white-point correction (displaycal), RGB tuning. The `enhance_*` display controls -(brightness/contrast/saturation/exposure) are exposed in settings just like tg5040 -**but do nothing on RG XX** — the sysfs attrs exist (00) yet have no visible effect. -They need per-platform gating, and syncsettings shouldn't bother restoring them -(09-roadmap #8). +(contrast/saturation/exposure) **do nothing on RG XX** — the sysfs attrs exist (00) +yet have no visible effect — so since 2026-07-09 they are hidden on h700 via the +`DeviceInfo` capability gates in settings.cpp (including the mute-toggle variants). +The libmsettings plumbing remains (harmless no-ops; the shared API keeps the +symbols), and syncsettings still "restores" them on resume — a cosmetic cleanup at +most. ## Alpha/tinted-bitmap blits — resolved (it was libpng all along) diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 3924a8d7a..9089005e3 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -29,6 +29,9 @@ | Brightness 0–10 + colortemp ramps; persist across reboot | ✅ | | MENU short-tap → shortcuts overlay vs. hold → brightness (compound-tap fix, see 00/03) | ✅ tested on RG34XXSP; firmware quirk is common to the H700 line, expected fine on all RG XX | | Displaycal RGB gains: act, persist, survive sleep + game launch | ✅ | +| Displaycal survives reboot (was clobbered to defaults every boot; fixed 2026-07-09) | ✅ verified on RG40XXV by patching msettings.bin + reboot | +| Fresh-install defaults: brightness 4, displaycal off/neutral | ✅ verified on RG40XXV (deleted msettings.bin + reboot) | +| Dead enhance controls (contrast/saturation/exposure) hidden on h700 | ✅ code-gated 2026-07-09; visual check on device pending | | Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | | Volume UI + levels, mute through 100% | ✅ tested on RG40XXV and RG34XXSP; no known issues | | Rumble (moto on/off) | ✅ | diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 66f55558d..adc6d0b75 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,6 +1,6 @@ # 09 — Roadmap: from working beta to a 9.5/10 port -Everything below is verified against branch tip `752cefe8` (updated 2026-07-09). +Everything below is verified against branch tip `0e60efd` (updated 2026-07-09). Ordered by impact within each section. ## P0 — Correctness / robustness @@ -54,11 +54,13 @@ Ordered by impact within each section. dual sticks + L3/R3; 34XX/28XX have none). - **Fn switch option** in the settings app — the sliding Fn button doesn't exist on any RG XX device; hide/gate it for h700. - - **Display settings** expose brightness/saturation/contrast/exposure enhance - controls that **do nothing on RG XX**. What actually works: LCD backlight - brightness, color temperature, white-point correction (displaycal), RGB - tuning. Gate the dead controls per-platform (and stop syncsettings from - "restoring" values that have no effect). + - **~~Display settings~~ Done (2026-07-09, `0e60efd`)** — the dead enhance + controls (contrast/saturation/exposure) are now hidden on h700; displaycal + reboot persistence fixed (was clobbered to defaults every boot); per-model + displaycal preset plumbing added for the full 11-device H700 family (all + neutral/disabled until panels are measured); default brightness raised to 4; + `RG35xx*` now maps to `DEVICE=rg35xx` in launch.sh (see 04). Remaining + nit: syncsettings still "restores" the no-op enhance values on resume. Worth a systematic sweep: grep settings.cpp / paks for capability flags that default to "present" and decide each for h700. 9. **BT audio: ship bluealsa or formally drop it.** The gate-off is clean and @@ -76,7 +78,11 @@ Ordered by impact within each section. 12. **Measure real panel refresh** — `SCREEN_FPS 60.0` is assumed. A vsync-timing test per device takes minutes and protects frame pacing math. 13. Later: RGcubexx bring-up (720×720, wired but untested), HDMI out (`SetHDMI()` is - a no-op; mechanism documented in 04), RG35XX-family variants, Panel-Fix tool. + a no-op; mechanism documented in 04), RG35XX-family variants (displaycal presets + + `DEVICE=rg35xx` mapping already plumbed — 04), Panel-Fix tool, **per-panel + displaycal calibration** (measure each device, fill in the neutral presets in + displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH + while at it). ## P2 — Cleanup / refactors / simplifications From b6e579ff191679920dc6d2f6b083633e7027b30d Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 19:32:41 +0200 Subject: [PATCH 29/76] =?UTF-8?q?fix(h700):=20Files=20app=20=E2=80=94=20SD?= =?UTF-8?q?L=20joystick=20enumeration,=20button=20map,=20scaling,=20first?= =?UTF-8?q?=20frame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Files app (NextCommander) appeared to freeze on startup: it ran fine but never received input. The bundled SDL fork's Batocera patches removed the evdev joystick heuristic from SDL_EVDEV_GuessDeviceClass() (Batocera classifies via udev), so our no-udev build never enumerated the built-in pad and SDL_NumJoysticks() returned 0. New patches/sdl2-h700.patch restores classification via BTN_GAMEPAD/BTN_JOYSTICK (the pad has no ABS_X/ABS_Y, so the original upstream check would not have matched either), applied with a stamp like the NextCommander patch. NextCommander fixes (patches/NextCommander-h700.patch): - Button indices remapped: the fork assigns SDL button indices in ascending keycode order, so ESC/VOL-/VOL+ (1/114/115) occupy 0-2 and the gamepad cluster starts at 3 (A=3, B=4, Y=5, X=6, L1=7, R1=8, SELECT=9, START=10, MENU=11). Volume keys no longer trigger navigation. - SDL_CreateWindow was passed height for both dimensions (square window that could not fill 640x480), and sized the window from disp_width*ppu, which exceeds what mali-fbdev can allocate at higher PPU; with autoscale the window now uses the display's current mode. - Render the first 8 frames instead of one: a single startup flip could land on a stale page during the launcher handoff, leaving a blank screen until the first button press. PPU stays 2 (user-preferred after comparing 2/3/4/6 on RG40XXV) with disp_autoscale_dpi off since SDL_GetDisplayDPI is unsupported here. --- docs/h700-port/01-toolchain-and-build.md | 8 ++ docs/h700-port/03-platform-layer.md | 7 ++ docs/h700-port/08-testing-status.md | 1 + skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg | 2 +- workspace/h700/makefile | 7 +- .../h700/patches/NextCommander-h700.patch | 92 +++++++++++++++---- workspace/h700/patches/sdl2-h700.patch | 22 +++++ 7 files changed, 119 insertions(+), 20 deletions(-) create mode 100644 workspace/h700/patches/sdl2-h700.patch diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 315231f8f..680ee78cc 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -37,6 +37,14 @@ prefix that `makefile.env` puts first. Configure highlights (see `workspace/h700 and for alsa-shared/image-shared dlopen to work at all. (An early draft disabled both; don't.) - No udev (`SDL_JOYSTICK_DISABLE_UDEV=1` is also exported at runtime — see 03). +- **`patches/sdl2-h700.patch` is applied after clone** (stamped, like the + NextCommander patch). The fork's "Batocera patches" commit removed the heuristic + joystick classification from `SDL_EVDEV_GuessDeviceClass()` (Batocera classifies + via udev), which — combined with our no-udev build — made `SDL_NumJoysticks()` + permanently return 0 for the built-in pad. NextUI never noticed (it reads evdev + raw — 03), but pure-SDL apps like NextCommander got no input at all. The patch + restores classification via a `BTN_GAMEPAD`/`BTN_JOYSTICK` check (the upstream + check wouldn't match anyway: the pad exposes no ABS_X/ABS_Y). ### Runtime library bundling (`platform/makefile.copy`) Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted for: diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index e9a7169f1..4a97c2873 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -32,6 +32,13 @@ Bluetooth controllers. Reasons discovered during bring-up: - SDL joystick enumeration of the built-in pad is unreliable on the stock image (udev interplay); SDL is built without udev and `SDL_JOYSTICK_DISABLE_UDEV=1` is exported — that fixed startup hangs but made js enumeration of gpio-keys flaky. + Root cause found later (2026-07-09, Files-app freeze): the SDL fork's Batocera + patches deleted the joystick heuristic in `SDL_EVDEV_GuessDeviceClass()`, so the + no-udev fallback path never classified any device as a joystick. Fixed by + `workspace/h700/patches/sdl2-h700.patch` (see 01); SDL joystick enumeration of + the built-in pad now works. Note the fork assigns SDL button indices in + ascending evdev-keycode order, so the pad's ESC/VOL−/VOL+ (1/114/115) occupy + indices 0–2 and the gamepad cluster starts at index 3 (A=3 … MENU=11). - evdev codes are needed for keymon and wake handling anyway. Implementation: `poll_evdev_input()` scans/reads `/dev/input/event0..11` directly with diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 9089005e3..f8219a71c 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -38,6 +38,7 @@ | WiFi scan/connect/forget | ✅ | | WiFi survives sleep; NTP sync | ✅ | | Deep sleep (auto/manual) + wake | ✅ fixed & user-tested on RG34XXSP 2026-07-09 (4 stacked bugs — see 06); in-game (minarch) path shares the code but untested; RG40XXV re-test pending | +| Files app (NextCommander): input, scaling, first-frame render | ✅ fixed & user-tested on RG40XXV 2026-07-09 (SDL joystick classification patch, button index remap, square-window + oversize-window fixes, startup warmup render, PPU 2 — see 01/03) | | Screenshots, Recently Played, game switcher, box art | ⬜ | | Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | | Battery % accuracy vs stock; charging indicator; charge-while-sleeping | ⬜ | diff --git a/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg b/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg index c76453190..103e29ff5 100644 --- a/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg +++ b/skeleton/EXTRAS/Tools/h700/Files.pak/h700.cfg @@ -1,6 +1,6 @@ disp_width=640 disp_height=480 disp_autoscale=1 -disp_autoscale_dpi=1 +disp_autoscale_dpi=0 disp_ppu_x=2 disp_ppu_y=2 diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 5bf720418..da0e8d120 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -17,7 +17,9 @@ REQUIRES_FILEMGR=other/NextCommander REQUIRES_SDL2=other/sdl2 SDL2_COMMIT=d4a7d7503524cc469fe775242f3f925d4dd56c88 FILEMGR_PATCH=patches/NextCommander-h700.patch -FILEMGR_STAMP=.patched-h700-v2 +FILEMGR_STAMP=.patched-h700-v3 +SDL2_PATCH=patches/sdl2-h700.patch +SDL2_PATCH_STAMP=.patched-h700-v1 SDL2_STAMP=.configured-nextui-h700-v3 all: readmes @@ -27,6 +29,7 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip + cd $(REQUIRES_SDL2) && ([ -f $(SDL2_PATCH_STAMP) ] || (git checkout -- src/core/linux/SDL_evdev_capabilities.c && git apply ../../$(SDL2_PATCH) && rm -f $(SDL2_STAMP) && touch $(SDL2_PATCH_STAMP))) cd $(REQUIRES_SDL2) && ([ -f $(SDL2_STAMP) ] || ([ ! -f Makefile ] || make clean)) cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-alsa-shared --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-libudev --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static --disable-libsamplerate-shared && touch $(SDL2_STAMP) grep -q '^#define SDL_VIDEO_DRIVER_MALI 1' $(REQUIRES_SDL2)/include/SDL_config.h @@ -39,7 +42,7 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE # SDL2_image dlopens libpng12.so.0 at runtime; the H700 stock OS only has # a 32-bit copy under /mnt/vendor/lib, so bundle the toolchain's 64-bit one cp -L $(PREFIX)/lib/libpng12.so.0 $(REQUIRES_SDL2)/output/ - cd $(REQUIRES_FILEMGR) && ([ -f $(FILEMGR_STAMP) ] || (git checkout -- Makefile && git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch $(FILEMGR_STAMP))) + cd $(REQUIRES_FILEMGR) && ([ -f $(FILEMGR_STAMP) ] || (git checkout -- . && git apply --unidiff-zero ../../$(FILEMGR_PATCH) && touch $(FILEMGR_STAMP))) cd $(REQUIRES_FILEMGR) && ([ -f output/.platform-h700 ] || make clean PLATFORM=h700) cd $(REQUIRES_FILEMGR) && make -j PLATFORM=h700 && touch output/.platform-h700 cd boot && sh build.sh diff --git a/workspace/h700/patches/NextCommander-h700.patch b/workspace/h700/patches/NextCommander-h700.patch index 7c9b4445d..c3cc96e8d 100644 --- a/workspace/h700/patches/NextCommander-h700.patch +++ b/workspace/h700/patches/NextCommander-h700.patch @@ -1,9 +1,11 @@ diff --git a/Makefile b/Makefile +index d16a23d..3b979ff 100644 --- a/Makefile +++ b/Makefile -@@ -11,3 +11,35 @@ CXXFLAGS := -Os --# platform dependant stuff - tg5040 and tg5050 --ifneq (,$(findstring tg50,$(PLATFORM))) +@@ -8,8 +8,43 @@ endif + CXXFLAGS := -Os + #endif + +# platform dependant stuff - h700 +ifeq ($(PLATFORM),h700) +SDCARD_ROOT := /mnt/SDCARD @@ -14,20 +16,23 @@ diff --git a/Makefile b/Makefile +CXXFLAGS += -DFILE_SYSTEM=\"/dev/mmcblk1p1\" + +# Keys -+# Joys for Anbernic RG XX H700 ++# Joys for Anbernic RG XX H700. The bundled SDL fork assigns joystick button ++# indices in ascending evdev keycode order, and the built-in pad exposes ++# ESC/VOL-/VOL+ (keycodes 1/114/115) before the gamepad buttons (304..316), ++# so the gamepad buttons start at index 3. +CXXFLAGS += -DCMDR_KEY_UP=SDLK_UP +CXXFLAGS += -DCMDR_KEY_RIGHT=SDLK_RIGHT +CXXFLAGS += -DCMDR_KEY_DOWN=SDLK_DOWN +CXXFLAGS += -DCMDR_KEY_LEFT=SDLK_LEFT -+CXXFLAGS += -DCMDR_KEY_OPEN=0 # A -+CXXFLAGS += -DCMDR_KEY_PARENT=1 # B -+CXXFLAGS += -DCMDR_KEY_OPERATION=3 # X -+CXXFLAGS += -DCMDR_KEY_SYSTEM=2 # Y -+CXXFLAGS += -DCMDR_KEY_PAGEUP=4 # L1 -+CXXFLAGS += -DCMDR_KEY_PAGEDOWN=5 # R1 -+CXXFLAGS += -DCMDR_KEY_SELECT=6 # SELECT -+CXXFLAGS += -DCMDR_KEY_TRANSFER=7 # START -+CXXFLAGS += -DCMDR_KEY_MENU=8 # MENU ++CXXFLAGS += -DCMDR_KEY_OPEN=3 # A (304) ++CXXFLAGS += -DCMDR_KEY_PARENT=4 # B (305) ++CXXFLAGS += -DCMDR_KEY_OPERATION=6 # X (307) ++CXXFLAGS += -DCMDR_KEY_SYSTEM=5 # Y (306) ++CXXFLAGS += -DCMDR_KEY_PAGEUP=7 # L1 (308) ++CXXFLAGS += -DCMDR_KEY_PAGEDOWN=8 # R1 (309) ++CXXFLAGS += -DCMDR_KEY_SELECT=9 # SELECT (310) ++CXXFLAGS += -DCMDR_KEY_TRANSFER=10 # START (311) ++CXXFLAGS += -DCMDR_KEY_MENU=11 # MENU (312) + +# Screen +CXXFLAGS += -DAUTOSCALE=1 @@ -36,16 +41,69 @@ diff --git a/Makefile b/Makefile +CXXFLAGS += -DPPU_Y=2 +CXXFLAGS += -DSCREEN_BPP=32 + -+# platform dependant stuff - tg5040 and tg5050 + # platform dependant stuff - tg5040 and tg5050 +-ifneq (,$(findstring tg50,$(PLATFORM))) +else ifneq (,$(findstring tg50,$(PLATFORM))) SDCARD_ROOT := /mnt/SDCARD -@@ -86,2 +118,8 @@ endif + NEXTUI_SYSTEM_PATH := $(SDCARD_ROOT)/.system + +@@ -84,7 +119,13 @@ CXXFLAGS += -DSCREEN_BPP=32 + endif + SDL := SDL2 --CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) +ifeq ($(PLATFORM),h700) +CXXFLAGS += -I$(PREFIX_LOCAL)/include/$(SDL) -I$(PREFIX)/include/$(SDL) +LINKFLAGS += -L$(PREFIX_LOCAL)/lib -L$(PREFIX)/lib +else -+CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) + CXXFLAGS += -I$(PREFIX)/include/$(SDL) -DUSE_$(SDL) +endif +CXXFLAGS += -DUSE_$(SDL) + + #CXXFLAGS += $$(pkg-config --cflags sdl2 SDL2_image SDL2_ttf) + #LINKFLAGS += $$(pkg-config --libs sdl2 SDL2_image SDL2_ttf) +diff --git a/src/screen.cpp b/src/screen.cpp +index 43d31fa..c9818b1 100644 +--- a/src/screen.cpp ++++ b/src/screen.cpp +@@ -80,8 +80,17 @@ int Screen::init() + + int window_w = screen.actual_w; + int window_h = screen.actual_h; ++ // When autoscaling, size the window to the display: deriving it from ++ // disp_width * ppu can exceed what the driver supports (e.g. mali-fbdev ++ // fails to create a 3840x2880 surface on a 640x480 panel at high PPU). ++ SDL_DisplayMode dm; ++ if (cfg.disp_autoscale && SDL_GetCurrentDisplayMode(0, &dm) == 0 ++ && dm.w > 0 && dm.h > 0) { ++ window_w = dm.w; ++ window_h = dm.h; ++ } + window = SDL_CreateWindow("Commander", SDL_WINDOWPOS_UNDEFINED, +- SDL_WINDOWPOS_UNDEFINED, window_h, window_h, window_flags); ++ SDL_WINDOWPOS_UNDEFINED, window_w, window_h, window_flags); + if (window == nullptr) { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return 1; +diff --git a/src/window.cpp b/src/window.cpp +index e3e646e..b42bb89 100644 +--- a/src/window.cpp ++++ b/src/window.cpp +@@ -62,9 +62,18 @@ int CWindow::execute() + SDL_Event event; + bool l_loop(true); + bool l_render(true); ++ // Re-render the first few frames: on fbdev-style double-buffered targets a ++ // single startup flip can land on a page that the previous app (or the ++ // launcher handing off to us) still overwrites, leaving a stale screen ++ // until the next input-triggered render. ++ int l_warmup(8); + // Main loop + while (l_loop) + { ++ if (l_warmup > 0) { ++ --l_warmup; ++ l_render = true; ++ } + // Handle key press + while (SDL_PollEvent(&event)) + { diff --git a/workspace/h700/patches/sdl2-h700.patch b/workspace/h700/patches/sdl2-h700.patch new file mode 100644 index 000000000..a951bb97b --- /dev/null +++ b/workspace/h700/patches/sdl2-h700.patch @@ -0,0 +1,22 @@ +diff --git a/src/core/linux/SDL_evdev_capabilities.c b/src/core/linux/SDL_evdev_capabilities.c +index a1c4468b4..0e56173b2 100644 +--- a/src/core/linux/SDL_evdev_capabilities.c ++++ b/src/core/linux/SDL_evdev_capabilities.c +@@ -104,6 +104,17 @@ SDL_EVDEV_GuessDeviceClass(const unsigned long bitmask_ev[NBITS(EV_MAX)], + //} + } + ++ /* The Batocera patches above removed heuristic joystick detection (they ++ classify via udev instead), but this build has no libudev, so the ++ fallback enumeration in SDL_sysjoystick.c depends on this function. ++ Gamepad/joystick buttons are enough to classify the H700 built-in ++ controls, which expose no ABS_X/ABS_Y. */ ++ if (test_bit(EV_KEY, bitmask_ev) && ++ (test_bit(BTN_GAMEPAD, bitmask_key) || ++ test_bit(BTN_JOYSTICK, bitmask_key))) { ++ devclass |= SDL_UDEV_DEVICE_JOYSTICK; /* ID_INPUT_JOYSTICK */ ++ } ++ + if (test_bit(EV_REL, bitmask_ev) && + test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel) && + test_bit(BTN_MOUSE, bitmask_key)) { From 8580b947b802597094f8b2bfdbe79b12b9e7ff4c Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 19:51:50 +0200 Subject: [PATCH 30/76] fix(h700): don't open the built-in pad as an SDL joystick The sdl2-h700.patch made the built-in gpio-keys pad enumerable by SDL (needed by the Files app), but NextUI's platform layer interprets every SDL joystick with the Bluetooth-pad JOY_* layout. The built-in pad's presses were therefore processed twice: correctly via raw evdev, and again through the BT mapping with the fork's ascending-keycode indices (B->L1, Y->R1, VOL- -> back, MENU's 354 keycode -> volume UI), scrambling controls in Settings and every other NextUI app. Skip "ANBERNIC-keys" in PLAT_initInput and the SDL_JOYDEVICEADDED hotplug path: raw evdev stays the sole input path for built-in controls, SDL joystick remains for external Bluetooth pads only. --- docs/h700-port/03-platform-layer.md | 7 ++++++ workspace/h700/platform/platform.c | 36 ++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 4a97c2873..5d539487a 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -39,6 +39,13 @@ Bluetooth controllers. Reasons discovered during bring-up: the built-in pad now works. Note the fork assigns SDL button indices in ascending evdev-keycode order, so the pad's ESC/VOL−/VOL+ (1/114/115) occupy indices 0–2 and the gamepad cluster starts at index 3 (A=3 … MENU=11). + **Because of that, platform.c must never open the built-in pad as an SDL + joystick**: `poll_sdl_input()` interprets SDL joysticks with the BT-pad + `JOY_*` layout, so the built-in pad's events would double-apply with scrambled + meanings (B→L1, VOL−→back, MENU→volume UI — seen in Settings 2026-07-09). + `is_builtin_pad()` skips "ANBERNIC-keys" in both the init scan and the + hotplug path; evdev is the sole path for built-in controls, SDL joystick is + for external (BT) pads only. - evdev codes are needed for keymon and wake handling anyway. Implementation: `poll_evdev_input()` scans/reads `/dev/input/event0..11` directly with diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index f0dc688fe..383132e72 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -194,6 +194,15 @@ void PLAT_initPlatform(void) { static SDL_Joystick **joysticks = NULL; static int num_joysticks = 0; + +// The built-in gpio-keys pad is handled via raw evdev (above); opening it as an +// SDL joystick too would feed poll_sdl_input() duplicate events interpreted with +// the Bluetooth-pad JOY_* layout (and the pad's SDL button indices are shifted +// by its ESC/VOL keys anyway). SDL joysticks are for external pads only. +static int is_builtin_pad(const char *name) { + return name && strcmp(name, "ANBERNIC-keys") == 0; +} + void PLAT_initInput(void) { detect_device(); for (int i = 0; i < H700_INPUT_COUNT; i++) @@ -203,12 +212,22 @@ void PLAT_initInput(void) { if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) < 0) LOG_error("Failed initializing joysticks: %s\n", SDL_GetError()); SDL_JoystickEventState(SDL_ENABLE); - num_joysticks = SDL_NumJoysticks(); - if (num_joysticks > 0) { - joysticks = (SDL_Joystick **)malloc(sizeof(SDL_Joystick *) * num_joysticks); - for (int i = 0; i < num_joysticks; i++) { - joysticks[i] = SDL_JoystickOpen(i); - LOG_info("Opening joystick %d: %s\n", i, SDL_JoystickName(joysticks[i])); + int total = SDL_NumJoysticks(); + if (total > 0) { + joysticks = (SDL_Joystick **)malloc(sizeof(SDL_Joystick *) * total); + for (int i = 0; i < total; i++) { + const char *name = SDL_JoystickNameForIndex(i); + if (is_builtin_pad(name)) { + LOG_info("Skipping built-in joystick %d: %s (handled via evdev)\n", i, name); + continue; + } + SDL_Joystick *joy = SDL_JoystickOpen(i); + if (!joy) { + LOG_error("Failed to open joystick %d: %s\n", i, SDL_GetError()); + continue; + } + joysticks[num_joysticks++] = joy; + LOG_info("Opening joystick %d: %s\n", i, SDL_JoystickName(joy)); } } scan_evdev_inputs(); @@ -413,6 +432,11 @@ void PLAT_updateInput(const SDL_Event *event) { switch (event->type) { case SDL_JOYDEVICEADDED: { int device_index = event->jdevice.which; + const char *name = SDL_JoystickNameForIndex(device_index); + if (is_builtin_pad(name)) { + LOG_info("Skipping built-in joystick %d: %s (handled via evdev)\n", device_index, name); + break; + } SDL_Joystick *new_joy = SDL_JoystickOpen(device_index); if (new_joy) { joysticks = realloc(joysticks, sizeof(SDL_Joystick *) * (num_joysticks + 1)); From 4325abc86c82dc99ac1b024ab2b570d395ca72c1 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 20:05:16 +0200 Subject: [PATCH 31/76] chore(h700): prepare alpha cleanup Remove the H700-only crash-loop network rescue path, share boot and installer shim helpers, restore POSIX logging in H700 tool launchers, and add CI coverage for H700 builds plus the Jammy settings ldd check. Update the H700 port docs to reflect the alpha release posture and deferred follow-ups. --- .github/workflows/ci.yaml | 35 ++++++++ .github/workflows/release.yaml | 36 ++++++++- docs/h700-port/01-toolchain-and-build.md | 5 ++ docs/h700-port/02-boot-and-installer.md | 12 +-- docs/h700-port/07-wifi-bluetooth.md | 5 +- docs/h700-port/08-testing-status.md | 4 +- docs/h700-port/09-roadmap.md | 37 +++++---- .../EXTRAS/Tools/h700/Battery.pak/launch.sh | 4 +- .../EXTRAS/Tools/h700/Clock.pak/launch.sh | 4 +- .../Tools/h700/Game Tracker.pak/launch.sh | 2 +- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 66 +--------------- workspace/h700/boot/boot.sh | 79 +++++++------------ workspace/h700/boot/build.sh | 3 +- workspace/h700/check-settings-ldd.sh | 39 +++++++++ workspace/h700/install/boot.sh | 73 ++++------------- workspace/h700/platform/makefile.copy | 1 + workspace/h700/shim-common.sh | 56 +++++++++++++ 17 files changed, 257 insertions(+), 204 deletions(-) create mode 100755 workspace/h700/check-settings-ldd.sh create mode 100755 workspace/h700/shim-common.sh diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b01fdbed7..dc9cbef9e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,6 +42,7 @@ jobs: toolchain: - tg5040 - tg5050 + - h700 steps: - name: Checkout @@ -64,6 +65,7 @@ jobs: toolchain: - tg5040 - tg5050 + - h700 core: ${{ fromJson(needs.core-matrix.outputs.cores) }} steps: - name: Checkout @@ -124,6 +126,39 @@ jobs: env: PLATFORM: tg5050 + - name: Download Cores (h700) + uses: actions/download-artifact@v4.3.0 + with: + path: workspace/h700/cores/output/ + pattern: core-h700-* + merge-multiple: true + + - name: Build (h700) + run: make h700 + env: + PLATFORM: h700 + + - name: Check H700 settings runtime links + run: | + docker run --rm --platform linux/arm64 -v "$PWD:/work" -w /work ubuntu:22.04 sh -ec ' + apt-get update + apt-get install -y --no-install-recommends \ + libegl1 \ + libfreetype6 \ + libgcc-s1 \ + libglib2.0-0 \ + libgles2 \ + libjpeg-turbo8 \ + liblzma5 \ + libpng16-16 \ + libstdc++6 \ + libtiff5 \ + libwebp7 \ + libzstd1 \ + zlib1g + sh ./workspace/h700/check-settings-ldd.sh + ' + - name: Special run: make special diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index bf1e220e4..aa4e0c7ea 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -61,6 +61,7 @@ jobs: toolchain: - tg5040 - tg5050 + - h700 steps: - name: Checkout @@ -83,6 +84,7 @@ jobs: toolchain: - tg5040 - tg5050 + - h700 core: ${{ fromJson(needs.core-matrix.outputs.cores) }} steps: - name: Checkout @@ -143,6 +145,39 @@ jobs: env: PLATFORM: tg5050 + - name: Download Cores (h700) + uses: actions/download-artifact@v4.3.0 + with: + path: workspace/h700/cores/output/ + pattern: core-h700-* + merge-multiple: true + + - name: Build (h700) + run: make h700 + env: + PLATFORM: h700 + + - name: Check H700 settings runtime links + run: | + docker run --rm --platform linux/arm64 -v "$PWD:/work" -w /work ubuntu:22.04 sh -ec ' + apt-get update + apt-get install -y --no-install-recommends \ + libegl1 \ + libfreetype6 \ + libgcc-s1 \ + libglib2.0-0 \ + libgles2 \ + libjpeg-turbo8 \ + liblzma5 \ + libpng16-16 \ + libstdc++6 \ + libtiff5 \ + libwebp7 \ + libzstd1 \ + zlib1g + sh ./workspace/h700/check-settings-ldd.sh + ' + - name: Special run: make special @@ -225,4 +260,3 @@ jobs: ## How to install/update For a fresh installation, follow the instructions here: https://nextui.loveretro.games/getting-started/installation/ When updating from a previous release: https://nextui.loveretro.games/getting-started/updating/ - diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 680ee78cc..d5b8b6292 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -55,6 +55,11 @@ Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted Rule of thumb: `ldd` every shipped .elf against a clean stock rootfs; bundle exactly the misses, nothing more. +CI now applies that rule to the highest-risk h700 GUI binary: +`workspace/h700/check-settings-ldd.sh` runs `ldd` for `settings.elf` in an Ubuntu +22.04/Jammy arm64 runtime with `.system/h700/lib` first, and fails on unresolved +libraries or missing gio/glib linkage. + ### Updater detection (multi-platform SD cards) `skeleton/BOOT/common/updater` detects H700 via `grep -q sun50iw9 /proc/device-tree/model` **before** the `*"0xd03"*` cpuinfo case — H700's cpuinfo is diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md index cec98d8c2..7d8b730a4 100644 --- a/docs/h700-port/02-boot-and-installer.md +++ b/docs/h700-port/02-boot-and-installer.md @@ -65,6 +65,9 @@ Notable implementation details (`boot/boot.sh`): `INSERT NEXTUI TF2 CARD`, `NEXTUI INSTALL MISSING`, `STOCK TARGET REQUIRED`. (The old port's per-panel raw-BMP `dd` scheme was dropped — rendered text needs no per-resolution assets. Post-install, SDL-based `show2.elf` takes over as usual.) +- **Shared helpers**: `shim-common.sh` is packed into the self-extracting payload and + sourced after extraction, so boot and installer share TF2 mount/repair, `/mnt/SDCARD` + compatibility, and logging helpers. - **TF2 mount**: tries vfat → exfat → auto; on failure runs `repair_tf2()` — `fsck.fat -a` or `fsck.exfat -a` chosen by `blkid` — then retries once. - **Update trigger**: boots into the installer when `MinUI.zip` **or any `*.pakz`** is @@ -89,7 +92,7 @@ Notable implementation details (`boot/boot.sh`): ## `MinUI.pak/launch.sh` (the master runtime script) -Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~264 lines): +Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~206 lines): - `export PLATFORM=h700`, path exports, `/mnt/SDCARD` compat symlink. - **Device detection**: `RGXX_MODEL=$(strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG)` → `DEVICE` case (rg28xx / rg34xx / cube / rg40xx default). Confirmed working on 2026 @@ -107,7 +110,6 @@ Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~2 `/tmp/next` chaining. - Poweroff/reboot via sentinel files: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → `reboot` (systemd handles clean unmounts — works; no `poweroff_next` port needed). -- Diagnostics affordances: a `debug-keep-network` flag file keeps SSH/WiFi up, and - after 5 consecutive nextui crashes the loop brings up networking + SSH for 300 s so - a bricked-UI device is still reachable. (Currently always-on in the release path — - see 09-roadmap about gating it.) +- Crash-loop handling: after 5 consecutive `nextui.elf` crashes, the loop logs the + crash limit, removes `/tmp/nextui_exec`, and falls through to poweroff. H700 does + not ship an automatic WiFi/SSH rescue path in the release runtime. diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index 7b17bee75..2232f50c3 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -54,5 +54,6 @@ Untested so far: RetroAchievements login/unlock, Pak Store install, OTA update f ## Diagnostics `PLAT_wifiDiagnosticsEnabled/Enable` + BT equivalents: tg5040 mechanism (verbose logs -under `$LOGS_PATH`) carried over. The launch.sh `debug-keep-network` flag file keeps -WiFi+SSH up regardless of settings — the primary dev-loop tool (08). +under `$LOGS_PATH`) carried over. H700 intentionally does not add its own keep-network +flag or crash-loop SSH rescue path for alpha; collect logs from TF2 after poweroff or +use stock SSH while the device is already reachable. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index f8219a71c..c8f46261a 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -13,8 +13,8 @@ - The stock OS runs sshd with a full Ubuntu userland — iterate by `scp`ing freshly built `.elf`s into `.system/h700/bin` and restarting the launch loop. No SD-card shuffling after first install. -- Drop the `debug-keep-network` flag file (see launch.sh) to keep WiFi+SSH up during - testing; 5 consecutive nextui crashes also auto-start SSH for 300 s. +- Repeated `nextui.elf` crashes now log the crash limit and power off. Use TF2 logs + for crash-loop debugging; the release runtime powers off instead of starting SSH. ## Validation matrix (status as of 2026-07-09, RG40XXV unless noted) diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index adc6d0b75..a48875abd 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -86,26 +86,29 @@ Ordered by impact within each section. ## P2 — Cleanup / refactors / simplifications -14. **Gate the crash-loop network behavior**: after 5 nextui crashes, launch.sh - brings up WiFi+SSH for 300 s unconditionally — great for beta, a mild security - surprise for release. Tie it to the `debug-keep-network` flag (or a - `.userdata` setting) before calling the port done. -15. **Dedupe boot/installer shell code** — `boot/boot.sh` and `install/boot.sh` - share mount/splash/log idioms with subtle divergence risk. Extract the common - helpers into one sourced file inside the shim payload. -16. **Dedicated h700 toolchain image, revisited** (01) — a thin +14. **~~Remove the crash-loop network behavior~~ Done (2026-07-09)** — after 5 + `nextui.elf` crashes, launch.sh now logs the limit, removes `/tmp/nextui_exec`, + and powers off instead of bringing up WiFi/SSH. +15. **~~Dedupe boot/installer shell code~~ Done (2026-07-09)** — `boot/boot.sh` + and `install/boot.sh` now share mount/compat/log helpers via + `workspace/h700/shim-common.sh`, packaged in both the self-extracting boot shim + payload and `.tmp_update/h700/`. +16. **Dedicated h700 toolchain image, revisited — deferred for alpha** (01) — a thin `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 (and bluealsa if #9 ships) removes the pitfall classes 1–3 in 01 structurally and cuts CI time. Do it when the next external dep lands. -17. **Trim remaining tg5040 residue in the skeleton** — sweep h700 paks/cfgs for - trimui-isms and stale comments (the big items — reboot_next, -brick cfgs, - libUMP/libasound bundling — are already gone). -18. **settings glib check** — settings.elf links the sysroot's glib and empirically - loads against the device's 2.72; add a one-line `ldd`-against-stock-rootfs CI - check (01's bundling rule) so an SDK bump can't silently break it. -19. **Wire richer battery metrics** (optional) — `time_to_empty_now`/`voltage_now`/ - `charge_counter` exist on the PMIC; batmon's SQLite would get better data for a - trivial PLAT extension. +17. **~~Trim remaining tg5040 residue in the skeleton~~ Done (2026-07-09)** — + h700 paks/cfgs are clear of `default-brick`, `reboot_next`, `libUMP`, bundled + `libasound`, and TrimUI-only skeleton comments; stale commented `&>` redirects + in the h700 tool launchers were replaced with POSIX `> ./log.txt 2>&1` logging. +18. **~~settings glib check~~ Done (2026-07-09)** — CI/release now build h700 and + run `workspace/h700/check-settings-ldd.sh` in a Jammy container against + `settings.elf` with the h700 bundled lib path, failing on unresolved libs or + missing gio/glib linkage. +19. **Wire richer battery metrics — deferred for alpha** (optional) — + `time_to_empty_now`/`voltage_now`/`charge_counter` exist on the PMIC; batmon's + SQLite would get better data for a trivial PLAT extension, but the alpha cleanup + keeps battery schemas unchanged. ## What "9.5/10" looks like diff --git a/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh index c7cd4fcde..de648a67c 100755 --- a/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh +++ b/skeleton/EXTRAS/Tools/h700/Battery.pak/launch.sh @@ -1,4 +1,4 @@ #!/bin/sh -cd $(dirname "$0") -./battery.elf # &> ./log.txt +cd "$(dirname "$0")" +./battery.elf > ./log.txt 2>&1 diff --git a/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh index 34c09b523..ae71b3857 100755 --- a/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh +++ b/skeleton/EXTRAS/Tools/h700/Clock.pak/launch.sh @@ -1,4 +1,4 @@ #!/bin/sh -cd $(dirname "$0") -./clock.elf # &> ./log.txt +cd "$(dirname "$0")" +./clock.elf > ./log.txt 2>&1 diff --git a/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh index 86e09ee15..5a3bdac03 100755 --- a/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh +++ b/skeleton/EXTRAS/Tools/h700/Game Tracker.pak/launch.sh @@ -1,4 +1,4 @@ #!/bin/sh cd "$(dirname "$0")" -./gametime.elf # &> ./log.txt +./gametime.elf > ./log.txt 2>&1 diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 8eb922ce2..dcb60bccc 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -31,8 +31,6 @@ export LOGS_PATH="$USERDATA_PATH/logs" export HOOKS_PATH="$USERDATA_PATH/.hooks" export DATETIME_PATH="$SHARED_USERDATA_PATH/datetime.txt" export HOME="$USERDATA_PATH" -DEBUG_KEEP_NETWORK_PATH="$USERDATA_PATH/debug-keep-network" -DEBUG_WIFI_CONF="$USERDATA_PATH/debug-wifi.conf" LAUNCH_LOG="$LOGS_PATH/launch.txt" export PATH="$SYSTEM_PATH/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" @@ -55,56 +53,6 @@ for gles_path in /usr/lib/libGLESv2.so /usr/lib/libGLESv2.so.2 /usr/lib/libGLESv fi done -read_debug_wifi_value() { - key="$1" - [ -f "$DEBUG_WIFI_CONF" ] || return 0 - sed -n "s/^$key=//p" "$DEBUG_WIFI_CONF" | tail -n 1 | sed 's/^"//;s/"$//' | tr -d '\r' -} - -connect_debug_wifi() { - [ -f "$DEBUG_WIFI_CONF" ] || return 0 - DEBUG_WIFI_SSID="$(read_debug_wifi_value SSID)" - DEBUG_WIFI_PASSWORD="$(read_debug_wifi_value PASSWORD)" - DEBUG_WIFI_IFACE="$(read_debug_wifi_value INTERFACE)" - [ -n "$DEBUG_WIFI_IFACE" ] || DEBUG_WIFI_IFACE="wlan0" - if [ -z "$DEBUG_WIFI_SSID" ]; then - echo "launch: debug-wifi.conf present without SSID=" >> "$LAUNCH_LOG" - return 0 - fi - - echo "launch: connecting debug wifi SSID=$DEBUG_WIFI_SSID IFACE=$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" - for attempt in 1 2 3; do - nmcli dev wifi rescan ifname "$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" 2>&1 || true - if [ -n "$DEBUG_WIFI_PASSWORD" ]; then - nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" password "$DEBUG_WIFI_PASSWORD" ifname "$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" 2>&1 && return 0 - else - nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" ifname "$DEBUG_WIFI_IFACE" >> "$LAUNCH_LOG" 2>&1 && return 0 - fi - echo "launch: debug wifi attempt $attempt failed" >> "$LAUNCH_LOG" - sleep 2 - done -} - -start_debug_network() { - echo "launch: starting stock network services for debug" >> "$LAUNCH_LOG" - rfkill.elf unblock wifi >> "$LAUNCH_LOG" 2>&1 || rfkill unblock wifi >> "$LAUNCH_LOG" 2>&1 || true - systemctl start NetworkManager >> "$LAUNCH_LOG" 2>&1 || true - nmcli networking on >> "$LAUNCH_LOG" 2>&1 || true - nmcli radio wifi on >> "$LAUNCH_LOG" 2>&1 || true - if [ -f "$DEBUG_WIFI_CONF" ]; then - connect_debug_wifi - elif [ -s "$USERDATA_PATH/wifi/wpa_supplicant.conf" ] && [ -x "$SYSTEM_PATH/etc/wifi/wifi_init.sh" ]; then - echo "launch: starting NextUI wpa_supplicant config for debug" >> "$LAUNCH_LOG" - "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start >> "$LAUNCH_LOG" 2>&1 || true - fi - systemctl start ssh >> "$LAUNCH_LOG" 2>&1 || - systemctl start sshd >> "$LAUNCH_LOG" 2>&1 || - /usr/sbin/sshd >> "$LAUNCH_LOG" 2>&1 || - true - sleep 2 - ip addr show >> "$LAUNCH_LOG" 2>&1 || true -} - log_runtime_state() { echo "launch: runtime state $(date)" >> "$LAUNCH_LOG" echo "launch: DEVICE=$DEVICE RGXX_MODEL=$RGXX_MODEL" >> "$LAUNCH_LOG" @@ -147,11 +95,7 @@ if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then fi killall brightCtrl.bin cexpert 2>/dev/null || true -if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] || [ -f "$DEBUG_WIFI_CONF" ]; then - start_debug_network -else - systemctl stop NetworkManager 2>/dev/null || true -fi +systemctl stop NetworkManager 2>/dev/null || true if loginctl show-logind >/dev/null 2>&1; then mkdir -p /run/systemd/logind.conf.d /run/systemd/system 2>/dev/null || true cat > /run/systemd/logind.conf.d/nextui-h700.conf << EOF @@ -188,9 +132,7 @@ else fi wifion=$(nextval.elf wifi | sed -n 's/.*"wifi": \([0-9]*\).*/\1/p') -if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] || [ -f "$DEBUG_WIFI_CONF" ]; then - echo "launch: skipping NextUI wifi init for debug" >> "$LAUNCH_LOG" -elif [ "$wifion" = "0" ]; then +if [ "$wifion" = "0" ]; then "$SYSTEM_PATH/etc/wifi/wifi_init.sh" stop > /dev/null 2>&1 & else "$SYSTEM_PATH/etc/wifi/wifi_init.sh" start > /dev/null 2>&1 & @@ -232,10 +174,8 @@ while [ -f "$EXEC_PATH" ]; do if [ "$EXIT_CODE" != "0" ]; then CRASH_COUNT=$((CRASH_COUNT + 1)) if [ "$CRASH_COUNT" -ge 5 ]; then - echo "launch: crash limit reached; keeping system up for diagnostics" >> "$LAUNCH_LOG" + echo "launch: crash limit reached; powering off" >> "$LAUNCH_LOG" rm -f "$EXEC_PATH" - start_debug_network - sleep 300 continue fi else diff --git a/workspace/h700/boot/boot.sh b/workspace/h700/boot/boot.sh index 01e3b3770..287d95728 100755 --- a/workspace/h700/boot/boot.sh +++ b/workspace/h700/boot/boot.sh @@ -15,7 +15,7 @@ if mountpoint -q "$TF1_PATH"; then fi : > "$LOG_PATH" 2>/dev/null || true -log() { +raw_log() { echo "$@" >> "$LOG_PATH" 2>/dev/null || true } @@ -26,44 +26,8 @@ has_pakz() { return 1 } -mount_tf2() { - mkdir -p "$TF2_PATH" - if mountpoint -q "$TF2_PATH"; then - return 0 - fi - mount -t vfat -o rw,utf8,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null || - mount -t exfat -o rw,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null || - mount -o rw,noatime /dev/mmcblk1p1 "$TF2_PATH" 2>/dev/null -} - -repair_tf2() { - FSTYPE=$(blkid -o value -s TYPE /dev/mmcblk1p1 2>/dev/null) - case "$FSTYPE" in - vfat|msdos|fat) - command -v fsck.fat >/dev/null 2>&1 && fsck.fat -a /dev/mmcblk1p1 >> "$LOG_PATH" 2>&1 || true - ;; - exfat) - command -v fsck.exfat >/dev/null 2>&1 && fsck.exfat -a /dev/mmcblk1p1 >> "$LOG_PATH" 2>&1 || true - ;; - esac -} - -ensure_compat_path() { - if mountpoint -q "$COMPAT_PATH"; then - return 0 - fi - if [ -L "$COMPAT_PATH" ]; then - return 0 - fi - if [ -e "$COMPAT_PATH" ]; then - mount --bind "$TF2_PATH" "$COMPAT_PATH" 2>/dev/null || true - else - ln -s "$TF2_PATH" "$COMPAT_PATH" 2>/dev/null || true - fi -} - extract_payload() { - if [ -x /tmp/nextui-h700-unzip ] && [ -x /tmp/nextui-h700-fbsplash ]; then + if [ -x /tmp/nextui-h700-unzip ] && [ -x /tmp/nextui-h700-fbsplash ] && [ -f /tmp/nextui-h700/shim-common.sh ]; then return 0 fi @@ -71,7 +35,7 @@ extract_payload() { tail -n +"$LINE" "$0" > /tmp/nextui-h700-data.tar.gz mkdir -p /tmp/nextui-h700 if ! tar -xzf /tmp/nextui-h700-data.tar.gz -C /tmp/nextui-h700 >> "$LOG_PATH" 2>&1; then - log "embedded unzip extraction failed" + raw_log "embedded payload extraction failed" return 1 fi cp /tmp/nextui-h700/unzip /tmp/nextui-h700-unzip @@ -82,6 +46,18 @@ extract_payload() { fi } +load_common() { + extract_payload || return 1 + if [ ! -f /tmp/nextui-h700/shim-common.sh ]; then + raw_log "embedded common helper missing" + return 1 + fi + SHIM_LOG_PATH="$LOG_PATH" + SHIM_LOG_PREFIX="" + SHIM_LOG_DATES=0 + . /tmp/nextui-h700/shim-common.sh +} + show_splash() { extract_payload || return 0 [ -x /tmp/nextui-h700-fbsplash ] || return 0 @@ -105,41 +81,46 @@ find_unzip() { } fallback_stock() { - log "falling back to stock frontend" + raw_log "falling back to stock frontend" if [ -x /mnt/vendor/bin/dmenu.bin ]; then exec /mnt/vendor/bin/dmenu.bin fi exit 1 } +if ! load_common; then + show_splash "NEXTUI INSTALL MISSING" + fallback_stock +fi + if [ -f /mnt/vendor/muos1.ini ] || [ -f /mnt/vendor/muos2.ini ]; then - log "stockmod muOS override is present; NextUI requires the stock boot target" + shim_log "stockmod muOS override is present; NextUI requires the stock boot target" show_splash "STOCK TARGET REQUIRED" fi -if ! mount_tf2; then +if ! mount_tf2 "$TF2_PATH"; then repair_tf2 fi -if ! mount_tf2; then - log "TF2 mount failed" +if ! mount_tf2 "$TF2_PATH"; then + shim_log "TF2 mount failed" show_splash "INSERT NEXTUI TF2 CARD" fallback_stock fi -ensure_compat_path +ensure_compat_path "$TF2_PATH" "$COMPAT_PATH" if [ -f "$UPDATE_PATH" ]; then - log "install/update zip detected" + shim_log "install/update zip detected" show_splash "INSTALLING NEXTUI" if [ ! -x "$TF2_PATH/.tmp_update/$PLATFORM.sh" ]; then UNZIP_CMD=$(find_unzip) if [ -z "$UNZIP_CMD" ]; then - log "unzip helper unavailable" + shim_log "unzip helper unavailable" fallback_stock fi if ! "$UNZIP_CMD" -o "$UPDATE_PATH" ".tmp_update/*" -d "$TF2_PATH" >> "$LOG_PATH" 2>&1; then - log "updater bootstrap extraction failed" + shim_log "updater bootstrap extraction failed" fallback_stock fi fi @@ -157,6 +138,6 @@ if [ -x "$SYSTEM_PATH/paks/MinUI.pak/launch.sh" ]; then exec "$SYSTEM_PATH/paks/MinUI.pak/launch.sh" fi -log "NextUI launch script missing" +shim_log "NextUI launch script missing" show_splash "NEXTUI INSTALL MISSING" fallback_stock diff --git a/workspace/h700/boot/build.sh b/workspace/h700/boot/build.sh index cd0a7e7e7..093db0f04 100755 --- a/workspace/h700/boot/build.sh +++ b/workspace/h700/boot/build.sh @@ -6,9 +6,10 @@ TARGET=dmenu.bin mkdir -p output ${CROSS_COMPILE}gcc -Os -s fbsplash.c -o ./output/fbsplash cp ../other/unzip60/unzip ./output/ +cp ../shim-common.sh ./output/ cd output || exit 1 -tar -czf data fbsplash unzip +tar -czf data fbsplash unzip shim-common.sh cat ../$SOURCE > $TARGET echo BINARY >> $TARGET cat data >> $TARGET diff --git a/workspace/h700/check-settings-ldd.sh b/workspace/h700/check-settings-ldd.sh new file mode 100755 index 000000000..1b6fcbf6f --- /dev/null +++ b/workspace/h700/check-settings-ldd.sh @@ -0,0 +1,39 @@ +#!/bin/sh +set -eu + +ROOT_DIR="${1:-$(cd "$(dirname "$0")/../.." && pwd)}" +SETTINGS_ELF="${SETTINGS_ELF:-$ROOT_DIR/build/EXTRAS/Tools/h700/Settings.pak/settings.elf}" +H700_LIB_DIR="${H700_LIB_DIR:-$ROOT_DIR/build/SYSTEM/h700/lib}" + +if [ ! -f "$SETTINGS_ELF" ]; then + echo "missing settings.elf: $SETTINGS_ELF" >&2 + exit 1 +fi + +if [ ! -d "$H700_LIB_DIR" ]; then + echo "missing h700 lib dir: $H700_LIB_DIR" >&2 + exit 1 +fi + +export LD_LIBRARY_PATH="$H700_LIB_DIR:${LD_LIBRARY_PATH:-}" +ldd_output="$(ldd "$SETTINGS_ELF" 2>&1)" || { + echo "$ldd_output" + exit 1 +} + +echo "$ldd_output" + +if echo "$ldd_output" | grep -q "not found"; then + echo "settings.elf has unresolved runtime libraries" >&2 + exit 1 +fi + +if ! echo "$ldd_output" | grep -q "libgio-2.0"; then + echo "settings.elf is expected to link gio-2.0 on h700" >&2 + exit 1 +fi + +if ! echo "$ldd_output" | grep -q "libglib-2.0"; then + echo "settings.elf is expected to link glib-2.0 on h700" >&2 + exit 1 +fi diff --git a/workspace/h700/install/boot.sh b/workspace/h700/install/boot.sh index 316a41185..3ca45ef07 100755 --- a/workspace/h700/install/boot.sh +++ b/workspace/h700/install/boot.sh @@ -10,71 +10,30 @@ SYSTEM_PATH="$SDCARD_PATH/.system" USERDATA_PATH="$SDCARD_PATH/.userdata/h700" LOGS_PATH="$USERDATA_PATH/logs" INSTALL_LOG="$LOGS_PATH/install.txt" -DEBUG_KEEP_NETWORK_PATH="$USERDATA_PATH/debug-keep-network" -DEBUG_WIFI_CONF="$USERDATA_PATH/debug-wifi.conf" +SCRIPT_DIR="$(dirname "$0")" +COMMON_PATH="$SCRIPT_DIR/$PLATFORM/shim-common.sh" -if ! mountpoint -q "$SDCARD_PATH" && [ ! -L "$SDCARD_PATH" ]; then - if [ -e "$SDCARD_PATH" ]; then - mount --bind "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true - else - ln -s "$REAL_SDCARD_PATH" "$SDCARD_PATH" 2>/dev/null || true - fi +if [ ! -f "$COMMON_PATH" ]; then + echo "install: missing $COMMON_PATH $(date)" >> /tmp/nextui-h700-install.log 2>/dev/null || true + exit 1 fi +SHIM_LOG_PATH="$INSTALL_LOG" +SHIM_LOG_PREFIX="install: " +SHIM_LOG_DATES=1 +. "$COMMON_PATH" + +ensure_compat_path "$REAL_SDCARD_PATH" "$SDCARD_PATH" export LD_LIBRARY_PATH="$SYSTEM_PATH/$PLATFORM/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" export PATH="$SYSTEM_PATH/$PLATFORM/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" -cd "$(dirname "$0")/$PLATFORM" || exit 1 +cd "$SCRIPT_DIR/$PLATFORM" || exit 1 mkdir -p "$LOGS_PATH" echo "install: starting $(date)" > "$INSTALL_LOG" log_install() { - echo "install: $* $(date)" >> "$INSTALL_LOG" -} - -read_debug_wifi_value() { - key="$1" - [ -f "$DEBUG_WIFI_CONF" ] || return 0 - sed -n "s/^$key=//p" "$DEBUG_WIFI_CONF" | tail -n 1 | sed 's/^"//;s/"$//' | tr -d '\r' -} - -connect_debug_wifi() { - [ -f "$DEBUG_WIFI_CONF" ] || return 0 - DEBUG_WIFI_SSID="$(read_debug_wifi_value SSID)" - DEBUG_WIFI_PASSWORD="$(read_debug_wifi_value PASSWORD)" - DEBUG_WIFI_IFACE="$(read_debug_wifi_value INTERFACE)" - [ -n "$DEBUG_WIFI_IFACE" ] || DEBUG_WIFI_IFACE="wlan0" - if [ -z "$DEBUG_WIFI_SSID" ]; then - log_install "debug-wifi.conf present without SSID=" - return 0 - fi - - log_install "connecting debug wifi SSID=$DEBUG_WIFI_SSID IFACE=$DEBUG_WIFI_IFACE" - for attempt in 1 2 3; do - nmcli dev wifi rescan ifname "$DEBUG_WIFI_IFACE" >> "$INSTALL_LOG" 2>&1 || true - if [ -n "$DEBUG_WIFI_PASSWORD" ]; then - nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" password "$DEBUG_WIFI_PASSWORD" ifname "$DEBUG_WIFI_IFACE" >> "$INSTALL_LOG" 2>&1 && return 0 - else - nmcli --wait 20 dev wifi connect "$DEBUG_WIFI_SSID" ifname "$DEBUG_WIFI_IFACE" >> "$INSTALL_LOG" 2>&1 && return 0 - fi - log_install "debug wifi attempt $attempt failed" - sleep 2 - done -} - -start_debug_network() { - log_install "starting stock network services for debug" - rfkill.elf unblock wifi >> "$INSTALL_LOG" 2>&1 || rfkill unblock wifi >> "$INSTALL_LOG" 2>&1 || true - systemctl start NetworkManager >> "$INSTALL_LOG" 2>&1 || true - nmcli networking on >> "$INSTALL_LOG" 2>&1 || true - nmcli radio wifi on >> "$INSTALL_LOG" 2>&1 || true - connect_debug_wifi - systemctl start ssh >> "$INSTALL_LOG" 2>&1 || - systemctl start sshd >> "$INSTALL_LOG" 2>&1 || - /usr/sbin/sshd >> "$INSTALL_LOG" 2>&1 || - true - ip addr show >> "$INSTALL_LOG" 2>&1 || true + shim_log "$@" } show_progress() { @@ -86,11 +45,7 @@ show_progress() { show_progress "Installing..." sh "$SYSTEM_PATH/$PLATFORM/bin/governor.sh" performance 2>/dev/null || true -if [ -f "$DEBUG_KEEP_NETWORK_PATH" ] || [ -f "$DEBUG_WIFI_CONF" ]; then - start_debug_network -else - systemctl stop NetworkManager 2>/dev/null || true -fi +systemctl stop NetworkManager 2>/dev/null || true killall brightCtrl.bin cexpert 2>/dev/null || true for pakz in $PAKZ_PATH; do diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy index 84e88f0b6..7f89a189e 100644 --- a/workspace/h700/platform/makefile.copy +++ b/workspace/h700/platform/makefile.copy @@ -9,6 +9,7 @@ $(PLATFORM): cp ./workspace/$@/boot/output/dmenu.bin ./build/SYSTEM/$@/dat/ mkdir -p ./build/BOOT/common/$@/ cp ./workspace/$@/install/*.png ./build/BOOT/common/$@/ + cp ./workspace/$@/shim-common.sh ./build/BOOT/common/$@/ cp ./workspace/all/show2/build/$@/show2.elf ./build/BOOT/common/$@/ cp ./workspace/$@/other/unzip60/unzip ./build/BOOT/common/$@/ cp -a ./workspace/$@/other/sdl2/output/libSDL2*.so* ./build/SYSTEM/$@/lib/ diff --git a/workspace/h700/shim-common.sh b/workspace/h700/shim-common.sh new file mode 100755 index 000000000..8829e8876 --- /dev/null +++ b/workspace/h700/shim-common.sh @@ -0,0 +1,56 @@ +#!/bin/sh + +: "${SHIM_LOG_PATH:=/tmp/nextui-h700.log}" +: "${SHIM_LOG_PREFIX:=}" +: "${SHIM_LOG_DATES:=0}" + +shim_log() { + if [ "$SHIM_LOG_DATES" = "1" ]; then + echo "${SHIM_LOG_PREFIX}$* $(date)" >> "$SHIM_LOG_PATH" 2>/dev/null || true + else + echo "${SHIM_LOG_PREFIX}$*" >> "$SHIM_LOG_PATH" 2>/dev/null || true + fi +} + +ensure_compat_path() { + real_path="$1" + compat_path="$2" + + if mountpoint -q "$compat_path"; then + return 0 + fi + if [ -L "$compat_path" ]; then + return 0 + fi + if [ -e "$compat_path" ]; then + mount --bind "$real_path" "$compat_path" 2>/dev/null || true + else + ln -s "$real_path" "$compat_path" 2>/dev/null || true + fi +} + +mount_tf2() { + tf2_path="$1" + tf2_device="${2:-/dev/mmcblk1p1}" + + mkdir -p "$tf2_path" + if mountpoint -q "$tf2_path"; then + return 0 + fi + mount -t vfat -o rw,utf8,noatime "$tf2_device" "$tf2_path" 2>/dev/null || + mount -t exfat -o rw,noatime "$tf2_device" "$tf2_path" 2>/dev/null || + mount -o rw,noatime "$tf2_device" "$tf2_path" 2>/dev/null +} + +repair_tf2() { + tf2_device="${1:-/dev/mmcblk1p1}" + fstype=$(blkid -o value -s TYPE "$tf2_device" 2>/dev/null) + case "$fstype" in + vfat|msdos|fat) + command -v fsck.fat >/dev/null 2>&1 && fsck.fat -a "$tf2_device" >> "$SHIM_LOG_PATH" 2>&1 || true + ;; + exfat) + command -v fsck.exfat >/dev/null 2>&1 && fsck.exfat -a "$tf2_device" >> "$SHIM_LOG_PATH" 2>&1 || true + ;; + esac +} From 3d47db5fd3fc9c6acaaed27226f7de48e4d46dd6 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 20:23:59 +0200 Subject: [PATCH 32/76] feat(h700): port Bootlogo.pak from tg5040 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the stock Anbernic boot logo with readymade presets, like the TrimUI pak. Mechanism proven by the old rg35xxplus port: bootlogo.bmp (24-bit BMP at exact panel resolution) on the vfat boot-resource partition mmcblk0p2 — vs mmcblk0p1 on TrimUI, now a per-platform BOOTLOGO_PARTITION define. - presets keyed by panel resolution (640x480, 720x480, 480x640 rotated for RG28XX, 720x720), folder picked via $DEVICE; full tg5040 brick catalog regenerated as 24-bit BMPs per size (23 presets x 4) - stock logo backed up as original.bmp in the preset folder on first apply, so it is always restorable from the carousel - aspect-fit preview for presets larger than the UI screen (RG28XX portrait logos); shell cmd buffer 256 -> 1024 for long preset paths - build: bootlogo gated to tg5040/tg5050/h700; ledcontrol stays tg50x0 - docs: TF1-write-policy exception recorded in 02; 01/03/08/09 updated The one sanctioned writer of stock partition p2, on explicit user action only; installer and boot shim remain write-free on p1-p7. Untested on hardware yet (08 matrix row added). --- docs/h700-port/01-toolchain-and-build.md | 3 +- docs/h700-port/02-boot-and-installer.md | 7 +++ docs/h700-port/03-platform-layer.md | 7 ++- docs/h700-port/08-testing-status.md | 3 +- docs/h700-port/09-roadmap.md | 7 +++ makefile | 4 +- .../Bootlogo.pak/480x640/Atari Bootlogo 2.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/Atari Bootlogo 3.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/Atari Bootlogo 4.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/Atari Bootlogo.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/DS Beta BIOS.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/DSi Beta BIOS.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/480x640/GBA BIOS BW.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/480x640/GBA BIOS.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/GBA DK 4x3 Black.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/480x640/GBA DK 4x3.bmp | Bin 0 -> 921654 bytes .../480x640/GBA Health Safety.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/480x640/GBA Logo BW.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/GBA Logo Pixel 2.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/GBA Logo Pixel.bmp | Bin 0 -> 921654 bytes .../480x640/GBA Logo Saturated.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/480x640/MinUI Next.bmp | Bin 0 -> 921654 bytes .../Tools/h700/Bootlogo.pak/480x640/MinUI.bmp | Bin 0 -> 921654 bytes .../480x640/NeoGeo Pocket Color BIOS.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/NextUI Helaas.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/480x640/NextUI.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/NintendoPixel.bmp | Bin 0 -> 921654 bytes .../480x640/NintendoPixelTilted.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/480x640/Sony CE Pixel.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/Atari Bootlogo 2.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/Atari Bootlogo 3.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/Atari Bootlogo 4.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/Atari Bootlogo.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/DS Beta BIOS.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/DSi Beta BIOS.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/640x480/GBA BIOS BW.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/640x480/GBA BIOS.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/GBA DK 4x3 Black.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/640x480/GBA DK 4x3.bmp | Bin 0 -> 921654 bytes .../640x480/GBA Health Safety.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/640x480/GBA Logo BW.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/GBA Logo Pixel 2.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/GBA Logo Pixel.bmp | Bin 0 -> 921654 bytes .../640x480/GBA Logo Saturated.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/640x480/MinUI Next.bmp | Bin 0 -> 921654 bytes .../Tools/h700/Bootlogo.pak/640x480/MinUI.bmp | Bin 0 -> 921654 bytes .../640x480/NeoGeo Pocket Color BIOS.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/NextUI Helaas.bmp | Bin 0 -> 921654 bytes .../h700/Bootlogo.pak/640x480/NextUI.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/NintendoPixel.bmp | Bin 0 -> 921654 bytes .../640x480/NintendoPixelTilted.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/640x480/Sony CE Pixel.bmp | Bin 0 -> 921654 bytes .../Bootlogo.pak/720x480/Atari Bootlogo 2.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/Atari Bootlogo 3.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/Atari Bootlogo 4.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/Atari Bootlogo.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/DS Beta BIOS.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/DSi Beta BIOS.bmp | Bin 0 -> 1036854 bytes .../h700/Bootlogo.pak/720x480/GBA BIOS BW.bmp | Bin 0 -> 1036854 bytes .../h700/Bootlogo.pak/720x480/GBA BIOS.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/GBA DK 4x3 Black.bmp | Bin 0 -> 1036854 bytes .../h700/Bootlogo.pak/720x480/GBA DK 4x3.bmp | Bin 0 -> 1036854 bytes .../720x480/GBA Health Safety.bmp | Bin 0 -> 1036854 bytes .../h700/Bootlogo.pak/720x480/GBA Logo BW.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/GBA Logo Pixel 2.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/GBA Logo Pixel.bmp | Bin 0 -> 1036854 bytes .../720x480/GBA Logo Saturated.bmp | Bin 0 -> 1036854 bytes .../h700/Bootlogo.pak/720x480/MinUI Next.bmp | Bin 0 -> 1036854 bytes .../Tools/h700/Bootlogo.pak/720x480/MinUI.bmp | Bin 0 -> 1036854 bytes .../720x480/NeoGeo Pocket Color BIOS.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/NextUI Helaas.bmp | Bin 0 -> 1036854 bytes .../h700/Bootlogo.pak/720x480/NextUI.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/NintendoPixel.bmp | Bin 0 -> 1036854 bytes .../720x480/NintendoPixelTilted.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x480/Sony CE Pixel.bmp | Bin 0 -> 1036854 bytes .../Bootlogo.pak/720x720/Atari Bootlogo 2.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/Atari Bootlogo 3.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/Atari Bootlogo 4.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/Atari Bootlogo.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/DS Beta BIOS.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/DSi Beta BIOS.bmp | Bin 0 -> 1555254 bytes .../h700/Bootlogo.pak/720x720/GBA BIOS BW.bmp | Bin 0 -> 1555254 bytes .../h700/Bootlogo.pak/720x720/GBA BIOS.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/GBA DK 4x3 Black.bmp | Bin 0 -> 1555254 bytes .../h700/Bootlogo.pak/720x720/GBA DK 4x3.bmp | Bin 0 -> 1555254 bytes .../720x720/GBA Health Safety.bmp | Bin 0 -> 1555254 bytes .../h700/Bootlogo.pak/720x720/GBA Logo BW.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/GBA Logo Pixel 2.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/GBA Logo Pixel.bmp | Bin 0 -> 1555254 bytes .../720x720/GBA Logo Saturated.bmp | Bin 0 -> 1555254 bytes .../h700/Bootlogo.pak/720x720/MinUI Next.bmp | Bin 0 -> 1555254 bytes .../Tools/h700/Bootlogo.pak/720x720/MinUI.bmp | Bin 0 -> 1555254 bytes .../720x720/NeoGeo Pocket Color BIOS.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/NextUI Helaas.bmp | Bin 0 -> 1555254 bytes .../h700/Bootlogo.pak/720x720/NextUI.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/NintendoPixel.bmp | Bin 0 -> 1555254 bytes .../720x720/NintendoPixelTilted.bmp | Bin 0 -> 1555254 bytes .../Bootlogo.pak/720x720/Sony CE Pixel.bmp | Bin 0 -> 1555254 bytes .../EXTRAS/Tools/h700/Bootlogo.pak/launch.sh | 4 ++ workspace/all/bootlogo/bootlogo.c | 56 ++++++++++++++---- workspace/h700/platform/platform.h | 5 ++ workspace/makefile | 4 ++ 102 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 4.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/DS Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/DSi Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA BIOS BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA DK 4x3 Black.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA DK 4x3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Health Safety.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Pixel 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Saturated.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/MinUI Next.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/MinUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NeoGeo Pocket Color BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NextUI Helaas.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NextUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NintendoPixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NintendoPixelTilted.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Sony CE Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 4.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/DS Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/DSi Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA BIOS BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA DK 4x3 Black.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA DK 4x3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA Health Safety.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA Logo BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA Logo Pixel 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA Logo Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA Logo Saturated.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/MinUI Next.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/MinUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NeoGeo Pocket Color BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NextUI Helaas.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NextUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NintendoPixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NintendoPixelTilted.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Sony CE Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Atari Bootlogo 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Atari Bootlogo 3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Atari Bootlogo 4.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Atari Bootlogo.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/DS Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/DSi Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA BIOS BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA DK 4x3 Black.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA DK 4x3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Health Safety.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Pixel 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Saturated.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/MinUI Next.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/MinUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NeoGeo Pocket Color BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NextUI Helaas.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NextUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NintendoPixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NintendoPixelTilted.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Sony CE Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 4.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/DS Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/DSi Beta BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA BIOS BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA DK 4x3 Black.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA DK 4x3.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Health Safety.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo BW.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Pixel 2.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Pixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Saturated.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/MinUI Next.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/MinUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NeoGeo Pocket Color BIOS.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NextUI Helaas.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NextUI.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NintendoPixel.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NintendoPixelTilted.bmp create mode 100644 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Sony CE Pixel.bmp create mode 100755 skeleton/EXTRAS/Tools/h700/Bootlogo.pak/launch.sh diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index d5b8b6292..488a5653b 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -117,7 +117,8 @@ more external deps (e.g. shipping bluealsa, see 07/09-roadmap), not before. `make PLATFORM=h700 all` produces in `build/`: - `.system/h700/bin/*` — nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf, clock, … - (tg5040 list minus ledcontrol/bootlogo, which are gated to tg50x0) plus `rfkill` + (tg5040 list minus ledcontrol, which is gated to tg50x0; bootlogo.elf builds for + h700 too and ships in `EXTRAS/Tools/h700/Bootlogo.pak`) plus `rfkill` (h700 builds its own minimal `/dev/rfkill` ioctl tool — stock rfkill may be absent) - `.system/h700/lib/` — libmsettings.so, libbatmondb.so, libgametimedb.so, … plus the bundled SDL2/tinyalsa/libpng12 set above diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md index 7d8b730a4..4d15d2af7 100644 --- a/docs/h700-port/02-boot-and-installer.md +++ b/docs/h700-port/02-boot-and-installer.md @@ -32,6 +32,13 @@ the user must switch the boot target back to "stock" (or delete the ini) themsel Panel-Fix writes, no apt installs. Both writers of that file (`install/update.sh` and the launch.sh self-heal) guard with `mountpoint -q /mnt/mmc` **and** `cmp -s` so they only touch TF1 when it's genuinely mounted and the content actually differs. + - **One sanctioned exception**: the optional `Bootlogo.pak` tool (EXTRAS, see 03) + writes `bootlogo.bmp` on the vfat boot-resource partition `mmcblk0p2` — the same + mechanism the old port used at install time, but here only on an explicit user + action inside the pak, never automatically. Before the first overwrite it copies + the stock logo into the pak's preset folder as `original.bmp`, so the stock look + is always restorable from within the pak. The installer/boot shim remain + write-free on p1–p7. - **TF2 = NextUI's card** (`/dev/mmcblk1p1`): `.system`, `.tmp_update`, `.userdata`, Bios, Roms, Saves. FAT32 recommended; the shim also tries exfat and `-t auto` as fallbacks (kernel 4.9 has no native exfat — exfat works only if the stock OS has a diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 5d539487a..59e8b4371 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -142,7 +142,12 @@ target), with the picodrive LTO/patch-hygiene fixes noted in 01. ## What disappeared vs tg5040 (as planned) - `btmanager/` (BlueZ-upgrade pakz — H700 Ubuntu has BlueZ 5.64) - `poweroff_next/`, `reboot_next` (systemd poweroff/reboot work fine) -- LED animation wiring (`led_anim`), ledcontrol.elf, bootlogo (gated to tg50x0 in `workspace/makefile`) +- LED animation wiring (`led_anim`), ledcontrol.elf (gated to tg50x0 in `workspace/makefile`) + — bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` + builds for h700 with resolution-keyed preset folders (`640x480`, `720x480`, + `480x640`, `720x720`) selected via `$DEVICE`, writes `bootlogo.bmp` to `mmcblk0p2` + (`BOOTLOGO_PARTITION` in `platform.h`), and backs up the stock logo as + `original.bmp` on first apply (see 02 for the TF1-write-policy exception) - `trimui_inputd` interactions (turbo, gpio 5V export) New vs tg5040: `rfkill/` — a minimal from-scratch `/dev/rfkill` ioctl tool (~120 diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index c8f46261a..d2877b78a 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -47,6 +47,7 @@ | Pak Store install | ⬜ | | OTA update flow | ⬜ | | BT controller pairing + input | ⬜ | +| Bootlogo pak: preset carousel, apply (writes `mmcblk0p2`), first-apply `original.bmp` backup, restore | ⬜ (ported 2026-07-09; needs one apply/restore cycle on hardware) | | BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | | Headphone jack detection | ✖ not wired (05) | | RG34XXSP: general H700 port + 720×480 UI | ✅ user-tested; works like RG40XXV | @@ -81,7 +82,7 @@ 6. `workspace/all/settings/makefile` — h700 block (`-DHAS_BTAGENT -DNO_BT_AUDIO`, btagent, glib) 7. `workspace/all/settings/settings.cpp` — Anbernic vendor/models, h700 platform + capability flags 8. `workspace/all/syncsettings/syncsettings.c` — also restore colortemp/contrast/saturation/exposure/displaycal on resume - 9. `workspace/makefile` — rfkill for h700; ledcontrol/bootlogo gated to tg50x0 + 9. `workspace/makefile` — rfkill for h700; ledcontrol gated to tg50x0, bootlogo to tg50x0+h700 10. Root `makefile` + `makefile.toolchain` — h700 platform + tg5040-image reuse 11. `workspace/all/common/api.c`/`api.h` — `PWR_requestSleep()` (lid sleep) and `SND_quit()` in `PWR_enterSleep` (close ALSA before suspend; see 06). Both are diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index a48875abd..72a56c119 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -84,6 +84,13 @@ Ordered by impact within each section. displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH while at it). +13a. **~~Bootlogo pak~~ Ported (2026-07-09)** — `Bootlogo.pak` now builds and ships + for h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel + resolution (`640x480`, `720x480`, `480x640` rotated for RG28XX, `720x720`), + folder picked via `$DEVICE`; writes `bootlogo.bmp` to `mmcblk0p2` and backs up + the stock logo as `original.bmp` on first apply (02, 03). **Untested on + hardware** — needs one apply/restore cycle on a real device before release. + ## P2 — Cleanup / refactors / simplifications 14. **~~Remove the crash-loop network behavior~~ Done (2026-07-09)** — after 5 diff --git a/makefile b/makefile index 96a4b066f..cfed86367 100644 --- a/makefile +++ b/makefile @@ -105,12 +105,14 @@ endif cp ./workspace/all/settings/build/$(PLATFORM)/settings.elf ./build/EXTRAS/Tools/$(PLATFORM)/Settings.pak/ ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) cp ./workspace/all/ledcontrol/build/$(PLATFORM)/ledcontrol.elf ./build/EXTRAS/Tools/$(PLATFORM)/LedControl.pak/ - cp ./workspace/all/bootlogo/build/$(PLATFORM)/bootlogo.elf ./build/EXTRAS/Tools/$(PLATFORM)/Bootlogo.pak/ ifeq ($(PLATFORM), tg5040) # Limbo fix cp ./workspace/$(PLATFORM)/poweroff_next/build/$(PLATFORM)/poweroff_next.elf ./build/SYSTEM/$(PLATFORM)/bin/poweroff_next endif endif +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) + cp ./workspace/all/bootlogo/build/$(PLATFORM)/bootlogo.elf ./build/EXTRAS/Tools/$(PLATFORM)/Bootlogo.pak/ +endif ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700 my355)) # Audio resampling cp ./workspace/all/minarch/build/$(PLATFORM)/libsamplerate.* ./build/SYSTEM/$(PLATFORM)/lib/ diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 2.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a8d4f0b47503b6c80a755424299ab1fc53468b5d GIT binary patch literal 921654 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 AdH?_b literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 4.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo 4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7835dc48ee3dba7c46300ea90110b6b7372064ca GIT binary patch literal 921654 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Atari Bootlogo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..16d4256607ed2b3a2600ef0e0fe10aa8506b1495 GIT binary patch literal 921654 zcmeI*3tY~3}t!U(CHM(KdtlCVezkxr;Y2Zxbx z?~ky9v0;C6Xq)}UJ)6^<&n87CE==G*W+_rU44(w@AvV(KabD%`}usj zI<E16aQ-_{&!p|k<64yBvQ$9hOZ?O@%OL9B8LC*K>z^+5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ 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

$a2mywX4Wis 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 z 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA DK 4x3 Black.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA DK 4x3 Black.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f9b7e69c68edb1876dc8aa3c33ea0689cf82e68b GIT binary patch literal 921654 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

?OHsq5_jw8wCC+?2vcSA;xEY__TFbz<$12F})N? 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]|bDQVY) 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 z3TyaZQI=VSL9VB${x@+>_&Z2|1V}&;$PG0qU3o|e7DL5QX{kvczlTj zNPq4+Mkdl5drngmFI1o|dm1(Wmtj}p*u zok0!;jbbA5+H%?2so7I zOaZ#>nD7A!kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011%5jtTsK D;&}O- literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA DK 4x3.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA DK 4x3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6eaef4836bb8d1239fbd1b7e2c74a45891629a61 GIT binary patch literal 921654 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


t~InDQ6vxgM(iIqZfaBPYw3yOyL+1lg;f)8t{ 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Health Safety.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Health Safety.bmp new file mode 100644 index 0000000000000000000000000000000000000000..75227ae77cbf47c9f3220caf00724a0341bad55e GIT binary patch literal 921654 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

u2#65iW=@t43D+yXI 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%0D(htEt7@ied(0tyoVxRD9M>kOYc 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 z1Hto9V*rCT(2?`>gqc?)T^U~!k9NRRocMgnd%WQn9tB8&~jg46{mwJAxJ91=Jrb#6ccBtQZ~6Y%>pdMT^n zC+OZhbW>pOkidgqU2)=GQ~^c7&*$=<-(C}2<*Y(&Pe#r|bLSQ$KmsH%6oC=?bKj7_ z{Pu#>rc@g8P?-5U36KB@giT;%{@gnxFnc-7c~{*ol>J1(PoL>ibv-#`JM5>x9Y}x# zNT5G~Vfu6EA%Xo5%QYlG0wh2Jqa-j)f98@>`E z;)r!@t=hJ;ZdYP;Qes77a#b>C2@Dr3w205(t-o-=8tjiLph_5{Myz$2cS~T#nqH1W14c z#+rcNpFfxUdCU@cclHVl2~4g_#za&&l^zeM=ZYQcGxK;PKmsH{0>dKU^0_c4Y`58s zR0gxn!$QW5NPq-LfCNZ@1W14cCNTjdI&`jM5;NeflK=^j011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg r011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^ox5CZ=nJ5-Gs literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Pixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Pixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8b98fcd93be9db4e0c9d0b6453eb494f284fbcde GIT binary patch literal 921654 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 CBy@`a literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Saturated.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/GBA Logo Saturated.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0a28d62124090fc2eb5ed83e76d53da834d93fd0 GIT binary patch literal 921654 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

^Kk)M&8*+a1>LcC~V!5zvJY7 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZpv?sS EADA{OwEzGB literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NeoGeo Pocket Color BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/NeoGeo Pocket Color BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..acaf07d5696e678e9fbd36bd41e60b1df79f6484 GIT binary patch literal 921654 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 z z1sF@M4Kwrpb2D(w!9tl!(!q?sA+%*dm<3u6)#Gi0tTM0<=LUp!;55nhP5q~ESxm(d zv2Bo*+2cT zaWH7n9UznXcrv4g(KO>EZeyh$F1|o3>$j>G&Mf&C2nI%uS`$8vN3EG(Ps#ZP)oya` z<4HMpW)=Oe(fo@tjbP3dI?gd4HCsQ52(peF<0

`rBD2 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 2.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1085127779a4fb32971bcc3e6625df453cf1c6cc GIT binary patch literal 921654 zcmeI*37izg+4%9@+1Z0#Bpy*Dd5s#6H!1?rXjD+6a>ykhf(VMpA*h@hRPH0lC5V6$ zP7%;3A}U5jk|^R4{fml{L-7O^5eX7R@Wn*=KXb6OJJU7YU0u^XJHP$ZyKirI*Hce@ ztEy{v>8uyFKJ(yO1+kAa<^O&m|2H~PP_VJEprEke$k^$E0=fR8+!FggJ`g|v0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 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 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmdV) F{|~gJh|>T7 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 3.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/Atari Bootlogo 3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..53835b80b18c18a7cd5972f3c41aec71984099d8 GIT binary patch literal 921654 zcmeI*2bf)DnKQVgo`kg@hyoLqZER z0-*+2rB_j!VnKuj6a`U1K_V!qxU%`b_nw)PGw05nd+*Gh%w+iG`8dxh-}ip+`#aw~ zCo>t6jkaEAl}SydU+ctwtH*!GH#apsF|Mg;T+^FMr<wFM>yx~I6IFyM-YHVG1XLKex;#uWZ?46g-DZg+}NnWX|t-8vj30<$5*cIDox!*JWJ{+A%j#O63yxA37UbmYhKTLJVUZo$Yiv2kGx!pHCV7HB9yYJ2$mVd%( zT=Tfnuh@?>aXwaisn72Dv7g;-ljO4y+rfQci*Kl_1PBa5AbsZCdFgTYe{04M{(Jfl ztF<3}^MuFmIOU1&%zylj`M->s)^(?bGSNtlT`3AIPI9E^(s_GU?2;+T$7*7C`KK(}TI0tUVn28FwXcbvu4?P* zY>(}0U((S0IH9YfwWYbOr8%}OEzPy0Q9N%NIi4*ME$Lh}Y)qY|5h)F&qJHNcj-2}~ zYA6$p)YyIt8R+EbOmd{M%Flb@;mOCUXAzeFSUUFmuIIzAJL|w}7na%$XCHLsg3r9+ zwG$?GcTVc=jO~Q3&Ln1)$OGLT=Lry4Ap+?q^rrI;x%-kYerNF!->tbt=NJ-?g+XLm zJZ};?QtJ0TSmSh&*x)J}Xx~q_q&)$6A z{Z{%Ct{{r+9HcyD|WS~dOj$#BgX``o_hfXc{m zGA`Br{*6gv>PR5TBvOjRBE8DU0CWn#_)^cRlCE-hA%~p<3rRlHW#`0Cb>$0zzPwF*UeS)ce(NGJ+EK5 zN5AdbGxoUljNSWf*PXe?U5od-yWH-*^fR}fx7Ya2(#xxsUor2JdAr1nm679QTuR=9 zwStMO(?h5tup?C6L-8~ z-Y%EU{X}dpIB|!LthXe==hd_Kt2WqQK=s17c#+T07{Nh=g zCGD~~oA=wUnEUZ>oUlne%4*CodPe^kRT-^;p_1Tf@=-{X6GaVFZ=5g4ziQ6io$>b= zjq7R6$u}1Z;`O=I(%d_+Wn9D=G)~nd3+_?Xu`7FleZ-rZqTaKP-{8U-8-HW^M$s-f zVdKl@Y?fV+*_CtNw2g;CS3EX?$KqUk;%2dp{lvMoyq01=x!RM=iJP7`b))m9ZWwLR z^o`Cq_G7Q)3>_(q>uO8 zmYlrB1v56S{nH&iqkoL5jMl(VN$^NJ$v+B-a-yigsTSuPZ_L4k?RQi}8yrq?lEwF^ zc}|d|f6I=-^_+}NBF8KRCFCY`NPxh|3dD~#ZNKr`Ke72cci!wB z(RSP7o##*a@I@zli^Fel&9-hB3P>y{Q_X3Zq4@uCwxx@c-0E2n_2Dtq=*mVDNdC6sPs z^`@V}WF_~m=XY$s@!Q&3LpYhXe?$c!AT8eBYue zYo2%f8l`sJ8s{AQ{-nj>Xb9F)A6J-6o-mpH~q)ohT;FhKiKZ^di+rIMU8mF=)nuoXu zFd_o+hfVP$N!q0Nupjy_r+x8X7aZ}gryfz-&OP*>PdcR3PCoRXXMFB0@jw_T$+&b< z@7NfaZ4odo6_1VJF-0<0OqwPTV`HDw6~=5 zX7i8zswL#&7ic7~Uq9?E$)quRTJ(vY(SJA=e{RJ(BtT$f1=?DgrXJWe`>?JPKi|`4AKo2p&f(oB zeW82$!QGj^CqAEPT*{4I9^|mDxKungg2xmwQ8Ht0Y$P@uzdGB-o&M#wEIQ_`=T0uS zqu(;?u`s^zmyk=ZKqJD&Eax8mmSobHJ#vUlauL$Qf>2en8uJCFO6ks&1IN$F zEa3DeR<%kaBs)W4&xOhzwzrNu^Q&*Y;Mjj&bWD{NeWGXd&qZ)ZfWTN1h#&Wea>lo} z-*ohs?wT_BJI5dO-Q$n`ZfRR;aTq7#()hOI?{Mz(KuI8HKb8hBjU#_ zF;~nO^TzCvL%%=SRW(%4O&K_=F5PR6C^5Y;7}(=tbDY??shcE-OjyYBLHv)80C`-%9?PHtf3 zVNIb1xG9y<%4fz-feFrpj_y}ZeRA2k&o4Xs56jMeZrNGSrHeMZQ@nt4R>Q!ao53Lg z0tA)|^geUCo|<{zizh$w{7DbKaMD9*i^Dh>m%7`#VocIG9XwKF(*%aHQ~Fynn#Z*^ zH^+8TXV=s9m!F%x7LAxC=1S*{om`OQu$E8*-IO$71WzX#O9iGlznOmD3nxAD-0TOJ z&VDFbx@faI#S1vKY9M=;;a5l9`HQc9`>R+-}C5~Zkg0Ep|!cCtvUWm_?Bo1LOS-5FWvIn$@fO*Cy%-- zZRN4|#-#`z{gckIlSD{DMc4=)Q$**OE+&nsBY{XG&O}PNu?@$sp@e?QPfEybD=SJV zVrL+Yek-aWtA1by8)~H~aG;fwb&mZ(FQf*t_j@m#BtU>bRv>xibhmXqbL@RDPk-da zsSmz1^`V!hKKPrX@BZ~scRzXbT~8nLy?BRahot-I^Xkzr-TKrq-;2(_j#0fW4&!88 zDt?DX@R*`B_NcpK(wI6Dh%_RZNGTGF>5_@kc^kM>wS_TcF`#@{Mc>)9oqyot^Cw`jc;17T5i1qh7e7$|5efeYiKXk}7 zKl}WRk9_`ypC5M9g9l%8$OrZ~V69Iau+}c0TWgnn*W97Cx%9Uyr_ZbV54`%Z!)}hw zk7imN#>u#pegDS57#=|)R0NE$5j>`d&M{p~8dE1ZL^6?5B$iH;=G?%Y;u4~qT=`{$ zaOk)7sVGYk`~7MRR7i1F4Ggss6*$n!DLdcz=%F_x?U6%E3n>=WAQn;s*$29_&J!R& zpsK)KpSs|I{g(V_pUb1&zwZ^lI{4-%54q)6hurepLvMTJbJujWmcON3{%2jrw|3tB z=?fm%x77K^nHGm}GA>1jm~LFTa}12(5hOyD0v>#G1W#s(>0;8Vi8Z!E^5?Gul@R4* z%a4SswzQ%wMG~ivMqwGnS><7e5NhQpuyEz{IPZJ;Pxf6B?f!k2JouTb?)mhEg)04D zY#@986F5tN0D=Al;_Hj}6U_1-Vzy3fpK#A!7d^1wl|SD1ig-W9_P)I@y>IVJzQ6aS zKicQA?|gDm_LUm@@woeGZ|CTrv=|j9<5I43438iYDgs8>bc&cRCXK1Hne>-wBhRIe z+{92oM-hptGgpx~)$B_I797w(V)T z7ANCUbcn&p_v?nE^MIKR&xL{#a^(-@FiTfU9R*o6Fw{^g%8hMcR@qRsEVJvkI(gO3 z*G_EjO4@|BuHt^;a3alEth}Xl68--yjN{5+FdJ zsz5w~E?oP_D?jwLE7mbJYwR+o7P|C_kR<7k%*P+FSI`p(Te| zx?1ut$f|*%Mt^}-mswK6B_BNIk`GRfcGxw)5V3(53JC!o}}8yxa~u z``->ctK81{w}TeE{WHnaEPXJ>nK++x$Zo54j<6TM>#$^&m@X!bsk51^nEfcHxP-QG zwf+&Kb9 z*a)7?64S+`G4+aQ1dM?-CNQksqJ$~kTg{rV{mcp5B`qx^TS6^4RBEI# zBYw=1&{WM*?Fp~nDS3&c@838R=jW`tTdoy!?hUnb1WzZ5ojysdsDmiyn2B3X zo3!neN!vu5I%%6ZtL~cAk}aW@bRtw=ja?&J5;o$;ED7D9LM`VVL{?*Mb|E$o~NRr8l8RdXI(hxTzT@!;(k*B0AV+9&l#( zJ}~9kXg`_q%tOUa~poC=U+uE|GNOOA7|ox(jj_A{}`3Gs;9tw8pW_fi9F+_mA$~!>L*`&=9ee_ z?PoJy4Ebp3I!tzAHAef{%opPo9A5<&zkh35&-Jjsnx7$RCqQ6u0_nr;Rr>xdzxd(} zwRFL^F0lb$3h%&*aoOWoZ2H+>8D`3+>>o05j|{vF)o!YBd+8YqxHk$S$kIN`+Stw>f!ja;AzkQ&$Q=%cEX>3c6dhR>6 zu4Se(0RjZ73M5aY@oimq9r(+i9QN!F4}Cheu^(q*Z1M%*@~fYJ`bVGtUD|&5`NGb* zP^05%man(2ii$heQ(%2*3}58rAKp#x{^%|+eyTZsU)0?`A-1pUe#6}dK3-a}_2fK! z>{UN#IuIa0ASaMMk?ua|@dpn7L%dsK8~eHUZ_m}ke)r?UexJ4<9ah*m7pk6@NG{0+ z9_H(WQ2zhW3_@LF7Dq>@l&8k5(J009E2K>9?wVY~b9-1!&Z-s#cU#(wVon_j(Rr=O**YUj#O>AWMg zQ(13XPV7{zsA}gL>l#EF!xuU3b?x_e_|jMbk%y1H#^iM)K!89-p!9c4cD9Va;=|v) zZv7vBYrXqo8~br4&L_{S^y)S1-FMA;KghJA&bd&fV58z!pL*-6sJL^T1=f+q@I|ic z{tjOnD=_l#v5$(yEeQeyRw{v>C(@FS+b2|t;M(d#tt80pL*-6sJL^T1=f+q@I_AFzqQ=o;Y(u$Mjk%);ajmH6Cf~F1&i8kw66AcX>HcT2yq^n)fVz z->tdde#DtLA6E;?ud~1^X=Gs=8+ptZSV%W~?8CQWMJ7OCEDLlrcb@kz*Ix3r+b??C zEwPRLI1>dYUmvAc7r*V+Tr23D3pJ|vs#et2+@2;J`w332_BhOzpZ2ePr)nC>U8p@^ z+OulpF<)Q-T~(Zdv8k{f0t5&&L?9kG=l|<u3npH6&ctgLPWRK@2viZF&_H$R$Q4t~HBvykcFlEohkHakN;3AK`0$ZBfT3UKqSIfj?#SVgQ z_}B+=rwk!L;8iXVPoz_t7M;~}`58@@#5VSmcS`#HO|G8VbZM>?bk2nuRl@Ow?fKo; zUD|!e#of0@TikWqnN63Sk*O}~%C@xXa-Ykhe=;y4M4X5=xav~&G=931g&jojF<)Sq z%xgM7lv1&Drz+j>u@B--8A5=-t5~4)6Db`nT?;q*(FL15dj6&l$2RukOq@^t{^#`S zqD>!OwCN+6R@6Bcs?HxG8r~by+SIyb+fLiG?Y4EP?Ye#Er_R~vfp2UUrKJVNPPQdg zKOB9cXY`LzF*YJZoQPI`x_#I)^Y%=Xy$ge&8(RgItXf;zw_ES1oi{vgrwvMNmkp+# zyXk}9*!0oNYOIBBc-iY;21XDd@M;z)J&`&)x))9R-^)*0cFBp$VjKH$CeA1C-}LIG zvzFyrLFZhkLA*p(++AsJS~TtNQA@76%ENNKe{Wj;!&!sQu@CzI6ZPDM2GFhC1(vMF zcTBi)`m!76F1vnqsa-dF*<}^0F=5QE$qKp^%RcDUVITnluL^cz+WJ%tFkviJC7w-SZ3l4te`~zQ(ZS2RHIN$UA=iaM}4tjafL4VJ*qRzQc zgL{b#|1IfLeno-VVq?Egy+f<0c-|E@(Wox4^aEF=)*jogj#ZK+I<$MV!q|s@<(h#2 zft6k$^F%tN{Qf;;fcNhquPi$F804le)9P0`Tvi4ub#EzOK0u)mrN__oC{U)BpiC?4T;dF{E7mz#m0W0dWT+7TTAEs zZA0C%1q0oSn<>-<@Axuzkh*w|w=i zonAU?r@v&{OEF}i&ZYNn=IUsDn)NBaqQGpiv0qa~?JZp$E#1}Hgy=A_;|-w~N)_|= zOcWi;aY~(wTTD8@GHrZ;15A`VT|94bfjv0$wtafxjxV0E!}DkC@ItiA!s~lqb}rqT zQ+N2of*qb+u){N_?YMOAHovO!{w-u5U~H~HhXe=^7@|P=IoZ-ZcfF@i-{_?U8@>?R z*pH`u#O?X|xA*F)8@_PrhJVVmqRzQcqx$_jV1e0UW4}+m6&3YJ&iwE%zP|o5bJu$+ z7>nD<>;3N34RTXt4mbEybSREczWP*57n3HpY@n>7XWZF}JD8cSbZ3hTtZSw9Sy%nf zTUcNfoaO8Ah0`~DY3};Jn-srSY3=T4olxEu{%&Nz+ugwO>$1|B0D)JhK<{(%V^5#4 z@k^&}^g?XseyrmCTfTbQMlYPU(VsG{sB$ zc*@$(XIfF`T&Rk-)hMCwQ+`E(*Qch6qyH}lu|)4a8phCmH1H^uV9 zd22sk!|<45X-pTB#?)ogQW}|G4J*cRv@~nX6a4f6G_rzWcek?_Qc| zMV)h@D&AI=nT*JpKIK;wm@PK;`_x-eQC*>Ok%w~Fz^sZx)pdi0TjRNz@BYoqcmF!t ztoJ-M<=-Ez@BLfDdak&?b(OC(0RjZ73Y4FdxWLi<@T&U6dH0vq<_*Ea9`NrR!@W$Vs@W!X2Woj(do1BcR(I?%+-EBbG2tOt*CP@ zRK5nC{^#i8dsHl0y=FZK z5Fk*GK+hBDxUOH!=zeBe_fxTr{oL2T$<^uIPfhQBI@5|e=R#Gy7wXAz82gsWZyDFN zVb@`sc7J7)?k`2#y!)sr-A|s-{rhR%PscX)<4kfX`b5v@U(TpBHuI~GWQA4Mt+D%k z?m~rg0}IU5T79=@-pmrJiDH1e5dRES%#yb1IVCu;wrg3>6_T~Y*M|TB0<{a2o|ElO zUB@&%KE3G=Q<{Dk+t`mYalYs0uX?XeZTj8Rrr&2;QRiH!mFsDCOw%tj8o#VfvyWtj zRo1Ps`+e?0jn0EAur`LmUdg<5;v@yucozz%Prm;(ZS3dXzsc3fO+TO9^jM}9b(`<=H=oSp(}y9d#Q52xO496N^zL0v96qRV^`SWP?D@`>`*!nMPn%Q=EfGM zk?ZV`009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 n2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkKcWCZ>{!$ud!i4L5&&#>Agx*1f;4| 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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 z 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 z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU M0SQRpfD!or0dgD@VgLXD literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/DSi Beta BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/DSi Beta BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ee9bbecd856dd3d0ff302263abc8f9ee0b70addb GIT binary patch literal 921654 zcmeI*TeBrsK?m?Xgh6m99IKdQDxrkPB$69M!Yx!u2@k&cA>=b?X^B82g{6>a2{S>o zynGV%!58&Q_~L`4NCII3B!u?AdY#j!_u9St?B3@xXC}X{&Y8ZfUcJ_@JH7VmUcLHD zzyF!5A6S*)Gx_gh`R}=RtyceYX|=kvx?UEqR$2ca2~z$$96AF50t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ X009C72oNAZfB*pk1PBm##|!*FB(OTX literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA BIOS BW.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA BIOS BW.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b605fed69c06496ba40e8ff7b222556054715082 GIT binary patch literal 921654 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

iCv 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 z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb x2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1h#Af{}**%FGc_W literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA DK 4x3 Black.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/GBA DK 4x3 Black.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a652e7d1e0afd17f010ed45a68d9f898bebb6a3c GIT binary patch literal 921654 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/MinUI.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/MinUI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e675787da07f7a210874dc0fdf11b428aad2ade5 GIT binary patch literal 921654 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�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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D<%c F{tLh;#Z3SJ literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NintendoPixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NintendoPixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a7143543e8593b261690dd4ff945bbd2c41cde1c GIT binary patch literal 921654 zcmeI*$*LsP)&Srt^`as+sDpo2;^bLd_MN zh>G2Rmn_&st&_1&?Ceg|sV|`pJF<5BMVwq28S6w|`OoG1?z!;K<8u7_cl>+hmJ1iI zUA%DN;)VbF=jjU<;{X2}RsQ+sL4W`O0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF u5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FoHxf&T%I&knl) literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NintendoPixelTilted.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/640x480/NintendoPixelTilted.bmp new file mode 100644 index 0000000000000000000000000000000000000000..93572a534e27754e666f5bb88236eaf7817b6c0d GIT binary patch literal 921654 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

NeF46- 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∋L>x!K9&L z`fyAVAOR8}0Y3?d9rpOh*{{r6_x#jVSEnV1q`~wnGuLIyoW)Psin;}XhUV$4bpQ?* zggHgN_%kek1AB<$ZW|i@5Mv(_AOR8}0XYJZ5s^6YV4rc%J+$!25pyq(oENHgWz>SH z_1lcD-E>Tyrg(H|BWpF8{9voHc?v>pRHUX^#ZM4u05VVmIP?p1DjX4rfD6!o&IP6e zGJpens3H!#!J(moFvlbT5+DH*2#A2#^7eKbdU@dV3w^C`t?b`6UFOHb+u{}3z z?uQdrwkcZ`-r-No2IQmvor6FFkbxS&p-Nr7ArJu$<0nbW~C~@ zHP#!3@fC=G3($ZrgcXHv)2ufPL&**#KmsI?J_tDKjVps^Ug|&Pu>n)%n(uAJ{Hv@t z0?M}_*Bf#)CcgkGC19!VwIM!C?Z1RQ)rX zyNG}b(3A!RK}YD303r<}QV5BM^wYTWhXhD~1W14cj0iL+RN{#aBaXD}d%V>E741mN zeowR?o>;gPgs84Jwl?bWXq&;uTJ=}q2!_SrFabxD*BgaP0UFS$a0Fu_+z2{CZT8q+3j66wXB@pw}Dfwzhs4pY?{H`6^1Xpalg9AksiOi~RJ9-AI50 zNPq+~ECI2#H7Z>4Qu|>CTl78JvcJdnNJ~?f3$*JStT+5lG7IYs1kPhXaS-7~&=Gp* zQg_kGZ>QOj1W14cNFY5E5F1UiqGev}I__M%A=rRCwhQfsooFq8N5s+A{eyo0hLU?x zj<*>Q^!qpZ%ioC7dLRPlF`zhza3kmlJ@T9NMtYv)^o;~afCOwnKzwy}<%EKZ>a?6z zJ#l7@CLY`Tn#~_+((6d$o^tJAVvmb02R15L0v@Z|+VF7zem2!>cd}`p!?IF+JBVR1 zI84BhFsIwJ_(327Eg;azLfm1}A!;%0AkN^pgK%fNhbz|bM^x@+U%*`YOhq= zU9IKG+8ydA6oxR>^~UN-jSkk7m+IR=5WwIt0Y{YA8wrI04d{GJ^7bmEB4h|0V(KHf z{N9W}Cky+N011!)38)|-cGbL@va;U5&K`F41_FnyP*)nMNI8y40wh2JB#;3KIO>gk z)mx`jYl*kp-kOiAAL9B(!-T@o5s{g26(u6lLyN?ve^VQyI5}LdZ@^hx>hZwgE+XLa zeSHJKy~P5@5iEp^^+pDqvvipRNPq;wk$~95^JmI-rcS5hwL6^f-X5;mW}laqTBG&p zx}9ppYqut<`w>#tR8BlpyWL(dO1vrb^EigZ;4lF%Ow~qyPyjAK13GWo0Nh775G;fY zfeV6EKfGZV5+DH*AOR9ECXgvAx>{Vms&RQewrcwERmE%VD)r#DlJ&N`H5^PS_2BG+ zl}6_&Jtj|SJi4@zc}h*nSGHM>{E#C3ZzV(lu%uY^-Ckt43k&oJ9Kql)0iDwIhHwzh z!euz_g2I6axB$%?PoM^HghRmh5|?}koN;v7g9J!`1W14c!iT_u{1tZ;skyOm^-Z4I z#zNJ07Oj<9thUFtt5~f^ia$6!p(NauzM)hU07(TZZTBw2qc;B!!aEEO6VNGLZwLqB zEL?`;9)aK>Z~>Y}ZIA)f03JTsL8T->0wh2JB;XeTyes$Cuz}*Gg#|0`C|YY%ks6!5 zG`zI2NOg~GU6E?Li`5kT*ym*KcaAUNooq>usZ z0=~D<_!U}qA^{R00TLjAa3COd-h~CL>?m4$Q<0jR18*CO)Yx-h-GT8X;I8RQtT*5+T!!O@M%_DDA|o6!iyBFQ1W14cNZ=j;vGXS7FTcG|)r|$KYzn-s zFIYLXaP@(?iegZc^@bT4hRWd`e1r+;G+S@vDhik3xS>(^4wlHc7e78D0TLhq5+H$a zARu<$#U<;flxw-QY_n~Fx6Ngn?yt~#uzp{J$$G<#3`6Dc4nD#J!eX-CfU|HJjvE?v z?_i0HaL6obBmoj20TLjAdjul&uP9Gh@WEqSZ$G;Jr?VS=3ACMFd-Iu;w8{NeU>toCRFVJ>m>AxS_cx!ym?Qq;=y&o|&KSopmG7 zwtL3kPb~gvWQX;D8Ex+0r!3vN0@+4>3Tyr2xs9k95*!T-oX+X%v%y50TLhq z5(qB>V&`2u_JzYqU+tUy+5S172io?``sCEIpGS4v0LM+%8)jq}%7%CF5hkG1WW51r z;W8XIH0s{L5*gu@V^m85BtQZrKmzybjRhv^jiuJr8?rLocXpQ}+D5;?x_V=&iF(7d z4CXBfkN^pg011Q_0a0(PdFblF`Csmx_37T(H(c62{fLiCAKLW|t=`y(zx);xliB;9 zhKuq+#(df1QeC+J>VLiA!v*0WoQ2Ciu5Z8=FbZ@oJOLS~0UR`>FSGa{$(Klg1W14c zNWg{!#Fn>t(wo>ok0gC_bm9NGwj}My!TJB%Klk&8=YHYd_RjwF^s-+^bXaS~J0WA; zxEGHkeT`DV-HQ1m7#4%W1az9*=;16}hT|Sp0Tgg)7(q?r(HNV&ShuZFdUy)w^bcr~=sNdr|$9=SU)VnSwEcq3~VsMx+lmV#_ z4B0M@I2?qta2bxf3j-p60xm!k=v;Vekn@!X@Zd+87D<2vNPq-Lz~%({G+MNK+>NzE zU)wPJEl=&u%_HC2KIX66$NWWq#FKk%+vvaG+@<}mz(?Qp#)4iKwvPH>{jfJZneb>g zfP)wogTsWO3`m7w$aePP?sM%RoZT?ovq&Jqxxi)ffKna_kN^pg00{)2fUi3iqBG&u z0gadM9)Dxqu-7+^c-u?E){iaNLt8)Wjjf}u`?Jv}^}e`m^oJ-myqNH2+OOjn7K6hC z@cL2qT!(Cr?%?3Y5ndGn5kLVKpvCCuys-^_lxdL!NPq-LfCOwyAUY}r+WI$MW>jx@ z-Sqw6=xtJOn2{ms4d4PafzGy(r7#j80TLhq60i?}JM~7B<*5@sTR;4bO(Wk4wBcd} zK4)3j=MtRqePIE8&=dUwHQ`VH;K%?Xfa>35Ih;4JG6`=l|IkN^pg014QffY>y<)||7t#~Vo_b4*8{KNnUEAxeMV+rK>GEu#ZE=@pR&;-H zN~@!A%J=6f=!2fx!m6_C9^hCjuOqYvv1J0vYNkN^pg z011R00oEIiTEd?vtT)0g!zq{qNPq-LzzzghZ}?MYIQp>OutU;P0|}4-36Mb85r~S6 zhUP{EhL0|PbWrJ?L(1$9v<)tkGQ8~m9wk=lzDIf?pdCja^hEzaP59G4I5L0;pnwbR z2y|Zj7fFBwNPq-L zz%v0+Z#2k1WJKA6{Y!4ee(JH|a|Fkp>+&Qx7ZzNMy8mjS3^?l%0uBNZKmiwM^7@A7 zl;TkmAOR8}0TOT{AU4e=1s|GF@!W_q2S$}U?6Hj~dteCeyC|DFr0i~&Hn?oc@N$0N zzfo>K`n!x^$*&g4NQIkl)*}QQ1R{U}E`Vgc;g(H2KmsH{0wh2Jo(V)oM&X4Dxtg^o zJSnlj$R-6xyR|Vm(zej-0Y!KAExM&&(XB2G2L~40)v3^8-GHzAH_!(?Jr3eBro^w7 z$iN_Q6VB=oG{;>U5CIf$!C8UMGgclY0TLhq5+DH*2%JEHsER#vZfT!mX{Q`3+}iT4 zIaasGHd7zfSG|Eg=-Da9a<>uO$CNl?febhZH{opHgm?xCkN^pg011$Q0fESfD118L zu|-G5;`n`;YWK>uwPW1!&T*^U+RAQmYg^`+rQ7gTZ=er)c8*)=HiG+@5=ShM0SDnG zoQ2E6agR)Z%K#`}CIJ#40TLhq5(tEV*jtOm*33Bd2Al;U78QY{3Hy=&36KB@kbo%y zcj}EywR$IP@05FGm)xt}T5|XJ^{wLO=w^If-#{Pq?2r(h z%s5&CuA_h(H6oxmBFl*4#uml|!a!t#C^Z7@v8dR z9bmJuCQjHi<(98U4qdLYaQNu+hP$sCRjS_TVCB-vF%(cS6;@f?;1#mt!3ZFL00Iag zP(FdADpgh3@{)n`mpHSZJUI86!^WEP^r8C}Ig{@BN@f1@hH6x)dZUAtODo4vK*dy8 zWpRU-4~Z%S5I_I{1Q4i@fcvt0{zd&Bc)oP{gL`K^vfo%UAKo|T@t)1Q0*~feHyQZ&Zkn2P1$0 z0tg_0Ksf}MH_CxT2?7WpfB*srR7ik%qe6T<7y$$jKmY**$|1nKQ4SO?+ z{XdSG^iMVLpEp#aO4S=3tXx_-h5{<4!YT{%Mj3Ym+Xx_l00Icu7f4Eq{C(z4(z0%v zd3aRbcVnjPG}h?JJH}7jbM=^yROUZ#s795lH#%6kv~mmuR7{0c7B{$kP&y)j00Iag zfPhE9ec3%bJuC0-!(*p>f8DfQ#u|6)&Ixz!9emwtJ=A~RP>m{8Z*;J7Y2_FSsF(_? zEX*68dw~rE5I_I{1cDNX%^MSEA09LL`*FAKGS=9sJ8!sS@1Sw<=MB}UQuRg$E0u9^6oAjJ7wE-)AEg_cPA#? zSyb-NQ;Jk?bg*)1rhX&7G*-^= zEdxe<-#z!;Xuoh7T_gLdQKjmQ4puI$976#WQ(<*lH+UIw*hT;W1Q0*~0hD`HbBfjgJ{Z908 zexIkPMwO~JI#{{1atsAj%=)Q(o^s?(z!d@rAbbZt#G0X^#K`2q1s}0uh05IP&+I zr<~UHvTk3szVgG1JFM}n)onU`)-q#B)XQ()P>m`t?y%a^!P_%|9Sg@$K*dzpSny~l z{(}Gl2q1s}0>KKn^G2ONbZysT>m?mlwdu6hv({vES%1N0OQYxTn>SRW$~K+Wcsh7{ zCa`1S7z(JE3acz`@L+N2jsOA(Ab$THCh!=NGnnCHg?W&r?*R%8V{+JsrF~6WFnE3d82Zic@_i^KmY**j%9(^ypekDy0eg|ML{psIo!x<(>}S zo(b$&IEDf$ChudG&l}Zizgw;5i`8l_ z_Ny_0!dYm z)33DbHRzGO&aBPO-Cvn&_7>;fZBE|1+f)_~AN~CecV9KCRK2%J#doY6Lje_2VU@)V zu5b84009ILKmdWD1>Be2^ezKte^EMl<-uE59X8g~4-ehGu5{eXU+E zl}jtfP(a00SY=_}2>RBdKLQ9KfB*t90rzFMMc09Iw>nc-mE5-0G1jy-ho`T1#xLEf zhxpGMs!^rtjSf~WtsFxE6;olAg?S@(5AY2F2q1s}0znHfZv-t&e*_Rf009ILaOaJ4 zyA7Q8jWca^$sM0K#=8CE!!tKH*S`|~{SDQqQuRg$E0dAgM~^=S9zH-+$7_&e%7LuUmG=SmWOQ?}YcA!Ov|`ng8c0s!^rtjSf~WtsFxE z6;olA#SLC*&O8wU2q1s}0>`p|`?A~QivAP+;fz>%VC3s1#=7>kgJYIC{h$0oO8)bP zYE-Fuql1-8E5}ek#Z*{jVcs~FZ+o&MfB*srRI)&9-nj8Y=h{~ejC!NQSR-FQICi-+ z;HmiYhH6x)dZUAtODo4vK*eOBvq-Zw)NZO4p`#!eyS+**pNGQG#KmY**5I`Vcf!Mq;aH-ShsiLfBi;b1}%>JCely}}xrRt3iRxYg^ zLje_&c_ZL^iuMQ~fB*srm;%fjrU=&vAbPS!I;+0PdntM7CBb6+U!c3=FT-%yPzRc~~#a%trl3aFS0D+M>W$-y-O2q1s} z0tf^k;J)mh-l|{kMNa33_jFyb-&kGd|EK#CKed~&A@bzDKQF2pRjS_TVCB-vF%(cS z6;@H0Hv+huXo&y<2q1vK(FMZMKc7;kWzLlgoJ(gHWX#=Xt~o_*?=QJ<()!5bedi6; zs4`u!{f!2q1s}0#*gwm)*J-M#xWF7F%?#X%o|qkBbp(A00Iag;3p89H#$6a zOw1dK$-LorL-1<|AbM#xWF-&r^>0?dJjk1Q0*~fl3hwCq@1~^OMuF&%4WM zK52K_)IH{!QkZ`Gk4?sW8aa;d&x@)?m1$E7%?{q43GCQ7h5{<4!bYM*gGWN~g#ZEw zAb8yTJpu?IfB*u&2*l=%^cl`Mx8ygSRA{cef@ZfCr;dt0Z>UC zqZ@Xm-c(?&8-Hk=ci_z7>msM~{drNM$}xs)SIp#8<_-Jz5gidg009IL@DpI(@YCVf5I_I{1Q0;Lh5+-1 z4Mln&fB*srAb^0MKy=ft}{vO*uWg_J;5&=<2q1s}0toyf z;J)mhkr~Q46uRo$P_G^4>bX6XSs3bAj(I~hs#LwVNyT@p976#WQ(^VRyz$FTz;_5B zfB*sr1T4V35il_A5kLR|1Q0;r=l{(=BP-OeG}LojsCT}(dhH5j6@@y*|9R0!jVe{| zZBp?aE5}ek#Z*{*@%{#PKLQ9KfB*uOCg8s8*6S6@EDCko9P06a{I&<$KW+ z`TqQdYE-FuZC@1v^zE3N-dr-_Jo zFESz`G9s_HI3hyFk7thX{bvezMgRc>5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL 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 MV8DO@0|vGO0qH@}dH?_b literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Atari Bootlogo 4.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Atari Bootlogo 4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7a5fe414d61eb6870092992d52bce9f389c8793e GIT binary patch literal 1036854 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 Aga7~l literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/DS Beta BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/DS Beta BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a6f32a1cf140aeed1f1fbeb216f7b5895105cca8 GIT binary patch literal 1036854 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/DSi Beta BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/DSi Beta BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cd23d382e9ab22a2d3ba7155eb15a351bff296a8 GIT binary patch literal 1036854 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 z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U kAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyaQg`SFU*IDZ~y=R literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA BIOS BW.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA BIOS BW.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4a0ee4d3b2332035276fdd3d43cff6b16534bf3f GIT binary patch literal 1036854 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 z5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~ z2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj? zfe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R z5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~ z2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj? zfe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R z5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~ z2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj? zfe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R z5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~ z2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj? zfe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R z5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~2!Rj?fe;9R5D0+~ z2!RmzzwOYm00000z#xC?y@M!(3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd N0RsjM7%*Vq0|Bw6gB$<= literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d65a4b0dcb9009e523094d835a749309707f86ef GIT binary patch literal 1036854 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�HQKA&!Wo)f<&0b| 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®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 z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>@u|FuI00ssI20D}Cj2e}Y3V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<`0#Kmo7H AQUCw| literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA DK 4x3.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA DK 4x3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..37b7d5118e27c90257513351dba7c389bbbc962a GIT binary patch literal 1036854 zcmeF42YejG*~UkfWXY1%yL6JQ=57c*gkD1kJrGEt69~N~wD8e;htLD2nSilzuX69Q zW!aW3_ug^SZMmkqlfGwm?#^d*cLzWFd%a%m?N0gc?999Gyfbs|r6*S>3Avq&f8FtK zeg`4eMhFohvgK(Z@cXnxVf|AlglOPK0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0>4B8^$iVPe;cw7`3{6x-{5Ul{0)dV ze8Zo0&0ZOHGW>cR@53#PLcpI$UMun9Cx4TBn$J-%ow%h@)|v#c`-HF6*qcVwp1_gd z)^mhN+uWK)9e$==$=J)Rg@+%0tn#v-2@Vf1blhf`ynqBqfCNZ@1W14cNPq-LfCNb3 ze}X{0^_{!P>Az!!c~Dz6mXRLYw(gpU$}c-b!ac<~r|HQsunYlKba5 zZ?AM9UKu8=0V)};`oC2>%Q%+*SQRlF~)b>FtcdCzj!-OGZ4V@vK^;ktf_b7HLzfrQ%x z{<+3|#|qcoD_wW3YApAzcHOYTS?!Rws6@7u02Sbu+v{#v>AGi)`_6XA-D}-9u5zt# zOK!~uuEHE%>-*~}*S%|-2@?_Byvp^~=DLA%5~E+=L%OF z$r!Q2d;MbPec@n3gqOPRRcHrkSXp{rV(EV{k z?Aar=%n@29_K;Bl$r!DrkJhl?iH6WhhH6+xZ})Z>Vb3YoGJ=vmUQ?1WK}#C1b)BlW zl3W$Ebg8jU3MQ+kyVQK3&ae1HrR67`-B#lq9@ z%H}#TOV6y@9cD_Up#%{{&C-9rL^idpBoCTkUZtLd+*RzEL7YKqXXzcLYBTi4YFH?b zDr>K-^N0yrb{N=@^>oMtEg-??m^EID8*M*prh&lK^9seH z4nR_I=sr$Q8L4HV%vgmdYowMvA}GV{*^puOEK9P7+EWMHdyLlPjeFDi)hKHINdhE5 z0wmB*0;&RErum8o*pC^a^%>lZ^tMj!YPY_jqIUY~dkxom4%d2((0Yvw$|$WDWVF_2 zjMinieVNr@Aq|0K82-XhTJLds&vLyd_K@)b=`lg?K0(KR*Pi;ugdN_ja;?u~y+=^G zPtle1n5vgd(SJQlwo@%_D&EVg9r@Gs9u-EnSwX?ECB5euY18$uw@Pb3xV~}9e6whd z(XG}}{9p(H)J-kmnb=&`^ov!rysnLp38S)vXK=UYEn`|i~y z6ov(s@gx*N_<_qAmOC1G^%%U181vO^(CFWA6f3;f*IxMjNbbDR$LZfVn*=4a=wAd_IY@WKpdCn^5 z*{kIKw3W{5);ZNTekhUeY_IEFZQW91cG*)(YRt5S#x-l&);D@AG7G9@j%2=+sGQC- zp%kT78neyD`UVsjqy%=4;}ON?_R-y~kMnqG`tIlk|tGCBRm+uTYFUAOR8} z0TS3Z0)dA9fa)8kk2A6d+lz(;l?`Ye?bkQP?!CSN(?>|hz`^vO%rFY38z;?apT1F{ zmsT3ZA(?9yTheWwnNZQ3zOl#w6GSoE-%wkun&yRO*&;J(UTgXWnl@}-?5yiB-^i~q zA-zkZAvMU`UX^# zr83w?QnJ`gTV!0bwjKHg^q+-h5kzGzqQlMOO)0zBlr-f8(pUxxs&xv<~5^lsBo^H>qs7B z?=n#?E;(e7yCo^i)KXX*&8tXwY}YpEP#^`cSsl%ciP%xcU$ltLbm011!) z2^wgFYG1Ug%#QB-O4o@*XgW%itFZgBf?8O$Q+oWen+;VYSCoLFi0nr#&C zrM`h4A2{=9-ui3jIr7G9J*G%g7?h1}lk}6P8ZeGMP$T_W6+^kNZ+M{E)wNtdWs(8& z8cZCJp5>Ztr2V=I6XC!^$t4Xo+(>`~NPq+mJb{+<4RoLcWQf*nh}L~b+x;mBN;V?( z4d+cVx{Q#0<$>N4s{=(<@2KsijMKZ1*Yn0S*Pk*@LwkXKld{QDN~Z*6s!?L~m^AX= z7{AM#GFk7Ynku!&m$D_LvyFlZw^C|cntTp5s}m5#LK<|2XKb=?qKM+xbElhyWA$$6Sg{HuJU#l1)8VE3;!-!R zf!3jHP>pWqpCmv6BtQcDOh7fbP5n3aLEi|a0iGMwH=61jiqArqKLIw46^?=?`o>bL zJ#Mz8Q?9Ddw5)G*S>s4tVcvY0^bM7@o!*8V%Y&s$6MbWRa3E5skc19Y*1l}Fz7e|d z<<;(_33@klpEc1pLf5o(&`95a*3qL}PZ_4YvMivmwR9uTlK=^j0150Hfdis%s3vl? z>7TR9H{b3%V}emM^03-BDvXi}V_)nWjhr#6&8~~g&hwhHZ!B}b}8{0R~s?Kry=eqshYTmRJCJY+VxDhly6s>aLP_viZ!CA@FLNMAGG9tm zW*3_!OH8=1hU^;)T>iOE|7gu;t2T@GbonT&Hk0NW<1BpxhJ~h^%39y1`iAuo@f@Xn zWBP9U#!hej49z#+@ZGo6h2gX<=^M>OB_mhoo7Fcke)j%q7YgvqoxYG6t!aXJh6G4} z1V~^X2sG6<0+x-zvJXYdP_5fgxo>HF3PN!Dq?!8q3bWHswYK5*(lL5hB~}-?>`77G zC{|AjI#V$Gq}xP2x4cPzis{dtpmjq>e5fZS_~{BSPz+nZKGYDX#!L36Ow}=V6%A8B zV31d1A}WpiImU_eTkTJ=ko|6%GYifJP&QOsi9PyCEGb)T#xF4X?rhSZvcj3SL^@Fv zF0*90qY(BA%Vbfq%8{_l92XqBp&GayzWU@By z`o=jk%mQ?#OpslB0V&tftI}nRozs5+H$nAh19BhPrp5-S^pQ&-d#+mrgSZM%cT{88!~BzA^1^*f&->^DsyR z-~0ILSJJ9|1NsKkjC^I;P-=#>Y*@0v*=2(>bzN)r4Q0$3?)2SP>v_sv_e2xN9O`&0>{3QV6IZt@6hs-4E&-ld&}^~ZgLcFb>>6mP!d!;pxY#`bNs=w zgvcpSTi9fO%4&yAd3~s?VXrc~+)=#Tk+j6bSR338UFi7b&b-Brq9u;qqjfCB12dSF z)tE{1TbqqUB^WcRVV)BVp)H;p>{1Cn$Fey_4kln<6zETp`Ud78MfVwoBUzJmgl1fk z`o=%Lk*Ec>`>Bedl$6=l>ST?MAy)uSr zsl&ANVR9bPfKcCPOW#P|;M}6D82j}+18NENjduEPP~X_U;>Np4fCNaOy#$)kH`L4< zArnW-{-Vmh@%{>T+8}#x%o5Ah-=Bh>j-2(* z+qQci+39(Br{|GfEl92Bkrw2iyF7R8^n78kKV{$jMcJRy-dcm#kpKyhz}^$sXMF?T zkC+w-U*zwF=^L2i3nO85%dHe_?!z^xs(H$cM9NbN-^}UMXDfOkV3uSnEh! z>quA^l=Ticf`+8CI_;V%lWjBST!dkBye;Q*k^qsgz1x2 z?$n@tL+Kk>9t#@BR(C!14Jcg!|Bbfv4X7NM>zwK9oEg}!56T8-x+NLb-nPjJ7tp4I zVQ~iIVN(y^cv$Kiq1S;2BtQZrKmyGYXsU0hC1P8dUsQP+%--QUcf4`+RP*$4ddYCD z`v|#OO81dk(FkpWL%I>}@YG{I^D;SHCCrgSO~i4q=QFqF;y6O)`wHnBaJH0liiSK( z;eHvMgR9FbN5)EXn8UZw<6q$MFRW`U^Q@EiYx3l^+d{J# z-nO9$OoB_i9oYH4P_71T^CnNydthWr$d@=cNlR!xb6nQC|3=gKz5NA|&+ zIR8eo6$Vd|011%5J`&gmeM8mcu@?`sl#LNuS4#?q9Rd2rk+gnFNZ-I* zoi?mU(sW1*)>5(7G+Ddn+Nn*S=nFeMm^HN7^;0m3Xu{slXI|e@tBlUFy;(oyxEe?9 z0#i<79+Kcptz`>Lte>LhGjBG!!1$D=^NTjOehQfUw9T7{McFW3=^*GEa5w5PMoS)Q zA4GklY5C(B5+DH**bf4Gt8c(^f!Rbc@%Gp)-t0m4KCo%PvSCTDQQ9#WpE6S0c-ZY5 zVfx02RVGsF_BTJCRAv95uGglT^j*ICvK5X}OBxTMwe$_F*H+_^Yo}t2D)x;8gJf~0 zrS;mNY;;@e$XsRK5t`4ut@Yaeu+inIZ@`0UX$sA~(l<_B;wV{Yc87hVIejC!(im;` zAvz47ZK~kxt-dj2yEki!e(Wq`x5{yV>>EW4{b9421-#Yf&$j8HnktG zCT}GH5+H$J6oHoX4b`iHJvvspS^J%6^BNkUOY|P5pD;o{c6eZ(^B%*rV@7H@KiNlZ z_Bwp^a27?&hz;|fL-**4Nja=>D;T;039J}9R>y+ic_W+5XKwg&F|Kw(V2%zfDUKD! z12Rc3wbqSoJfHbaZ|VfSd+1Xa2f^8&0+Tb$Fn%@1EShQDxLD2>fz~a&DMxFIKQCV7 z$ga>!D}ysX-~bD$&y~xm_n2=c%{IQ=)_6Yi6Bapam@HzxSrq(`4>Yw4&9dfZ@CG~G z*I@b^rkK98g$Abez}ys}*(!<`o0tr|##*br>6{q2SLqv1Z}lWBGRm-&31+&mq{Lc} z{`8d&Xby(IUd`PB_^qr*k4Os_o5f4aW0yLz7n(0_MJpNzKb#B#>``MD?70|<$}Do- zwc1RtGO!RU;zIu#@@4w#m%Hiu2u&-O>Z0P}C(wx2l zWuvgtESPIX&eT8qd4Kf{8MVa)Yn*kQujei@<#P6z0NfJj8)=J-HEp$3FZ}H3yr;gA zjoGvonI|p}%!P$Wl)0dFeIuZ9EH*pMH=f%X7}C-dPP6((@d6WyR^B`_c8)$PsBfry zH+kw)=a{*bW}c<0h4hW$N~6mhqYIWnsW7&;kjH*o>k`|iZy+w{C)l1|;f@_+?=n#< znW%RS(>KnY+1iRZ)~yZa?Wu2+j@F7t+T#Y*KC@U(yQ*Fab!Bj0Up7=K)wV%)8}>>D z+HH^l_QHYo&fnF}-zBv#ZX`egBtQbq64(cQqhyfQbBNXhGE^%Yto>$;e#I2yjB=x5 zN8oFBx4vO{bim3XO&peBLNF;~^zLKzyb;aWH^yk)FafExrkk3HR9ZPKLr1A)>uAQl zF<$Q;w5ZEjNrScytna3z>r4a7dtI@>x!mE$6sFjRWT|z0UbQ0^_Ko0#mYAWmq|z*$ zWBzKsW4&&9a4NQdKiEYN{{pg)ZN( zmpLw4<;0pJ`A|8mc{qz}%*=(xXwAFK<%cMMh(#S}zWQpXf4R&5z(zM#Wi7=bt&1^} zrnXAS4SNe)NwN zs{WCn4F{Huf_di2iyTNZrFyKYEPTY{TqJ(Z^tYP6m=;_|eINt`<31AUKjm&4mu#qtu!Uy|KQr z!<#l%>tTJ~mRb8!tSzeqlcHOK-j*KIjIyal&SV{yc_~vYnX2bnQe@dcUp!))C)&&XFjIP=WX`BKW}n_;?1AlQJu zv9&It(&!33A*2pLHL?Uc5~O6F*>%3zZNAy1%FL=XvcqMLk!^{bT70fif*b{<7qT`> zN6H)JrO}_$?cVfhIv8Rpc{%HNnB+luP}r?UkT*pym|{S>OqCBvs*Ay=7J81|ChK|Q zwM*tmtHo|rEG)_!svNelT5ni6tZ8h^%JsrATIXT*8!H_lhKl4(v(1D-wOvNq1KoU< z$5G)h`%M*%O(KZMV?Bl6jW;uXw4)Ev-^(+LD@jN4;=tQJm#Cd7dCGD#%R98xkmSD6MY%D0DGt<81#`m z*VtAky=B5<+O2OuNq}`CXqpHq9#Yw`%oHhe3`ovgvnv#saH%p&Es@Gbl~Fj?NSUQ8 z$*j=DRPDnp(g1*5G;LAw1AZF0!z(6gV3-Rx45e~dgrRsS;Br61=r+SBo^E7J(jm4f z239}WD}4j8%joJGE~zkMhTF3+_!|0#wGv9N@p|?s?cN2Ad(iHi=g1ju?+qUzWo;X! z-_{oVXs3N6#DoVVKmsHX zB7m9`TPyw>A^XPnt3AUu)P1$mQ})wt`v&xle=lilf>xEbv~LX6x?(zXW#WL9BV_0p zsr4A8*@iY}-x#5xt3|Fb8(MqCI>1M3X}OMlGxm+qT91%h=|t&Ps-$ePUNTAVIYob9 zsq4X|t{WFR3n%OHBYKL}u7&lyz%>yKA6mfsmb)HYA?4wfuG^QnzTGMtRx}?A4gZf@ z>xOOj4h_mNbId}tp_u3+xKvy*mWs1hiz}-%vS#TouXkf41r`?@y2Fbl)JN~!?FXvb zqsf}@=2fnT*SXJx>nVD0;9yy0c7apnJafQy?~ol*a69%-t#fD0G2n-Z3*d@rt2C}( z>AHWN`@Xeq!wM_Bl?><`Tj~N7hR_4r&O2^E^|SynCHlcfdY>vWS$B>$8MAKym8tkvzxJRsObK^#&cJ-^N|`? zZ*;?rm0qAILir=LD`uL*Hq~J!4Y}Va_g79c^M~0{_ApTlhHv*7t^H%Z^X|Eh4_3%B ztU^;}jCnhK1J~9KSzq_`eAhj*9gkKyhpw+1w61Ql<)oy52Qpjh8?d%+@VdGe7P#)2 z<@iUX6PH28Z{GdHItJyKX;tgXR_WCN(lClDZ8cX zWc|2ldegF?n(xP!yTlj`pW!J%!Q>C}dpvwNjA~M?;T2^wjf|-}23#ah(Nm`CaZ_}B z+BXecoq1}F3#NeHbByk@rF5$>GG^%M)1{zK2m8F4Mo;`|NiTGK%+TQi(NbtC!S8SM z;Kn||FjdHE-)oMMJ43%|Y2e#`;5IL;I(-mzMNnoL7$*YhSz+W))BjMt+ZnZ`NLxDp z#m2hyaoRD{^d3_J5@OzGik?4SyLmw%@By3al16Fjkp(<<)KbE5&Ka-U#%Pz$YDV8^ z6z`ePSVl@M0wt#p2A*Kp)DU|>2HSH6+tIs+5!}5-XvbKitIjHK=83BnXzrfri2kNF zp`U#t#@<+4@c^yUH??PvHlTyTnuoo^EB8-UIpe>nP3l*>#2&b^*I=#Fx3wn?lYxh; zf{jwkKS_WDNZ_a<(0+Xb-WpN{OWgx12YOZV`rE~qwXZFdP7cx#5ZqK93&mh>^^HZE zFXqSEjKOv+0GEb+n4}K1rwp}Yzrz}q8`3vM|Lhe%*)vCKsX<8@r71}rt;LVhO2+H3 z{G%0~y2}?a!k#`>OBti3U=JzZEuF_|*%LIlli*4SI^VH}N`pPNmsYzoC+odu8r_3Z zik<=`GmTP90$vKLYi5?w6|Nw#FrX2K(WAmRwW@J134p2TFK%1zMBh!?bUkUBo;XeJ zaU3ow)AdCBYDwx0T};-d*nLP?vmHGu!LY8NM*}JcLTeYzFaLPt$i9gxXgT*F&h&?MLgY8*^ z?dd<+(*{b(7+_E8Z-?3M*1le> zc0mtG>{mPeXL%(S6*_B_UOdqLyRlNkRPVx`c=#6ykN^oBjRe}SZzwAV_V|1&8eqS4 zobmNa&j(A~^LGYp6d`=7j)lH~i!ptNyb)STm~sD#spIZm#>>k}tN@eX_}eJ{<(x1WePI_c)`HF;Dk>0Omo+A=)^=$xqgKMr`w{ z68P16PwEH_7OJl0T0q8P8hj}|#%lQ^?U&7H+rIJN^`6gHdzvplt37?g zySACJz)IhEw9*ON9c&s)?XtkZ@$~qiddUFoHzV~|s$DNvyRd&{q3fx6F4*_rG7Z^^ zDbg%Zr;XI}f3#mPhWf@HMS_2j00|uB1olDS_|*{2_M`p5*^Qm?LL^n&w1>W-w2t5& zN(j1RP$!4_Q$qJ1X$MN*cyYNq6H`KA*^Z!uzP@+QNEZHWK2h&JS?^&9I&R=ka_Wp` z^o=7evxg-;O2>o7m^wu3g+WQ9G$o-i)Nr?e)5T@e+SWG?NcvmSH;x;scgM^#KWVu? z*p(Cxut$Ae+iz84rG@&&0eKJ%gak<77e-*O^bK^Qbo)um?{AO$w)XldCTeDuu~2c(cVG>WdJKiiWG6~5FrhH1Spz(mc^g4t*>6N@ES&?J9EyYvm2 zwLJ?1ifBusu56m}*7XgPe~ds;QaaEMKMm>|O&RhG36KB@G$qh}eFMry=|Js_QO2C@ zz8TxR%Qa~-Z?@r6CtI;^s7@JF+9CUfO2&HA|Hnz@jnm8K5i zrn%eyGb%4@o&IS%eY0zQ6+t;+qEU?5qC)e8sM$iSeUEW+Fy_Z=Jr#D}Ok8jG&8qdy zwLD|@KRv&^5LEmA^%@V{Dtcq~6|6O^1nU4=(sP(rFvx!Sq{D3AIANGx_@n*8vBvD} zzFFIR*w5VNoBp%+jYY0MOfavRXkw->JROu|+BbfArIa}$0TS4M0(+%zpgSA&ZJUwq zv%Y~@98)XcUc-6I9BfyGnusczc%XX~VRc z)@-W>FveeMPyu~owI^+Wy*EZf2h|KYj>!_Z`Vl-MRS6Rsje-_U#aCQE+ z7Ui~LyY%#c;fVT1I3FI9011$QBCxmm#`$C9ln*dms~elexX=0q%pLGVJ!Xj3dvIfc zlPX+3u!q?Mk*X+~js0Mp#D^<#9WJM|s&AwZ*T((q#r0SVEp*qxNZ2nR%>N;M13igX zOpuGgAoq`*TL? z(1E{N;o0u4-|DP~Lx@^T7QdnxU&!$(tv`7FN&+Nslo4pZz5(ZrydShPN3}i5?`Y6B zP8g}%25QBFv?7cS-cz85B=)zD+aiaNQr~FveL6DrjfZDD)BbBmfnRAY@qFKD zynqBqfCPRq1eCskb+lV@oPa9@4BFTm?H(8z(l=$w5&m9$?295LHwTae^q zJlVv&92myc{x_vbU_3zrBtQbcSOTgNt+D&C00gYW=(BDrIo3%`B#x?84*6?qQ~Cx5 zk{~E`Z__Xl7h*)b2rQ&;v?m!y$oLfGv2|$+5`Pa6Q2NH_%RSLw*TU%yFp}VB%%rJ5=?2mR#!Lc~FKJ5QQc9=*KAOR9MECgVYfLR+3 z8m-7aB&?OtV9vr`~4-&2v$kPtmYV*f{g((M*5+%n)g2jI zC|xR@NN^(zUa$8^NGZ~(QrIYYIJwWsYbi`X*yk{hv>Th|@d!zwdYafbdZ7FBrwS8U zKB##_EQq4%n-WU-L5;m>;7AN!($Ir$C1Ify@_+#rX^d^l1yefo4oUOm(O+@pky7%}4e@4rVb4tO?IfOp(+2Vxm8V8Fb2 z^O{XLiqNgM-g+<+(CE>q^xS#pov2Sk5OjW@pW#v4eXX_|_&N*-$deNNsbmt2BeKl$X7 zTefULn93TDELT-k?Q@t%+Kp(H-g@gTD2=;z?Lr>6Zryr>r0|6oUU=%Mr@s91OJK*N z#9lqt_P^2U`p|?>9XcGm1T+dc zK0Y4x$*HHFidXpc*I$3)i6`)lqnL!JipL~C0>5|yOP4OiNAy=;eT8c9AOH9VY6EB; zfBoxU@jV_B6BBi~H&mYY-FM%E4?c+c^Rv%BL&G$2;>6HHQ4RXpXP=E^9>&ym?AQ?r zc<7;rVB+}qzyGaLg+!_YSUm7+r%s*rilxfVO*h?yM}y|0wzgK~8Z8J8VB|TxS>CI> zv~;n`<6U>%1;ZNDDrMh5PNSovTe{^CoL8|YCntaS;fMGzN2?twZ~K3M67tbUA3-Ta zMhZ?Eh{ByGj<4F=AfnNpzv{18W&#tJb`1adxzx(bx)JUlGP@UrIG9x1+H#avuJv}8Q zB{elQF)=a0+8TYQ9F{*LA|j9~Y{kXJsITt1=N^1@qU#5`2Q(%1;daIuXCQ5nk&%Zb zg`r51$gHfa%*;%v9Kef2D%}8mK)42VZ|KVQAK+Qw(cl5S^wLY;eDe)-54YQm0=Zzp z0t9l{v)ulSv~p!qQWBa!cvwQdMu(SR6QN?WjMyKNB~~0gO`j@$Vd+!F{~V?oN@|mfLC65CB7O^lJSnXT&`b6?aEw`011Q> zm@{Y2lqpm2$piNc)PeZ?LDvb42B)2NTBv3?k`M5`2`dLovX4LhIKB{JjhR1xzRKVc zqHl!gJ@d>n!28K3pQz-)zJZ_iP2UKGiM+!CfQnkR8VeUL#81BreIt}dl*aepe;>Vj zp)*I+!O16|3@sNuEK8Ow34gO%Ifg9`{X{6PP#Oze_;%+rr5K%@f=gu|d-qHEI-`AJBu0W((~#+HQ29 zoO$M%_{>4eg?*zfR8bt>1AJ*BVfZAx`|i7MzWL^V{_~$`%3pcqmAP~0s;r%U`sqmF zVQ+jx^#1j)e*rI)I@ltRLO94FdHbesAWZdW(5ZyJZ&cB`t|Lr%-5d#7J|G1Hc~p-W zr4h{#8lwXe?EVK5dZ2iANFg+HJX3Ty!bk|GR`mPe<-#k5tx-jR^Y|6lz~dCzfyD;a zIfQ^O{ZN?upS)H=2*rZ#NW=^67m3-iV+Y!I6dvrAfd!Yf637AkNtI#f8&_R*6-+%L zeZy|It9PUkK>kSrByc1Xz{iW)lp%NR+O-(hFk{9Hm{L*Qp@D{R7}XtWPQ3eSLq&w` zkkvW+Uwt9{NHFZfP&xkgx4%9A{PXy7MAv^wNeKeSPx~Lm0SN)=1YwxsVUa)zZ@cX_ z1dB8K6F72*5YT+Q{PN52D|qCQM-bYPljZ%%TIgPt$NdBq3hjU&;7vi=u;KZ_^8~LF z${utNm<^$FsJ9PIIgatt;n%phI8_pG%i(>?kN}n7d+)s$g$G|8=-mLHL!2rF5PN(e zK=FV_2UKWim>7KqdaB|&lIvKejRZ)bSpsnK$2dOp^23V&H4J?04{De30k7Me4Nz5& z&^KT}fRiC?2*}zIsBfsm!xQF%4?ci@AnZsugF3(2OzqW4v|nf}P(P#V0XP1_^o_kj zaU@&}Kd42E7Qxok=pDpMhvXfQCw^eFdH?B_~t@mhZh;X1Q<5~p9i>X;e9{EUo@c_=71ci z=C!b}5W{0pS>YQW9YZj2!vP-QA32S$f(%zrI9&sAId$DZO3AN({cC)$!KouBC+DzKo(Cyk4EBGH0NPF1o#24|KbP{uo8a@#I}cNH z;M)Q2SYU{OJot2i_Y0~u*6k!f0!JnRyq@SfS-g1hv}w~Y8z<%qMfWJoxtJFM-!*DG zycNpcreum83NnmdY zK*zurI_AeyQ}VJLwjW@xUcJz_0z)P0F8H#-zq+QT1|#=Tt)X(Gm4j^@2^My)g#UeWQG1W4e}6M))}NCyrah@lx6fdW4b^ns#J;lS1d42=Xx zfCLT=0emH4h#6*IKk>v9;Q@}(XBe>y69*>d-L`ETsylY99QuZaF_Hk@J4_D^I& z;N8SJWrwChU@Rm+0wi#-319^xc*0<)?CrPTj;T4|)B*b~Dm`=@v+^ea5;$B0o_+RN ztW=Kf&d?l&2fHd@_#{9AByf-jphF71qF7}HE6Ji}g9`^{HNhZROl)$v>R8500!J+Y zwMN6BL4zw{kDqwUZKmsIiXb6;+mO|OU z_+re4irGhBc;N-C>~<*YTgF8KMCt^DRUzrp7fRv^N> z9GJuvP8|oe;$`3@aMTijO8?SJFJV10_-X(4x4(sVC`OIp^{29NSn5DVN&+NshzVfo zQLH43mFrOx!j}Wno*%W%0W(el2ZI1C8#}EH6M4b10mUApUr#^%^ouXP7(>+Yz8?*9 zc^%?vjnR<+2^>)b)K}Fp#~g!CEv!EIWLVUoa6NC4d^*f7He#-6JM z6EC{xqN}gI8cPhcyDGrKB9Tx@tUV6G1*>DXB;l8-V}uYc;TMDl-co?=Ip6L)wRj;? z(w>O+_8OJ(@GRpPC)?ZPSHzR%YnMkNYeOL=cv zs`oj@eY>$yIu#=95Aha?S3Rjvs`e^Vp}SNdV5?;R^RidTX#L{GY%wVZ<~)au_b6-^ zm}L?;s03g(L}w*b4on|<^;t_Tjm)|1|PC{MWz!1;=c3qa1(y@$i@`E-ps>fS0b-TEhA@B2h%2 zD5Cm^j;D%_=ZlW#2IU+Pd$owYwi$`JOmsXucp0ugPeh*}qK_5PzY3G%MYIz9be!mT znicrjBKE3g0&F&x@ROac6){(|nwK_zv_5~35(E`{&Ay}|JUxNqKg!Tzerx6Zc+v56 zi9*si$;$h2t(rJ2_)%R07q^7EnMl@y3pCTVC zVvp)6qPmM{l%L;-=#xdv1s35y9{3o6BIZ)7;GHi5v7aa+IyQOm7K#p;BKp^|GzK0D z3iCmL(Bjj%Dv(YTdr1lJS1%D&CZc+Xh?ph`K4>Q*I$2K#@%EN!kguUCqI*LF#Tz9J z)q;G-A;*XgiK0WYh=||6bX$)Jfy?)CKTFFsG7#iZZo91<=vX=7gcGoE!_m_mFsCGN zFbJRz1!G;Yhgky-8*1)QxJaFL+G#CU0(cX{?V^z)B34${Xfjgzi^TUu+8B|sT%<1) zS&JfaAk`814G{&F6gEVJi_H^}Qx%a@V_mi|B4MAlqkYY+ue_6RUM@X#@?u@WHi8l+@5wA!k+oNx7us^^owkO{~Qge=1k zMc4iVg(Y8xBNLXjL8N{p()x<5Ng{i3M0Slx?JttQmJnKNT&#+*^S?yOk0SZYh`fdf zn*_e_SOCo`TtSfqU+(!LbQ zFN)-6MC#ijbF4@o5RtPwqRT!}-7})*lWKEBWK~6EFB54)MDiCR`M;t=hL!zrb<0A5 zhAefMEQ*;^B65~S@gYi(+X{O;GtL$g;&ISMVwc3 z@`_B4$f*+!^9N&gm!uZtu@B>AKuzX%_B2Z2yB!fD9M{36*UQb&oj zX(HiGD@3dI4uu_l5D_Ob?IOEQq}S~cW+?FXA9V1FRM7Lt&^q=Nk#C8pcSPi4BI*$l z^_+_1o<-}Ibp#o&h~6eT443gn_7gELis-jQr$L8y&*}gl!w}K=0nzyu5&KV>hK@+d_abtOzCsw86cW%Tz9#U=pT0n(%@i51KWq|-8#-OLHu1^T z2@kJMeA<=xj5qOFZ_?`_sY`mpoAhFB;!`UVpI(#r*cx1x@aVdvOQt5DJ2vUuaS<7_ zMcN!G=~YtFrpS-|_@AOr=^yu}|8~0KoA^7bI^Val^S#THUUkc$c89#@@mt>XN8DL= zxU%kbMHc%-Cd>%i4}`w)E-VQm)thpyC+j{}=AEwOSG}zzqfzqS@Zx&hg?kZ#NUs+e z4N=FC-%HYW6yoK)9;?`e8czg zfBY=rfr{jJ8j@b~wD@FOkEO+5>yqB~raiGe^OmLA_pgoVRW9Oxh)5eI&~GBQaDBr< z5&I`;Xo{Z|d*!mkf2~b;XjS6>IZ=`mpRGI42@B)-nm6&8IvLCVnF$ZCN_c#I;*ATE z&MZ&<-IVB({-X1z5h-7ZxEn<5Cq#^07@`URbcD`?Y=et%V{KJ{>s5jx!I{AV_p10ltypJz? z6Q7o^eBzVdgn!m0Jm&3u-{#JDuj+jFnxqRSC!aqt;f!*T_#ct{l}LC=_9P-A^wC6h zlU<4d4Wyk}Q2GWeCotLh5bs{RhN_Uf=1qRTF8=R6kyr<#pXmII1QVujsNQ7Eb4Y#T zfHXY}+& z<6He2(jbYqRSC`{G^GBg-nQ18JKty9=(25g+O{|gydiNF_?`K>$F|XD+v>|(;mfV| z<}UXYytb>$quUA|-O-_o)x{7DFd|or$etJxR~7%)@6tbiCFPCRvxX1Io;)gh;)nv5 zy}%a=cF%)4XMTgT`+WVF(e^%5?a_UFB3*ut@2UWw~*7w$y}B1tyBv6s$E|KjD8*WbzNJ>K4Dq`muG9Rv#MtduAk zb9J1@uSL&oD12hA?V$~_g9(=8)R|WJP;6SL=aB~3a}pb(&+&I@a26t`$nWk4+Ul{- zy571a-|H-DaCExCFKtuV4av`ck@n%6sc*lP{MbK||M6hTb5Cb~-!J3Sk8>+#6gD&z zc+B=j(Vmnb89o#VSJ&0f-oqWgn(ImUZHGl4f?u znJd!!i?pvq+SelCDN7y|@qZDWZx=CVSkDo~J3KFq3(cN?tG8S2abpJ&f3Ia-d|IS_ zEmHf6v;iG*szl<9gmae`y|}aBp{=>!JF+YM*^_*^^If@%oVkmv7krb`w#_MDMnE>5 zwvA5PR%hM{r@W@dnLVQ}d$KQkiZ}o19feQ+oO_>L_NJkt$lWE9-;PNARwO(wVlNYM zH(Jj^C1%fLHvd;p-^gl+DDveyorNgyds8w|z)&DF$G|pHhi>0i^bIxTGPRDQt+`}= z4-|n36DDAijZZ%L z{35PiB-RU2pYnk_ZBw8_%v&V;W$f6&lS|MObPYp-Vx9g#J0YS#EksM+#8zI?ZL zkHA$#PM59TRW{M+`IXjlfEL|T=^NXcueaKHHeBCG^cKEo_8MgG-cPe__vAr+(%t#) zusnw6R~@@uxJF*N-GjSuFG3J0Qs0QVWM2AbFQ>frR{GaJWDG3N96l=Qm~o=>B#}0v z)ubtX;~kMcOQe{wQb0bm$xT4o5SOwJFv1oWXNJGHN}! z?z)n>W{=Nz^&Vk%KC4p1j*iHfDmr9axesrnmA-LrL;(t+JMlSp&Rj=kxifF26M2_~ zSy63I)O&jk(uwy4v8;4uO?PEg*X8!zX}e)%!6O?w^{5bHjOaK?ba+ohyevArD&p@H z@pp;%+eD{JMclR0wRQiuPJb5h_lWqrMa=6W_7xHHk?1&Ch|%%K&MA0kgYCwZS)bNs zOsLBk?#h|t%30vbnQtX{ohxrM9s7SH=ie#wb_bz3cPu zT$A_*qLK6*yPuu(;r3reIo7_d_;@PjUr>M$XqXy*GBf-lrhGWF~XBR#FN&~llHwQ z?MqL}huFL0Zt%sNu)>$=JSrf=^Jx#Wz6sA z#ayy@kC3fcVz2Te@a!S3qD_u2YaLO?`9&()xH^$qF4D$}gm_S4QbDb ztIHnfF52QKT;{NSur2?cEjh1jk3puw^VsP4Qa`T2mAD>v;a-Fw;{C8NbSR$R@x<4o zir-B8yu$W#ZQiEM(ZAU#65%qjO~gMWIzK4T3dk+IO~jv;**|5Z$ks*Hj^g)scI&sZ z_`TZrGraLuk@4-0w0>LD`)y18WKHTvt5e=x8Id_iB>yB* zz7vUXc6vp0e#q(p`KyR3ZIUDF#2!2ADMxh?u@{P%(*!;x;vbZnMoK@CJP09YTsJS{ zs<|0=)ujKpJ?)#VnLq5z9c<(bH*(+Gk^9tEJkYo+JRQ&Vcf8O_FkbTz7Q6-4TaVYj z;|2bX=lC-o-f4SrOYXB>2Fg!Hd0oaQJJK(knRR1L-0}TH$44TPUXWIf zjwj3RmDaiuL)q9v-;jEs!<9YH9fN8oyyQ1!ZWW16H~aEdyYja=)4uk|@1~aR8wm*s zKmPdRci(+CapFWY7PN94B`qeixjzIj6a}}>nKK6~%fJ2h+Za@idA%^zMqC^$_Kh~H zE{g0T;^8NDrAT;EI)Wy?A^jg<2vtKBQW~O8YA9@Q72rG9aM{+&kA=MDuIxE3+d4#h75u5WazOCRUS_qpVnk?CUqnZi4VUHahOq zfNO9iuE$-t7a>Ta5VV(+1tR_pA>K^=w59-`_D)aqS>R(02}%A^q`-3ijFqlNnt+x5 z)af!)*$rL$8NJK3($7t4J%EEmVw1$+49>?kWY>5K8r-?-;IvsU^^MFeBI!MmGC;)r z$%>_k8Wyf^7%o_$Q$DSe&lf3dl*jNt@ra`vV!FBH^Zm;@TmKz-rU&;1^bI_PPG5_d zcSY>`BIXGZ^G^};vgkBMbox=mFOtOunpk*f`+OXpj6bil4cG}Q2TDckpDdSSblXK1 zHDMd3Z$#ClepM&C37oE|lj=oeb71#5ZOz`8AUkn7mbk&qcI&#FH+N)C_GS)q=PvTt zw$|A;*5xen=Tz5c&-O;-RfrUrwkC=sco%;r-%zL=7{G#ot8!~pTC8)sch;{Mn%enq zBJOID_^NcMNd8QuO-7g<@+t}*-CFR#mV$S7*tUCZo9c3xd9r7^vln^u-r9y#K`V$#J35jXQxaQ}A2iMx}UY|Y9nO*75S>VR2jS^T;t>@plspvU7 zytYL2D-kIli@3j8zF~iC-%!~-^^Nti(#V?XmL(HWH_JAZ!sv#GvijU*F53oY>gTY~ zwx(~OhD5*fGtWHp%{Skm3RM;9{#3=hmjr(C1k`IXZ{9r2(2Fs!@DaV_l1s2GQF3xJ zEE{`HS8jbrN9K#TKa1Gk%StTiU6Jst$XGA3>P4ns?vv_aG|1Onw(YLGP3Wa{;pNS# za%D}Dy}J0)msJf~QZy?qNJM@;To6;Q+F9_#y1aWgbnCaP=McU75X}ao=nfeyOrv>r zS5b|l`?tG#k2h1VsS(lRA~L7TZsnAB1xD3nPQqA4ku|4j6!Ob7t|5J(rvM$|wPE^3 zHU_HrMCwGV-rZY$!@5549ht9Abs3{QP>pO`UA8ATKkbCG8RN+ydgTgnfh6EL0x^mZbqMpAtd!87eiM*5Xm1&&l$NjYC)8~FHOzXpyLZ;F(LF`{^|Cvr^V1^n1CjW)NEs`VrgX@jYP)~E4Z88m zTXI*qa~C^v=DD(`y0WW0dGBnq-L*ddvGvhC>!c5ME005!!1RWU>*1HR&i3Gj?1_%- znX)4WueQx_+h%Bax4`LWTjH4`F)%G6h>wqd=bd-3Tx|dT{n1QN-}uG1mCWG&6M&m2EP*3Oj=bQ4 z3vRyo=CZOfEcx20Q>U`+2q->7i)m9>)PeD71I?fkq^L6NA^-Z*zg-(icReDf`C4g1Ux$ z-4T5j#;aOwF1}vVXUI88EG%Z{k5zqJ8~8{lAf;=9bSn@$2juHWiM!3-zfXc=sn8b^=nkc9DvS+7?;*h80hv-9GCZ3KzIVHei6H9B;HDZqL7aeO@(uV(ao&dvYpWISbvnqxAec))hX!Hu<7mvWFs54&M$Wto^xD8411P zcnxukzP2m;wry_s9w$6zb-yCZNrObf^K!l&_>94qBj%#;q&GRmlXP~Ui3MiJ52z6X8d$}6ut|NQgO6OA^4`o_`FP%@AELjdmxR(~~36SI3^ zwPm<%}n_iNT< zH#&3E2Y6)VgHH*3FEo<&*F~W#8-c|X?MJ=z1Eb3nBX_N%;Ab=LYHxI* zKe{(uK=Fb6p=^s`1duJJ9Erc%zLC&id&=xNbXWHuYGcpxNjuE3P(>{J2J9i2ZYZ*g zoK)GWVyt~jJEd=2FLKeBWtPisXlM@jUXz*((jUr83kQ+KzQ_V!^zq(i z^o>;6pOXB>qP+DDxy#TY<%`5;;BgpMQz6pl%VEfJYgOM^F4L1ezioY^urIUj}cR0;9eAAJM1CVV+YHzYpSioOA50~0b}0OrB5 zZ&;6`xn#7iZ(J3TJzxAkd)EOTRh72SOr~Ud?=1K-dN@yQsf%E&+G;g6 zVc)1lGdvN^$WF>muame|G2I-R3~G3JP%=PptUxHW9zNOvZxnP4Z}fVvy3eXA-`EDc z0f!U_lSw8V0y&Vlhfuda|M}0uhY#<>8%LssI)8iIkARpto}Zup#1l^-Yy*ttBy^g> zjCzZ!oZR<-8OTEchcmVqmh}=)VSs;NcAVnnBAgOYpxAU{8zOGF05*<+;Kk_>E~4WN zf3FOTL?l2#_k|UGRt0;nsLlv{!HlqMtYZem08AtHX^Lb>pjR+QBS6%8eVOl}JkQ_) z-=13RtUbRYVxh_Y6#H)dTtNm4#G&-6)ki(vAoqbGVZ5R;FecACB;UI|i2PPWVx)^V z?7VBxKL3b(AL2K_;Sg>TzX7&1^k4rhGyg=xo0)WMjRcYuf-8ZWh6emw0c@ZrO%(^a zEoJ5{0@O*k)4?0Kd^_(LxX(K*-}7*h?*JEwa|jP$Dnavth#vXQuxX>V2t694?*AO# z5H4KtS7u$v*aZEk-OlyA{r!;nSzjyxbFtQtr~f1q%}5g0P8z2*RQO zk9UTbt-VCM)N$p{=cZ~*1z-+JpUP;Jmc zZMEvF>T)5G|7Ie2MwGj56^yqa(=g78W$__!=^#Im?8y+e;y$HSVfY8UNxLc|Z@Q`? z`^mk&2lINoQr_p?VDBZ>8U9Vo2>SHZ0--mQ^+%0DM#LMon@h9C?DapG=h<89jc~3* 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�w!PrCSU?4uzdo=ioAF&Hhykj2e)VfCSU?4U;-v!0w!Pr zCSU?4U;-v!0w!PrCSU?4U;-v!0w!PrCSU?4U;-v!0w!PrCSU?4U;-v!0w!PrCSU?4 zU;-v!0wyp^fCoVS<;?_4zywUd1We!rCBT7xHW=7~059$2jh(!I%$o_AfC-p@37EhM zMu0;+2l_396SGaA25dX8LiH{aFaZ-V0TVEReM*2syyK01I(Amu1WdpLOuz*83jxO) z`(>o8rwN#V37CKh>|X+oH}>z?S#uLG0TVC*6WA{V9B=HGk+Pm9U;-v!0w%D32{_)^ zzhh_3O~3?9zywTSzYuV|v0p~YdYXU#Q<@?M2qF=JnovShAPEN(5ksUXs1%P4exCRJ-Vgrky59Y+XYJWj{xfsW zJ@?!*>-iu09$))LPxC^wm!Zji5`k^k3?>m@IF$;W)m$2{v<&r+slKu?~EEvMf_2{2YD`H%P!KjJ6;#Gm-0 z7rp4`{G6Zji+<5B`hQMbzvP$vl281^PyC3F_y~dD^iAK?59{OKMcYlqj=%#ZK(>%h zK0ozSKlPXX(qH-uf8j4AnvSl|{LIh%oX`23XFvPdf-%jmVnw^=Y5>Y4nhHe8+cu__->@2t?pI0w4H+AIPNfDWCEwzwNjE zwm|KRWYeZTMjy>WR+8!?;s=|BCa3;Y&u@fO#m)vqEDfe36f2zCkgk3II-&-z(E zi)z7?@!NmHU;LYY^KbsGzxB6%-sgQDdn_g8{oe2WCOPI2!5)A7ai3?eZ~Vq@6z13b znqTvZSG0KIt32;Tz88=WKwaE}Ut)(?cZzej=KjSk#37_x@@^5)UOCI~- zeKqNuG^T66{oB9&@A_T8OUL{zzvZ{+m0$RUU--BG_TScR_3QumAOGWj`cMDq|2uK{ z>OcI4|1jPETfg;NhuD{X>6d=Vmwd^u_!Ylm%fEE*r3l~idwx%de)sSG-GB6t{!wY2 zYX6gs`Sx%A&A(}F=*Rq+AM-wo>f zF1-HoU;fK~=nws&KlaD|*dO^Lf8qYVBk!7TAKzwsNt@kN=xOW=2Shj;jkfAKHsn8xux{>T3~OU6I> zC;#MX2!HBN{i#3sC;y}g#a*&=>u{?)(wSMUAa@BINE z@Bu&Uhy5^d-j{H=HG4gbKm@KP@B@Cp4HLygR{JziQJH#1M) zAUCKSfBmoj^~v7N)VC+o3n)(3hF<*Q7qfDR@V%G`k1f5`Hi%-JGjEoLLxG92bz0^A)LGUfDfc!KT7wi6! z#3T58s)-V-C4cYl{k@OMwg2bT_@-|>3Z=9$aDn{@?%m96T(q{OBM3qZNVHadi>s8@f5I>?^`d8p#_?;Z`>E6 zP2V7|=tB3XZ;+N|e%Q(3(ueof7cHU;y?U{|8OJt+q})&+zYV>p>Irv z&G`QOpa1i$9B=!!Z!4=8=^F~@dfxM%cb1ZhQ+=b=u!qd{fyJrilULsuYs|0xwZHbQ z-s-LFiuyj^=ldYMSn8>9gYUomm;Z9s3fG(Q0}5#Yj&rr^vp@T@-}#;2*^sS=u9xUk zM|iLIdM|zaLqGIGwGjP|cj(#XbVUJ2-!PTDedAPx z_B;Yl3Iaqi3#TEE@ZqcJcptk=u8=K{!cTs~Z}<%i>6|3*h5U>@#zKkzj8LJEb2B-UVXy?1jzJHUYCYBo{$>DVyPz> z-wC!dJ~k88QI$PWf65Hc3Tr*K9ch`CiWUoX*cY@kon7VHQS$H$^3C7;&6aPz=4-x& z1E-u&9uD)ia_=XscIH8U?XUec`Cn=O)>E=?tgtOi1Rf@V_k7RyG?v+p@%3N-^=4Iu zSJM+cdZkm}i|m@Tu1L;LCaZQO*cEFN=)G_oeZyc)NU}L|M7)<`j+~?h$oAX4-P>K7 zRi#r#B|R%|hv&cl_y6AJ9X0FZS7|K{Qcre$gH^{CXzx9@fWKbqfdiK@(MeYKTjN)^@Tq0vCd+`+MK}O^eZWun2|vN==cPq+n2aNI zSbk_Pi|yy?Y#;t`ieSz3tH1iI6@m8q<9^(a^ZJAD_x-+~BCKDUCH>z;Z&}QL`o=om zLPp@h5zu)FSS!Mx|M{Q)vw!x_Hl!Ykh$rK{m3K2!#{u07v{~l(tAF*cJ_r;efvEx1 zJo0mWs~}5@NiNNBF;}LROweY9mI+`PCF(4nC$GLSiX5+Fo{*dqW*6jQsUJ;!0Uay;B6^#{z=g=tr?VA%C*2*qlWt#A8~y{_tb12fBbQ3DxU;rX09}t!!T5F9o&(jPe>n^=oCS{Fwjv5uh_8sK_B!% zJYDq~?SDnzVBgdD`Fqgnp;*^#4!Lz7fe2hjU}i&(;hK0o37OdaFG+`tOhb@ju>~U268$ zHb3g6-6&4Oqt@!_B3T)x7hBhL!EFC=o~qs|SJrnZ4=ep~%4nOFC1ARiq*r>SFk}Lw zkd7mUb;W)$O9hKS1a=6FT+(fwcdfHi{;v}nhrcp_JboV)MY28=f!5z#vOvH;cwqO>96o+E7g5@sy#?;rA?nAzr!SspJ zH@3FAcykvx+JK`u9QkX1w5EG&wN4v$My}OTJ>5VrMR{9K_iRDdqq-SVn`G;7;F!$M zb=U`Y?!62}Y+PP%#(CFe()7HLAGx2qOgCUw##0vgODielSmYfqm*0J10-&oJs zg9v$deZyX3<|Cu?y;u5um3KBbF<9BF;-r0tzp2^j*SA)&_wHFOa;Vii9223@GIQ`CFg9* z?Vvkbk4FKt0dmM_xPgLrCM~4ca5q)2S|S^xW{LIw;>ims+<3vzw>uQ zxZlhU^^N^zKlJ*HKm_iKfVWMWO_Req=~&utN`U<*enmtWCCyFf4=%Fw%f9T(2%l3I zt0|FX2oU(Jd^k#-zTt-#=^KQ(x#TNf`AX2P(>LD#{omioqFn4Aw7#Jhj8oqHVoBw! z*QhbYAqIYOk^VE%n7%=6GX#IaCwu}d`-1l_`i3?@<+wuM*qYPp+tigGX7PUMEO!%d zE$7|d?cLVfzzo@ryqi(=Qhmd0-KLmRUEt_BL~Ko3wcPSJ(gs*&q_|$Qs#SQO&wu{& zwH%##Q#m$$LmQ@V=nMMP47*32>*!CZi&IXNMXuz{n67Ix7Ev}>OPt-|jl=o{6A(Sb z>Yh_U1cRMGkiKjh|LT@}^MRHV-!#}6syq<^x`-1o5mw~Pb zMBrWs7}Ur;6RQzH`~CE=&(6J`>nDt>jGqpk@_q^flQ<1tr!JDvS1hIGFU$p33_~p2 zq@3d;BuyT!Yhu36&J_Qq)Ze!(zg=dr_KWr9Jl8V`8|XVVufR z&m$0lTM67z-xzU09C^Vs1z=t`c56c0!;udk_F*5!v}=lFW2Q*fWs$%Xm9gL6Dy(jO zI1+}i-LkQML)-~$L0K{BX6yRKtvOkFxT0@t`M-<4F%vxt@mp-CZVVs3`sk1TX!&29 zu?};ld-GrRfp7SRZ}8iT^o={)7rvHT$TK`Y09cWUItu^mJ2s6cbJ@N;q!d(>W`oKnV)HaV~z(Gp^o|HZ~o@y^4>vg(P3pxaFXM{ zDi2!7yTALp%k$)IC-d{w1S1gmY4ht~!_);Vvg~Jm`&P50rt&Ou5RGhebKQA?>>c$D zZ>3D%I9s6wh`=2Q=%+4L;>GFeCJo&93CYGG+(v$WbR&xn^F!bmrhT5ew!mI+DZ<5J zX!2k^g<-_;m}Xv2#Gw`v-$QWJgRQ3*^GXeRNlLPN}ej_XPjY*F0 zAKSIHDw8#<^L$7S8SdN@^=5^ye)X$A@AEznDAly#+W!35kNsE*iNnv=2f>>u&X_{5 z)8CvHWmDl6|6z*mL68mW=^|NdFlMO&bNrjASjb_Shc|O_^kg#jsOcLNNDXzrrA~_A~m1Pre-V7G?@RAD^q0QV8Q!O6rc`OMVVp z!pglL&PCJK#^#mri|J|rvdVjep6|rtIjVg}->@I{>%Q*m7WczW>k`;|X`lc6=Z{tP ziUO`cC`<$*fB@f4%a^w5TNYUq0u#){hpQDstA${1lJ$zod5b#PvVnb{_j#WW{J;;i zr^7bVQ>J$S_=@myBtMBEUCja0MCA+!R%vapHT+VL$KSQb{XK{=mQ5SoQ?2Q zfDyb@K6?RZVq>Q|N=}M~8?QOD4#ij@s>NY8jI9R(}2n>Kh<%d9~S7 zDNga+p5I;HKx`KBcw$)YT-?bu&635BqHB~NeZ$h5*2}~}1Chg(zD6eSx3Lalte2DP zrV`&?>#x6TD7Lo35W4X>do!8*=5PLH#!TIZkP*|4zF}ce7qj#;YVCd*=Ue&-Wk$<) zy1U44Hv7qZpAm?_T?mXOZ@}WQ$tJ%d|3^L;1$0#oil)Py01e7FvoVpg+!}4kNt1|E z7pZ8Kc4hcJl1>Z-qzZ}3Yt-2h1~LI=ggOd&>Q6p+yx*;NoXXqbbHN0@$Zc=LJ^~a5 zD>ydy@x-`D-cHU9aKxYuHHX4*q%PA3ydqy*p|};r2wtoCU{a;1f0Nu+ty7!Mx~JGM z$j^Yai26w1@N=4>b%CkzTl2F$d<69k)&~1kt&7b@?0toEz|y7hq&6H@-^TXr&3)+` zs!x|ucb8fMHG2!D@;Ny^{0_0~3bVlVvz|LdKa>*_bBEyT%-cy@EYW z4Er)|BDcEA>Y|Q5{^LLXROI_5>e~oJ;4FdZq4pYB8?_*^Xdd6j0uySTnt6dNB1p}B zCc;T~?#(sK>&@$u-skWFq3tH zv>|EU)qa@b)Fy9I^ITKZaR69EeWY(tx2Tsgyy9^3XzCkdG@$0GzWo+E`iA9zLztJ| z-vjv_N^lY==0!%h$0d!yOnI_5)jpwHgzvfUP+3%+l zxp@;A#ke=8irtG&wa%oF5%?}bU}jrJ5Z(v|n*F}HNdPxqw8}@+z{HV{?fq82?&n;Zn>5h0NRE$H>q5^Q?r~N-?5_!@se>Uca5ZZC?o{@Er3#Ki^_I zbu+<6-;i5t#E4mgUi`UeC#1=jrJN7{@DD%qoE&|Fd7K=kcU=K+%l4$AXqJi?&nZQ+ z%7g9=-|!9f1ywnhl3UT-EN zJ6oUgoaYSBizLiF>Kp8VGOt0N&G~3b7BcJt+h537FUzzd+o>!Ovax8@XR|RpE$eJ8 zQ*yU1>rCYI4eOpb+t}r|`!a26hvT=tIZp2)Pv2Ot&_YIFoxtcDmUQia(Bl@Tt9mhE zYk=b*x|7y)|KIo>l*lw(_qiM`1xk~X3SwIb4kNz*EZhPToSw)RO_iNuDoiRv)^d7^Xi2jh@N5BIC|jYCA;N8kx0 zFmliSM^ebD?z+Aqys@51L<~l~iRY*w)BVkiEOWbzu%|8p$5)$3S-%;5g9$|jT;}8J zznzei^n9Mm-u8S8yq=1m2+SjbfVJvjW+$Hp@k?WHwuzU8*@;7z;(VxYjB6YP;O_c{ z+*(ufX%)#R!w|8ZPcpUXPu4JN=yzF9xx&7|rTM6JJ%N8-p>H@Eg;7YsS*YY(8@M9> zuv08A+7EkoeS=N!>_*h}vP>&_`qQ7zEs6}8E%4Jv&i07emP=nZ%2 z#F@Tv3Rlk~@Q?|N+~a`3e~%OUy1uau^fEl%{ASMQId4)92BgGUd2&U7!)(ZaH@EV0 zP!=m7V!KX)Fybk?%6igf! z=^I0vXRP;$=wiA9o}(_hx%HZk!xq5>+U9E~_S<`<6U}*FRF{>0I^6D}Z%isyUKq8W z`OIhT9JF<7DRv%O4f(-8_y;@ef`2AH`zpcKTqi%2b|yZ`+nkj#&GIlUPxzxc-)th^ z_emQ{t*0CU>^=eyh`{vL2dZz7nYR3oulOc9?(4>4iXnJgPvJ>oN!{K7E}fEC91ZU) zGq=VwLXwxMZ7Ea^nue;hs>0ks32~f)U+wD&^DT{n!-H9&oj78cVRt_7@kGpt&FHOExu$165QX&chDIyMV=o4@Fa|Hd?3c|Oe5{odQx zrs3_Y1Y66T{8*ZFE3|CR-M7m@-&pO}7n0E=E+2DD;h$w?Zr?amQdIBzd$tJi$uDrf-<)+T&pQ zDgJ#X^DTXY0zmlR)Hgg7W^s~uwm9lY82W|<8ZdbR18YJ$O@;cwH`QW_LstZw!25B^ z8)rYCia)KF+8}1dS@9R0;(zYvey;sf^WHJe40pMdg`Va*)o#yrG5Q8LG)DTEvQG~8 zAt=Z%#zD1s+CVPmoYv;7ni{95ZxzaZLkjk;?8&)>u#KzLIIiIG> z5C;@!SL3>srvhqG7Cz*27E1O3`gZa|gR-#5H)CF@GtKfS36aY!SDCYs4<+^uVuTO; zycJQ~IEt`8BM^bR6S!L6VBIxSW7U+0eL+Ncx}Ns5r!o7RqpfVjJ1cp%0A@zUS@S+Q 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 z2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wp zA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kY zh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9p zAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NX zfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn z1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P z5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQH zL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7) z5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDH zKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t( z0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD z2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wp zA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kY zh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9p zAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NX zfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn z1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P z5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQH zL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7) z5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDH zKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t( z0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD z2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wp zA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kY zh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9p zAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NX zfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn z1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P z5r{wpA`pQHL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQH zL?8kYh(H7)5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7) z5P=9pAOaDHKm;NXfe1t(0uhKn1R@ZD2t*(P5r{wpA`pQHL?8kYh(H7)5P=9pAOaDH WKm;NXfe1t(0uhKn1R}6Q;Qt2{>V}a3 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Pixel 2.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Pixel 2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fb1a6d44bc5de7b744bdaa329b89bc80a3b48abe GIT binary patch literal 1036854 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 z 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N u0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEhF3j7xu$;n*+ literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Pixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Pixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9de803ec7aea6050d92ea37b69428122ddda3402 GIT binary patch literal 1036854 zcmeF42V4}#`^JxQdvI8j*wSsW_ijvLjEP1~Vu~g)&Gf1y%z)p z5wT;(u7LF34)*`dE+WElcVG$p^W5k4T=sTn-udp_&9m>6?ekLCBQ-VR)fNAmVR1yvet=tT*~ zmz7jeUdR`@!-opEfv|uaBkfx)JRdr+Ot*&*u?Byr1*2C%Byv?6{fP|{dBa%o-y9@T zUgv8oU)SZH7Kx}yAzADa~dylH&KM*xeQTC8o5O)Uo)P# zn&u*BTal*XeDTwXcmazNxg9r3cxB>G^}661;YyXo)9ght zn!f3}VdBE^BNC{L1n}cbBY{dxAn%N5wfC>lYRtW&_eq$L4q;%nN{e>+qI7MqWG+b! z@)fP#8DZshBL|Ijg0$4l)^sj5HX6|z0=;4EDj-TP$4ZYqWMw*$Nk7@(-Z}e(NCZhC zK_qMX1;^kXoHUv*c7kN)aVbAVH~0l>(@B;7bZdY%KUT^cxf%c3 zwy-kc9`r`)G4q#i`#ddzGvadJ%C@LzKYnJ$jnYLcYY(mwt`x3UiM&*j$Ppizy(lFT z$MHA|=fX-S%RMAO0wh2JcaVT+=%b}W8??5z8l9xUyHV5HYGT7J)f=LB=DL)6RKi(C zQ!B~~`6Bm1y-`j#gx-jk*7(>WHG4ZF8ELg*XZ68?n>277hJvf#YDb=WU%ZbGkQQZhy zti^>ctv5uul%h@iv7{R%T73LjJXxdL>UF_2f+97lH$;8ACO9;xD^e@EC|0FZB=)FT zsK?-VK@aC%z6tOSez}+w3EWcxkj*p_sKf;F&}v_k4z3gN4V$v>v+>Ivi}=Px$$%To zvWtUHaZK;-)=e8)HF>Pm&wa7RM$HTPihhC9!piGL&M7hSVYQctZ$Q|TeyPpP1NUig z_ljW>M%@;@57AQF=E7BLW5t)0z>niN8#zhQ8%k105Xs_Ix<$iI)fqSj_uypdd?5)6 z;&rp9+BA9Gs%3Ml>eUL9LTWI3o#x znl`d(`nXlIhT# zXWC+?nwmJ&*h{@GxJI~ALfaIperk4ay(H>ev&L3M@eL%1WS{L}eL7q)EF>AO#h&8X z;dq>dbCCkvHhQs&XUA<4AOR8}feI6-KtpdLFQGRsN%iZPQW|QL@}JckP(Dxva=LEj zuf_ry8jWNt1QOa-L@h*=AXA#}DC86x%CcSnE^g8>VDkLGsW%Fs1Tb_bxljZe_4aD0 z7I763kr2a)rO;*OJMzlX8?w?zhU~hwH;!gdA8R>FVW^VKlCa09S4aWr2Aka~( zrlvt14Z5Px_TkcGVZ_LFX@R3{ts0s-4~T=+7f!*s0QHPEynf$g6N#OCIv6nVkd${=uRr@g{1H* z8Q+MK(vKBp*RzwTZ$&XKY(G$2-;#uu#jY&ggqj=+BaiaI19%k1-K38k){ZM zQ*w|%RV0AmGmQi)F@ZevN?er=uC=T`<$`2DK)a0MAgP>_lHt6B<_`^oweg$I!d9hF zZ>-fKcbr%OH;@+w53Key*Pl{bgQ$zR^)}`<`T`IcFyEi@tBstfj2BgsLV{?s@G5Fg z3rnT^SJnvi=nGahw$50oVP^c2P78 zkSJa>mBvbUTSK&z8EK?w8OJ0;oNmS#Q8cypsyIw+tEmaSaZU8y2pTvgUN>^M4YI>X zlA^1iRykBZu__B>20D6fB`K=t2??K;sG>*#=^!7SSKDLG1AtkRc{dq{u;NWek@cSLW9 zCi1*=e6x1X67Akq+6Hy0H#7*m6b29gM-dF@I|yB;b^lX@CvYoW{B<+hb4AK477{7E zi0D{}M1!sy@j;n-Lv41&h=qS6zOi?OHguJCxvMBzQM5rV;LT`HtcWd?u9k@B$O$?} zWi*SK_=d9nMr@dbajJW_X|Y@kvM{bU5Qu}eDJ>XIi~SfCQEM$@4+EKwXZBB_U@+-T{U zt|mup6s4tXsCgk@qnVW$JsT@|O(-+7oAHhFMk=bBwYVG>bon6{ zbW5pMytL2ULjoi~0whpg0u^ZJZ)Sl;9PKq$fr!@01-c*-GQzo-Yp{2j z)@hur$28kEPm~!YDBTQ|XkjbhMwQbWf=(H)5;Tek7j2-h1y^*79BsdN+xqKwtnpsL zzEXC&j<>~NNHmo9IKE+dw5O;Y^pcg?gjt8gZj) z5J2#mMgoRH-*3nXSOv*g043)&X9473tl!=QH zulwyA3;I(O_lnaf+Lq5qX@@N6Pr-WTS49~ur%{we(FUmEAu<;Ar(mRLv^0CN1$qM= zf5j?lQC`>(m!s7Dl;SnBP;X4OMc<8j#fzWLZ4w{>5+H$!5vV{zUz8D=MKo=HjI_Z| zv|eu{zFquhyu>#3MsXl2jf=aqa+VGch67dOhNr%o5F7Z2dP5^tBM}3Qs5guW?4mC( zH~t?IK%J+NKqV%SizvZG>433Gn#CJL5#I>WMwMegvS0&ZmEzWAE7N_k$J(OAmO_y+oY@Y{RC?cy6bDE=i2;u~XZAOoPU za4wQUTW0=_9?xsTSjuC97`TC+2^y-a814Ddo7Tf$v;Oe)a@)s4#3_zrZSgEQF<#Vc ze4~?C&I0Zgr%|*mpO(@NS{C29A`-EjMo|_;8$z{S*UdD${szX2qO0hdG<#B+5v{`h z6g=4tfw*E7wJ0xah|3WrJ+3^VPd&bPJ;%0Mmyip_)2dgz`03mx0TLhq5~vt~3N-X; zM)=)MKPVYubiaOmGjy-En+f~0a)y)>sWs8U7REQIH%hd2xA*7MU6lDL(bOB%8^)Dn z#eOAt773653EVz`3hE8qB;rvixZljyO&DELZ=Beq%{?z&+C{x#X?(+Sm4Ul&@d(sX zc5^-~o)tp9!T5%;Xx{DrTrh>oOdt=V#b_i@i3#K&ntfh6u)_R!(dgY0!tA-nr0k;- zo<_QJu5J4kR$V(-HBg?;rbaf@_tTq2FUi$l3-rbcEpmqs6>vlJ=3J3hDQirb?oWZH zGGHAHV^;xX!Kw~z%3gm%9X&Yn7aKW7hY_1d1W6%5^F0Wzwr~$lf*81go{4CWx@7l) zX|@q-wR@Ln_bn}HAq%w;+oU&3t#DN&RMZ7A2KKfV)03}CzZDBQ6&<5)s7sCYLVt?l zo>43XC#BQ~^ZhA1=ZfLJD5K>xN@pj=!N%x781AXGOE|2;!8Jm+6nyso$AbQpGXi_* zys$@Hjx*-_Q;-Y#ZqzGoG#&0F0TLhq5-1me3N-XN_{ENvRyZ4*6QVQ~l}&HpmIMuG zzA?#B4!se5yLzKUGg|ylwRh>{1})}bVsrsCSV_Zj@#(tn%3jZ09g6VcGm750VqR}N zrHtRer8KI<3b2M-dGyA8HH(+#mTgrEu2Dv_AiL6)Q|OIoi}l83$#0^lcq*}5a=NjE zKE`H1QB+uOs3{|t5_%&aLw8J?!I+>eU0&`X0TLjA|0aR*>J1#9ykE+Wl9nmY0L5d% z)R+c-`O&i2*@-8So!L@};v4tZ)?nyk#vv*5kdemjp6QL4-4a$p1018b@M;^kf0-7e zJ+lrM27G|J$kGo;hG^Z_?df57iU7!%DwYy|L8E7Ig;Mm6ieJ)f;ms+ajZC4kg!wN7gsTi&j)`Aozonkv?)M zp*JvE$+Q_&QzgLiPZGF`1fb_>Bv6S7!ey%)`}O*<*Yg-Y2-^OO`FY^n!AZDG-mgWTbRH$4JRZ#SYh(2auBa7T~j zG7`h2vVE z5A-4UT;C(5Md`kH+Xf$@?iF=Z73mGkA%a)nRvaU?u?PF{X^HtMNI|W`NE0a|eQ^~K zuQ(4kZmW9Z#Cq{K67&V!QWXIcOH|>hAE{;br__5u%m77)5e)5}C3*w- zs;%?4@7o|{k$w>qr9%g@%Ea?iRJXVLi$E4yaCFLG@Nm=?BSkAw*eiirKoBD_in7Dw zT9S3H%JX5327hkR8%KoR6O}ez_r+U6q7;9rC2ENEH}EK4WPvB$6qg(ziL0+Xs29iJ zMD_UMDIiUxjPyn4h;o}C#zmhOlB4)xMz?q4X)@>z!y^AT&b{S2R^pou`bh#LKmzxG zKn3&$eyP@fO~+PN$F^%DR%j2ex@iYi zYL9K!HhsLL-cXB%z(~7RqG)seu`Rf)Q-c*~O`xgD8{fdCM7vxNC50{4BEhyTtm;1? zGF3BDd7{(d*e30vRa#sW_0oeR2A?2ggszszUDB{YC7+1eqLEdrrdH4Qw8j7x+=;_6 z%k>6&I^e;um#mNN66qJma&(P0Y>5`Jof0qATX+utQ3{l$;G8HIvMx9!UD&Q|+1RRe zGpk1%+$>sA3OE;gH+b0|+n_zT@@97Xmurvhlz#q1DO#znBAi}AZ-5NSh}GTy9%YN{ zQ1|cvJG_v-svjPzYZbXcduXLLYO5CXz!0aXB(Vqk@hOfGDZ?f4zjy>5(m`rS6Dg}P z3c!SpI=N8`8sST|9a>nmYGT|FdqJre&$Kra8V>Z8PzhD9_kCSI6osu~&~Y<%>(HEz8TtI3a)G7gAl z4u(iOI%Ul24UBKei;`0J7oG)gMKw4gl0t%b_?r888)TukH*%Mao|l}%;zWe;^Dasr zzn5%=p`dUs1Vc)=^1M6@SGe(013%IAGtOLp3a+49QWG@PkBW{|y~R5`hyN-T^@^*x zw5aOiGKDOduJW|crBX`Z_SmJ=2dgEN7npH^(jL0rt>eI~%*_BpD&vvs0JuoaH zi9IC}$5}WRDIgt@8oKI~ItaG%JsUsw}`P<5=VzO=FS$Is03g@V3 z$UyAxQKh;A6!$P*QDle5$|E~WRLLkDnu{S2rL()VQ#5vvKt(m#LcLMkXQNEiR=)UQ zMceQk{-YEkqH?RHVKBx82_t!m4lc1#BCisk8vRrCM2z1kt~V4}E3&&NwP{*XOX`&2 zC9gei4SIs%4U*V{)bMGE7g9hvNDWn2bO<$sxBkqW>v?%Iffiu+hsv~W0@AY!w1XVK(a_&z5T~eItGovAGL`u z(TJ#jVjSR`FIo?K+4{Ne;@-A&lU;Ncf(AqSS-(BN`mF)h?+g;}&c7l?q02e0+q+1M z2@CV4*y0^FXR>W|2XUU!)Q}Edn7cZEmMxZXP)|Xyy)YDTL^M+Q=XC4bZHM-^e(w#N z5@Q!J6w~Lg!o2(^+Rk^e{rpXlqMEFlBg%pjz4fAXLa5LiqLsX1xDdD;CgK}v3g`tx zPs*@YtUI<8t)x+Pp&nVQx(0cHp}_Kzc!%fkUx=I=nHFt`qMeb@7bA-Hx=m|E37AOS z5;tz@4NTs-HB*t@S!w)NHn?i&Y{IoxU+Q=m^nidK7~&GBB(X=3yb_sPw3S2!Bbpux!*ZQls#YK60ptaB6 zw)3aiE_brUsE;Bt+#rFwPT;UEmqr4Wm_YVHoqSpsu~ht07yS+w{%V{24}ITwMjIOX z-@nF047-f|H>-NiA)S0&cP-EYy|EOxhdTJ6x^ZBc1Py~5dAu7nw8cmki6e{513LMf zZnd)(M^~nW9(acdt%XG}78?*BDNo&1ONz3fL@1X5 z2_CwUrc%vtA>ceN3Qj?1O<|hFcw!VNc4EkfoMdWUu(Wd@bX5uB>@cvWLjin+Fpn6kpoYiHO&KD$s@v69F zxYqDoTz7?)(JLZ~hR&Cwx`7LgbI;oql}G@*YWGs_!Yh7yBVreJ@=0Zkh(?2fAGs%W zDf@IdEGbl%d(m$A;KC!rmlR$UYh@fs4F@avgs7;uz^TMP1@w~yNPq@jv1$RPkoY93Xx^aVAB9CH!UfGHG#tpr3LAPj{u_mh6@z_M`kb7FU-rf9> zal3``$%rVltOH^L!sFX_ZBTsC*56o2{MH;>n(cYh{z}@Of*;n zo-VhTL0M3uRFtb!`z4yoYj(IOMtmx^3jpiJN$h?Rbs(Hn<_@`R;Flp5YzI;~QBaF%*{5lQum zzyFH3;_wG`62*@V)?xZE_H>2%g3`OBs4wW89Q$vE6<)p#9^#^)vNfn{g(I6jM!jLA zeim`&#+@esaZ4kCN=zUdQG!#th$ZESZ>Ycj7|icD-geSx+u*q({)}{rs(KD?IU{w~ zc3KeMSb`CH;#}MY8jk6%1?r~$U_0$cTf7^!X+PMegy{@NMP6w23@3D_)=M~Y`cFoV z$HDl>Wvs0@^0@B&7UjsY6QB9BZDxcn4-IIs>y;5M!UbxZf<~kQFSS?Vf!bCmV~NCt zW2ba$UA1Kup)`c)ivK7JN(9cuT~)UM6KUe2l$EB6cfk~`AyNR`x7f^){u69*q_|Hn zk6G?U&QTqLCo_JsKyRGUK>-?fL%C|W)+n`l-Akh@zNe^eh}244aV0?X&Y(gSu^(0R ztS&J`hhPz27$^MQM>ZqhwfXivVc&gfJN_%%8NZ1y0xnAaaZxSNNrWRCVwux2u95K~ zlm{1bbAptM|AzxR-giULvTB&%SY3Ldq$IX zOOve#8*#H~!YnE zhT?|k^eItH(|@XU(oIQ|aWwP*Gf0O?fCTOV zf%58&qIUMFPS&~S?2`8yx#g^&-av@sh)zCZ#!5&6^Ke9M>p*ODBee_zn zyF7|OsT;O7W$2AVx-4|xm@7hw15lRYPL|#lJwYbZL?lN&3l+e^BTMIEc8?`)Aon|^ zH%u4A=%=NNApE&(S3bRgkub-FT1Mrh-YAWfd+rSZ{4CH&pfVFcV~0Cj1dY)wnjSBz zE~bS0^j&kbTfMahmSVb}(iKvwlA{SLIHtR5L4S$}R-Y6Nt~lkm?!;Q@>CV=@yIAAh zs6Er!`g*X0A9fsnZ>S=p++(`qYox6{+U>qtyl?Xn?=`E5n7P_lQc7Bg9e<6m4P2nz z$-?jThY^LCoAUy&>?TU*LGLs0+G3&gkmYE>mx)!#p;5 zVRdVzw?d8BoWAP~HmuUdKo%Z?dN>e9kR93y3~&Tzr* zo40Kc7=-Qc!(uYj8)g11{735ZzgbND$k0fj5);TmH2b)2zcLZkbbksyMfZUib&u|h z{iZ55J}o$`ySm-{{1oJi+~I?TZlH}vvPj&t19$aHhY_CHh?&>60u4;n!FvgVUc#Og zj!NsZ&lIS;>St9+JUvVd5}y8p(w|~%22kOASoEiy)MbX>b)Kp}?+&sN*VjrDz7Wro z)x`(tus{m-Ab5qRYp)lxDe2ODQB+%S9rK(&b z`bh#LKmxZ|p+zQdNE>=x5a+fS+X=2~=VNSy-<-QWvpE!q5mj#|rO8O>3ix!-GpAb@>=SX|6cg z;ktrDx~tnHoMkk%qP&nV(u5C|yMbhpII=M7#$7!?KCClsd1z(Nd;mjzug*RkZjW#5#0QI>mvi&>BW36OvV1VlrBTo*Rq{6gZFv3w#Hi?HAa zU)38|wwg~9`HJxys@|~74J2C`^ajdk+Srs>NI>X~^L7(Q8XLM%toH(u1TlWYg6d~s zzNQaD1WyDyPUtW|TJ=K4b73&m2s2Yk8z!p6>N>Y7d=8xD-xSk6@KX{f9|7Ej(MX^Y z6F^&^e?)g`we(^y>w!;MbzR(t@(!7#xY?ahB24it<9f$X(SNciatr z^{NB`H0${%?Uqm1qE@{0jFAeXR?9Dk+F;!kA$KjPfp_E>@zpr0L%yiSuk^NFHch+6 zNxRa~h^?5RUFW6!Xt2$|XT+Dt@^8u=@so*=fJz{HpN>WXm7G8po=AexZl~=`TQ2VC z!z`}PcoG?AzL-lB`673f&s}kYU%;wBAPXT5^iP?tEhlbPm3#JuLY+h>jvQqtA1-`8 zY_W(-$<45NTJdnebjf(c@Evu4sgVE)kN^pg015mT z2q0dOwnz8-7dB%*F>d2N75h)GmN3K=!s)-jgk`LZ1Q08xkpKyh00~rO0y!8~ea6nT z<)d>DVxuY-lg^U>36KB@kN^q%y95y8Fl`hY|Lz51?%9yLG!h^I5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}fwBo?h3IG`KmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQbD2<*{i(MW&NPq-LfCNb3t`gW{mrf%A5+DH*AOR8}0TLhq z5+DH*AOR8}fvQX(ZL=MX1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNau z6oE~4X*3cb0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AORBuHrS=nNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c$|jJy-i}5BBtQZrKmsH{0wh2J zBtQZrKmsH{0#%#9I{Q=_36KB@kN^pg014bx0&DG4X(T`bBtQZrKmsH{0wh2JBtQZr zKmsICr3tLDPo$AZ4{Z zjRZ)51W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-Lz!ZU%_9-+HAOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH+1XkFm&`5v;NPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1j;6myxg8f0wh2JBtQZrKmsH{0wh2JBtQZrKmt{pz%u(} z8VQg936KB@kN^qXRRT-xlW8PC0wh2JBtQZrKmsH{0wh2JBtQZrP?ZTJEwQJO011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^poBCyy#iADk>KmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBw&KTLi;2d36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011#l*#r_7*waXW1W14cNPq-LfCNZ@1W14cNPq-LplTDCZ=Xmb0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR9EK_Eb%NFxCfAOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5-6KM!dyL#1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNau6oEPV1R4pD011!)36KB@kN^pg011!)36KB@RA~aU^$9c*AOR8} z0TLhq61b}b{PhX6{{VqFziM%Q)o(HX>T$&^-rs>WfdojPst}0x*T>Hm7H7`X!|+~J zibg+4fCQ>Efs8qtOx0#FgYC*Y9iXBX(!ca!VOTU-ZjaUWD@9)q?hw#{?EMvqs| z_%urP*T(rd{C}sx3Qq!6oPfVR$ya}7nf<}__D9y*@7`b^xY2&sM*E-}7QE43HGG8q z``6h=uC_nC&i)z}V)CuxWoLs$0whpr2tY6>R_(gzK&ck%TRq0NX1uS%tm(i1ImKn- z)R_}!I2M|t<3yN~>(6++lsFgU3PrtV4R|LweU6 z=5|Q08a{G4q+c9nzjcrO+A#a5#SZu>h!It;FsX`pV*0G2#AD&AWfu2u@HAZteo6u) zV46UJzg@~~+vM4{sk5!qW?SJsXRgK&ppgSK3!J}joB6A^(@);cKNp(o&)zV%pZ(mw zcXs>pld7`CB9Qv7U_{3PU#1}?*2lRsONSKRzHd1aZO z#^A3>^V1~xYLk6!6a4H=7oh^5CizOqKDJ0a*ISe4t-NQoi;kES z#VS_uOrHfU1WWbO=Xh9T*&cfEO!5}*rc>spRh|ICYqY9QAkN1D&F*=Rhqp{07&Nob z+8ILvrhTzu=DT105-?z7;OpOQ>oxLp_mSs%jEw3ry3l(57$xlIs9wLE?eV`01AYw~ z^4r#ze+~3<{(iaF2a7#ES>pBaVy{nDc)h>dr_T z(OWvaxa-~({lb<%_u1C9?`#Wvf7`bAcWxIJxc&Vg#ddFhe~+*aLT}ig?)U{=aY+G!Y+7x za={(;*?DKxK0ogW`{Mk}FV9VbeRXc?SLY_fzK;6mo2ZGf5mA4Qi24)u?b-2){Wki{ zFJGSf+x5U32e#A;+S%mD=KIfVus^xES_~cr0o7q~#i-bkalZOwFMZT}{gNR4%ANWZ zJN3&0t8Ln5Gx|*T7ZTqZe0^~LxL5kczYKdZet=>x4v2eUKwQ58anBFD{_KG3&kc_0 z{YLatuf;t5{)Jv2Mm;(F+>@&Ut8Lt=+rHU80Zsg!^B<`pQn72h6uezpy<7VHoNh#v z?whg=pMG&p_sc2Wi4D5LTXbhu*(G}EQQkY~5|gT21W?~-Ri6O#MzXK=lw0HZ6F*xu zd6?HfKmIkr$$9elj$dBYzAe{$PriS+{J@9u19<;bvCrf>Un=&sTz7=9`@WTHkCOEx zr-n*Z@t-#Uptx;s_ngv#>LhOBsT)4C70 ztbMn2sNvx-`El3*#SY31k0^FbZWt-7(Mh?{DaFpojTCEqQ5JSdZhBR*Xt{Z;TrW|c zc+fk1>r0z=eSBqZgG6sQ>|nXiXcJRCt&c5f)l`;S$#P3$hW$^-@`{6_Lqgu%y?dzT zi5DG-mO9T_Ge79_2D04NSQbX}tqeQiZGBmudU#5~EKQ7G&7u-nvT@zFT9&)!`J~`_ za#kbxdLubnv1?7`ORy*83(e%S&E%-&`Da?>pMteCM7A^>gSE~(pjz9!eXw?Ud)w#k zfpy3Y?wAt@>y*8{bM{tPx9pAGvNynbWUWzb^-~#(+vjc?b@_)~A&;zzXcxMt-mzWw z2X|MC4$vof-Syv3w7)5y`V))vGY;!rBlIo@^v(yX`R~&Vj2l!}{-t5=w~cZ~G|K%3 z)+F~c#XfDC^I_ARkDBIu@I>~oC$istBI~WDS#LDW8qzf9)h0QEo8}C5J6L^ogtT~% zy@=A>xnDo1uj_vL72(=7;aZPl+P1k;*KDbC*@jQse(LLUCXbl<&qS}OKlUCGS?7JjV;^Nd z@=4yqpXA~FkuMbcGVjrE6dRfM*tdC)ertGabZ)~RavuE7Fn*@1r^heOZoj*Fj(73= z!`t(Jo4j9N<^6t`cTY$K=#4QmoofGOXf`3e$v-(wCMh;8r-@=s9dm>^S^+wq8zT4Kmvt!NB9=qdOg&5j}WVPFuEi62{{Q<=e zWw$>pti!SF4v~tT%I=_8$FteOqOv<)Q0!86mn#`h#2BWBI~~~EfBVk&uFS1pF})GF zxJAbTL-&HLZUxz;4f{J47}kb=6&Czj=&n~QP>rECa$Ph_0zYhCV0hAyRyvDHy9eGj zD=^H8_#@xBB6=g!UGr+}h9?THb;vp0A?Ji*$2(>pg>}k4+&Md`q|W#u;)^jK9{-#_I%0$#pb`5 z2I`6AKE_c zwf1SRv`-t{F>O$%w1FMd2Kt6qUl1m(46;x15*v!v5wm_Rd1{f)ouvY`W@0f znJ)E7m7Xoz@M*7f>GgQ&&`v2VSc=?0y>Yvj;5M(|-9A0eTTiQU1g?8KsOJ6mD7U|U zp7h(q7VpHge)nq2cVn8po7n8VgeTrlZZbTz>F|_ChUYdIp8w$R{D(fiVV~ze1p6ZY z;ja}Nk^jiIihY;=$mslsN9Q;DIlaX%DJ_0UZ80vT#kka#zooSMBd*DB$wQ_D&Gj8M z&u8S2nL%~_k{eCPZTOF&;UvYT85%0q$k8Co$w>>8 z_=s=;oWCQ?uX|TZ_OxEJ>LZ_xf6dwOYv+)Z=Ai|xL-SgPE4Dwc%|XQu=e0Q^tZigo z+vAFz&TFe!yQn;2=knTLRP1tI$E(>-#K>a~EnOKn+COB%xw(%fdTPt%@O2-D6c6iT zi(0go<*ssW7dfxAVSh)t!29U5rTc$f5%xm`Xkf^0j;7?AAuT7v7~1ozkDorc8C7!p6@?U<==#Y}tu>ck`4Yo6F{e|n=sJh}t!&@U=# zQM|Xq6@Lf6&}#E{YbP9O)FS7*P8nZy$o#Tn#%G<^@(8AIA+yxBJW^|tAQ+or$TKK-Tk>4RWTCiUr+^z2iKy`PWm z)hnU*$LHFt-)S4L*FJoueX@r>7TqEhDg}xk>#JWKs$CbV^*N;NksGJRS2uPgWd5btHDn&kwly54Zw|7X6FCdQ|FxhjLI zHwMOSe^gFtnRn@)=?zGZzNzz`6E?qZ%ACF_v!73y{X&X&-&Eg$Np4329Zv7GJ-bPl z;GvKAvcDs$BiTcj<}Sth=sd#h{P$|c9dGnd!T6@RKR3?%sY&j4O>%!|mOT<;qhfla zZF>K<=`Z5FU0R=}S^ZzT)^SacmG6GtzEyT|7h?? z60nc}#74Ad&C4DST=lr`giFICvz|CQtLcPslm7U1=J!AO)_tR(!H~QLLk$nUrPwe- zgLe%N!afjUqg;C9(I4|4`^g||jACOA4S&n6Kepice~wM}nl!`npO9Y_1jZ*~t(IZ-__j@(PV@qB8)3n_D6NSWI&+3&?`{1Cu;nO!jys z!Fku7M?>~B2;WgJ+Rx$Y>}oNXNqu{P4m9^C=GBdyU;n`3dQ%S7cREn}`_pY7GmLGX z^Fy=T@0;g*+dSvH=Gh}EtT#HO_3J3?g)S-2woZTkwQHT`hT6|ORCC9MYS(@2FU}Dm zjtWSQ3dc9rg=m*jZ~Pa;2EG@xN>3oxqdH<5d#3c9J@)hUf4t5B8J*-!*{LFpBWS{ka-Vwdg{%W4E===^b zc})}Ky^Fi0x?9C~SGU~Z-9c}J>>jde|Huwy_ot|x9i3$ZG|AI>$w7PG3JiTOd~3f% zcct&ff(jYqQzK`VX7SFd*Pnv1E6rtj?4>1#cD}f6-^b?{HnP0b5PnJS+GV?j`t1M8 zEBx#BIcHiKF1E=#*EaVwtX=M@_BqGfi$NVnJLVkfn4=Eo*xxxD!#VaU7TP^C7}g^* zsAuNRo|%D9W@0SIW@R|XMs%sbo=ID++OuiP6vJ?iMXG`ILDtq|EM@;s<*% z+55$0FU8!SOZ9y(_RpZ*b=U8IeE-I}Np5zcSHgnpSmKyiZ-;2_>WLoqJyO1}FHd~j z@JD0AIK_T_BKLGeeBb6-U@UKwQL z9btcLk$sZdu~MEQ#Cr;%vN}Wy{or%Z;{KEbY26;}(tX;X&AMba{dF|E<;j!>lK=_a zK>`Whc1hk6R=qedqwR{{-wyug*{6pctvR6J!IyLEznWiYcVBNj_FMkre;9=QCB#O# z^hOgeLsRd($GznR0bgyO|LV4Y!FPlY^hT10^@bH6%vnEv{<{Bl2}!>F@f)h%=n$RP zDLT7Zyd1uuW2UPn-cx6}!=bxg2@4vGv7l!4hBAsn?wy;kC;0W?J#R&9dCu~dx2o%n zahDby-QIWS-uEvoeBAOcA#m3w{z0onXcemsxn`iX- z?#$y`c4!vt)t;GWm+qp6?;auEG)=^`hoAyzb>-q0c*l-`%n2gC!9^S*SOj z$xYfC^3kTfpNDLHImyk|!i-|PYvedp)%ZpWS^nSUm3sqUUl%?iYGD)0OAR|o*>l+Si2(<@xkvU{AJqEFT>G<&YF@({svb&vZNV=Lik9rI3trx6 z`NsAe*S74M`qQKNe>J&RdZSD7ldaO9eeY6>nFnf*J5hJ%+G^(l?2a$AkHJ_D3!GQK z8bWV)>o)~!w*_nGMpP)i;i|umX4>K$d1MtMfUg6svJ!}Kub$+oJv6Pg*N@+>9sk-( z?*?o7$kqDE4-Ay+zm#9^r5nKwL^-NLe50YaJTbu4b^b)JfN^)E*2Q?%$Z^%YwqW!G3me=Kgkg-AA-`ck0y;#rc@gDY;xV;@2GnHDVV5>lJ|S#yx;Fle4|rJug)n? zw@d5QI<05JtY^j@ueT_~)+gNl0+wy}&|ilDFjoZi033N>t8{FOv@TTYo+&27nxCJN zAg$S>U9?Xdi2f9pa^z*9OFWDONWd(Ccuy>zY?I-uiJJBBn(;%zCw2ee;}s753=a>= zsz1m8u~8NEhD*T21q*&y6fnYU@hv$3dL!Fa^Umg-jrQcX3(8c*#+}t0i-W)0w|P+T zmRBv;8_Pp~TC(pqufsDe)Em#_C9mD{{fe+LJGZ`*^qt_a#8R5GKE=h9|HZ$mD9hemQbeG% zGTc(V@p8PhBT&0xk2Y+*E{S@>GF?}kIk!pRb_n2RC*H&Es%!1A$z6_3YqntQdvCwL za>S?p-QPG>vwuPTfqC@?39(V-^hP7^f?;!Z51+gJ>p3fLhfmSDs@`~e^RCDD$ZdkM z?}py+3Z1ZV$7gGHd>MoIhPy@ajb))fFWxua^YBbd^hRenzh{2tcb7MRc`b1I5vR0S zRuDEt1vIfy)#Dq`8&FyPho%X=VX?|m;~R^2z2mumlt=h??Q+hwG+b$&cTt_F(l%FJ zhy%SUScu~o3@d;sA&x`JLL6c(4s{`p?pf+W9HLhR!3|{vuq{uC5Xa_cFl1DOIMzLz zwope)LvrBDp6IGSKCjxAb+r#J(Y|{1!+P@crn!IpD|(}IO3yAyUE8Jh zeE&j|pH4nF;>;sE*E&Qjw~JV2QO!qnMR86owY#{;ZpUU_w=DDVji=J37m}rMr?uZ* z(0YgJ(r4*oEsmv__;&E4%1Pil)>olbG6J#g4hbGol+%MgKYX)t%+Rkso~!94>-)&H zUXbez$gevfzXEzgtSnmA`l6%q9)pd}d+d8*m=9}oeu|0lqK&8Js#bcvFLizj#)~%b z7WRmrT-Q%-<(D4gUJb>Jb+1<8>W9;>dDO~uv3h&cUC|pIV{%(vm#2h#&)NN_fAC+? zo;Bj!>@D$j@!nq+g#Y1o#K{u9fsPf-QfVX0kIV8~*Y{;QSzq<4jiQ;&2>xWx)GXRw z?*5dn1-a_dqh|YhiaLGn?1tK(0==I=-+?lCyQJheb6Z*25vuMZ0L%yB_;T zxrdK#n{&Q};cBbAORe+H!`kFUwaq;xdR4?Ijz}1Wa3}*gFi}O!Qh{~P41x8?+}$%H zuxCcllNmcPc%xUwwx`lJKP{FU-P9XvjizDMueE(rR~A~@vOa0cpG#W;v7wCOz!Vio zj(~p2{+Ju9OpjG(sd!=_$Dkya{>kpor+9YBTI_Osz`3o~5qoM~nd1ROj%;|Evzrv zE`3P5^w&zP_oYluxj8=t<3-V*g7^mXM(5Jadl~^%A`AXW z0wi#!2%x!%_t0H(uCwm9*Fyg8HU8_V4t)%d^v|sKVjjds#q64x9a%R|vEwgtEueNNbreECf2J#Hc^+t>AuN&r$cr0%utYO|4ihbTF_v1#npESz- zuu0B4jdR{_nK`sw`YXlP7d5RnIwyDUmei?dQu{8+9p~+_U%%64(>86AGhEdtqQ9e* zYAUe@f+5vKAGXB4wLu68v#X3ka`a6RPg?omxGtM|!yMicw5!;knD0!hWCUW|s^NiO z`=_*da&W|pLxVfL9Ccscf_g6)>h>36qr7_Kq2Y%59~2D#-?|aMF8p%rlCOSStlHPV zFBbOa;&1*|Y{KGiCNBQ&pZTqSNqp$X0<8B{V*L#h@r^HCSN`BW?=!cxk2@ALa?C5f zo_UG*MpJ)7BY(NQf6|)S@2s5j!A`&aiEi3hH-~anLL8sqsy*r7eD}hBkpZ1v-FBeS zZn;fx&YkT~!TKBRVht}}JoCo+$YD_tS3GOSyV{xdQv^WV^q<7+9-4S!NXkhBE=sqy zM)!0r$iY+0h9pLYtQ)+3$0rAuc29J+5y79bYi6`ZjqDkkMcc{|-%xTXcsJqjq?2?0 zIW>1s`la?5(OO`9#dV{8-jSU*^~Ub+{SHn$zMxIgENjz+E#d$vp5P*F-qwHl?l+h0 z8P+!UeDnNk7&6)_?*goK9#%L%tqdGJ)h_o0Oc^zb70xkHC89&lp{LV>CPe=5=kcHa zKK|o`TOpzvtN!kRjkRFr)^v2N3jfY)o z_|dt?cC5GCy3ua$3i|{XJ)AEpNa+oHieVV1=Gad-p>;l_9d%xdfup9Q9C(mQryObY z30?LKeKa~{ZcyR|36Q|uCJ^mfJ>5&QYhn*gPr2GNa*f_{y%+N9!pfsJ#Nwjw8Xo$< z@bK_l=#78=n(95}N4LpiJ*JE)v}t2JVAIEV&iuu5=Ks7LfAMe{GkezeUB+H*@S|KV zy)nz{?*QM?)4ZoV=7dJ?uisN4FWuCNWeJMGxn%ICli%IwN7)gMjv9)MMR^VJj?#T!kT{`ebjSr zjn`w|tSS3GC_6o#KLui=kzs-fz0o{pWb>R+EwaC9nfYboyiwC5>Mq`;2?(}XaKjb` z+o(1_SX#3~^YOWMO|swYkUF?S`b!-izN zIeT^Mw%8%iVMcGb>7hw3_}XLEN#G9c)MMJt<_2<5ZxmGwZjit|CJ^Ulm*uSqnbfh` zGlmEIX4UJPC&Wg1^hUk6^=E`_vKpe$zy)^oIY{FqzO}|{4=@GCQqIMn=*Oo zv`Mh((zM<%iom-w=AN=y_-LI8bZ}dssF+c3pIblNs!rqt{_9|?C*eeUd zUV<&$J7D47{;b2>JxQ_j|>GS)nmvATEKif7VSK9{!061{v3=p#O%l3SRAXP90!uQ0u8o?&>_o6WGxogdA6yJhBUtutR~ zo$+$(%$F_K8$A+RcS~y1C$7cPAl<^=%V;Hw0-X9M^WSSa0M^*T-OB zEylVq#PR=$9A#qFrj1s}jbz z)<|*E1O^Q9SUqX+^6&cXh-$i9ZXKL^$NN(d-{=sR*DfKy>-CJljjxAnd}aTtXXBl9 z*IlX^br_cq`=85N)Vsg$@%{8}LMsrbjM!VI_o~Bu} z^<&GQ534RDKIY=`z1v<3-Tub=@%te^EYur_jkJ*q)~|i_q+jEM^V%K`Xni|&D4@+L z|0b8b8(i>tB-*W(%FRS!Z~aJr#q++ap0&^VJ=8Ay{1f@tTNtjj%)1OzLL5;_uL{=U z5G$N3%bSaVqn)x2w$6*}AHV6UN39FqbuW6?x#<1Ct#|2cdYH;dtkt_kY1l({`0Af6)&XBS4NE%O;izcRR$z`!UiUL3=#uJ-CjzZg&DFh zqyM)ktzXk1(y#u3fCguMs$cNdpZ9hsvJ2i0s$tJXFZ~I>S_cB^ zMEcj6z3cuN2kvv;cVCaB=h~;gi07xM>zS7rFIqgl0kP2~xoz*bmP>+k3wG-^ZL~{r z63*XxMQ-^s*2N)Vmcw~p{gO~=Q=l|4QZlPIuuKPz`RamnX0%((S4`;e- zlHF_)T_psf6I^xT{Z@;2u}^i?ggW+GI{o7pt=!M;RfG z$DQP&=h2rQzX81gYdkl6c-9)ndCPx!VaGWO^+xN+ z{MIK5TA#>oeWuV#Kaaj>y)Pj)is_9l+dtU3{oRoDgW_iy*Bf!p`gmtMyjM(bK!K>^ zJsQgLA4gmblQq$l28C~b`Gfd<<WWp>7#Ecfu#LhTp`$Q+{s(bBn>W$+s#%)ZQX&X07A3w|9GSer_vP+sJ zWlXa=v9SK~uR!}IO3rr9Ms=@MtbNzud`wfI>MNlxgyvCEuczkU-Q zHLIH+tm~fqT$_vm?bG{Nt~ZwLk`@I^TQ=AwI|_B7swSh?sKR>V%S%$^CMh^bItT!Mz zFj3_Rx!}(uuG!PImp$vox>hf%@>E!Fj61jR;HG{DHorJLZf|+@#@L%g$n_`>`DIMU25wEobmL+i`V zX5$;s8^bR5Te98SC9Foof@+CQ@XbhBN)!!$;xMR@^&1`L?$IyUrSB8}bhnhgJ(9)4 z+7!EGK5Xgu#xrp(=kBrh3)QdQqK|WNxZ>#$jWOP3goTkE@~S|51A625Mrrph>GUG% zjWY3;g}qAbk9BsSRT2U*&iL)sUvRARXrJ^4o-U}{+fb)ZzAy{=Qyw0gQ|tBo=RXSH zJmIBz<3A0b(izJ>M?2RjDjE_uXVtGd*Gh4*es1jHIzP&f|CDF>{FFs*pRad+YlHin zVIIAXd$jRz`=O4r{DgD13BB>e+`Px;%Dv~FpB?bO>GNi6_8FW!%j%kQO><6)Qe1PX zndE4-ZSLS%t7ir*vnamN?nq9PWAd*%7cN*o#%JT-ew+WCy=lDbwrQ5=jrIwKF4r@C zgD3j$p15Mmhy*9CXt0WXaqwrnqZGdWg}`0!2JL*acWz=wb5DjX-JhcF!Ke?6H649< z{h>|$w(kDuOhB`E$CBBpS);clYpT`4EuUE4pVA{g69>->`zv#*Rr)lmZ_cl2Sy0f! zkXe>9#rLB>1@Vo&3%jPw&_ugbFJAnAWjk(`-6i+?+htvR!VupgF9xe{z?6w9=fy;o zTuf9EE1WB%M#V&xj@d_A8BX_)-;xNP&bM4X%l*fNPMoRRv%2Zh&~BRoTfcqXv3L5C z7YZk;h`B22<5UKSi7FU4ie43$R}vkcPxYP~(KR^mzHLDdUUjb)@8odF(_#6p>RY#1 zPdL)4j_lbae_F$W=?(KIH_V@EqCcfo)^~La#*K-1A$PLX73jTUHPG_y7-t9A!a)7J z-F7bfYPC!2Yff*pMVAV!XF~H%DJ|c){P>#f+JF$ z(#Ak(f@S?FU9+Sw5Z~A!1qVu}7TU*`k$CCsxQ7HtpaKLi$1}yv>e{RtkMzm7?`gSC zZ$)fapf~EhT5#VRvNTwJYWUGjf4?&4w=efi>5}Yf6XSgIM=8NYo9JR|+AuO9+eOoN z?4k1NjU{fMZgd~I$^DIRj~*vIT6(#Swoq?8JNMkefKe{sQAc!LCY^>!VCcl5~t@dlxpK{)$9T8!I;15e%Vx5*n)o#oTerkR|Yf0H*dL&O8J zmc}Mae+h2{rBD)LhiE@s{2gjHlWo{1Z-}#$W_HSpqO{w0cS5YKWT3pkyDzz?lAN=M zCVBnfjg{3>i|eHiaCyV^ALEUukw``|@`BGB-6(DV4;21K_!j8N0+nW@rwp;j`Vx7% z3np)B`3^U4jN8YayuWSj$tR0`eR=XiK&I}RFwK1r8PYZ8NEdHlD>t6`$Vlq3k>q3J zZZeU4Y$Ex@MDmfz>^G)U)+-f^?Wcdk#qw&P)u~{s<9DoAJ++==V|fz~Z%lXPta2^Y za<`Cm_jYr<@YZtDW2@N(RuVitwU+q2Y$Tr8&W44(ye=w4cs6j_eiUX{I}?*7__M^F{Z^>097EHvVH|Bw1NfH(ZJmdAYFzX4UT z_I>&{-rG<-(?*5G6V)Fr1OLWMwn6W_Ad2~_ZAN0(X?Ro-V$QzN7B*^7( zO&*Egzws~d#+f4IZZwjRiWGSB{TrWg9QE|<_%FS0O0MARYg?e)6dFnhnqR-Add^hs zobiN>?V~Z?;Pe?!nY6!S%s%$~BgOHWJHpfsW$CP}w;)uT5y9L1$!VojnF^WHlxZ5q zx>S8_O`{LeHqr*^80qL5f^_MII(mi%`nro1EBadxOSd#Mv(mP)QqHwn`P2#*Z_ILK zfo8gKrhB4eJkdR#_w78Wh8{-7o(y9zOeQ`b<;O7L%G95MDS%-bWaQvaJrHw$d>SgA zjLuGF&q?dV#2pR`|8}1b`#0Wjj#6`rRJMwxkWsLnvZ}} z)@5Pfx*9`)@VK*1d3x^InlSGbroQ&{(C__ys1|{oir>q#{nHh!@0;EAT3Kx*0QEav z+o~|7FpY%@Z70TN{E-{Khw;ox3Po|&-gfau8=X*Tj3h=J@y?-!q{?n-tL(F&<^ykd zE~_^nl!4#uYky@bO-K+{b51?ymU5P!PZdMK#ZmgPPz9roxt&;{3b#rHI-EaW)b?1K z^=d~|T(vO*`~T_b!+$Igh^aB;#Zy*9C(k=lX}Z42e`|v$Z=4DYjpZeBaFN5BOC6R! z)|hT-aB#_6k(x9*E@g5FT;xtXJNU=un)-(b!ad+&6(> zl_i)INUSrUl)>-cFE|BN#^fe_;R3r+3z{}9t=}k9zy8yH=6}uK_z+Lw@y7n5>A{JJ zbCys##8V8h&`kH;C^sd;`rp`*d^3^gB)sty=tO#=1c^*SJaUj+KjE4lR^EMc{CD^k z;9HEIQf4X&Po+B-x0WvhQ1WXHH|Yas7xcx|a-zx#bLEcGp|sCHHg{pF2WZY*if zwke*RV;(6%ZWmnK6x`fzxp`o6_xvdDTkc$Wc;CY0bIaXNA;kN_Z;>f8QaSUJTIZy4 zVWU61VH>As8%H-zG{?^y%W7KZHnI=B$#2mkFpY>zV`2rQ0dVj6Jl=?iJMEgQ?UkkW zg}ebRxz3lQ#3!8fyhAH+onNm@=L?TFCM2dDzZddsr}V@d zi|VBh6;6wf5%5nPcE?Ys22w0OXTvVu@XA6Wk`Y<~u6kJDjguuvbRy!FjpXrpqn}r1 zf3M`Pwmg(M^YyhYP;Nr0F%z`8aaHRAUF(7_e%{!6GJosI+#_eA?&!#*($?Om&w&&O zSleIEDWs?g+0f+lsXBTZI>+RrFeyYGSK>+~>Vzs+YEdWDqkh*2la{aRZ$EQ=3xS!lZM;Sti`t)n ze`9NH;wzW&Pdui-avWc2Bn(f+ejNz*yTAba8xp=*tD=(UAE`83-xRR*Lt!khP{nCS z9b}F28gXD*qd(S|ZE0`>|3*sU=veS?SWv1BNpGx04erda!Oa^}IU1X*PX@&c*k_8Q z29RrkH~P8fe>+S#aB#CcwHtoy-JH{}qz)7>T+j%^+CI!{>xnm(*3I5gK2ziV$g3|# z`$mmu)Q3~>83UG^keNp0cQ&N(R3t4HVLU|o>@N!aH~zvKzQQ#I@U{BP%KvsC{Qv&9 zEKqJt=Ig6lpv)Mm)da1tU!|R=)6VyUH}r37nky+ft6Zov8&YFBtjYv|RdqWY>=&_( zrmTSmjizQW;tv$lX>{Z{t}dXXE^~Di9d!-UWVwFNYtu7lm|JMtS}5MJSXE##*T($j zcr*5Fvu1IN&YtRFyLdyw6Oe;7!yBFGhfelGrv#u=0x?YuL8pdt6^Tv-MWNGTxQa!m zC7@Fi(OF68oa9dFxq5C{UldP)XbX%~ z18)O#{+xoMIxiidH&;~F*>^S*D-DIpv6D-I7w@en#HF6hjsC%~z@p#0k*(RPL#Q-F zq9czxK$R03e>9XthL!)W3jox**SM*a>AIH z<0`LLhmjTJRgD{G{d)=Dj|oi(jpN;P|8tB!D?8KvxV285Lt zT9UG2k%CafIv-imhCs)1n9J6aKJZ2{5}km6S0oquZ|D!gG2%J7{AKtS`2S{s0rQ61 zO(X4Fy5_ZZ@6Or2?NYw&v;Es=2Vjy8 zZkG<>DxzH)6xlu}nyZ-hIq~gt?(bo8@3}c?&teHE2|iSUA$4n5QvXF=9i%ylp?pjvu?oo8@%ie@N%qXH%oKaCQpp- zM{Y?@K3Zr!{;#|-J}Kpwdr{kr3rzn_-pF-X*rY?KFhIWgH*{dUv8f?7D{4Vv{PMd2 zl1v6J-hd4;8NwhSjcNw5K}R6Ze`;9jqLkQKN6StBHQv}>eKJ0Fs82d2$Cp$y7`#zw zNPc5Qwzxxf$v~7IPn?5;H@L_lxuJ5#+$M2)+60cKaHRpI5~3>IkOO$*y)`L08MzmY zm_Ok2#%D~_-Dv+W-hr!yudi)^G9wC9Sz2GaN;^lVo$H5xL*u3a{g#%cf*cSIExxxk+c)n9i{$U*zgCd&*U=uCu4yz%&rvFk_gTQ?1Qa;w*NjSZsH* zxOmDk;)bQycB_IZRvdAwj_&=w{>B>;-Yf}UOp^XA$pB1J!7Ql|t|C}cph(v2Xs%*d zv*R&ICt|QMFy44$KC#+h*juv+a+yI28NR3UQsxwK7QO4}-M;}TqdUq9BjV0`r7EWd z?5fruQf4dyHZL_1t)~xBd+hWR^Wn*gTxc8KXSql3S)=e*$j^jC4(fCFn8Y(a*$QuL zrZ5eNz>^?&0snDbL zMx>suw}0XN3PVzf$#ARm8#d|JHSX(8N9!e7m6GfVDORZzt86yb-uyj?8&!eC(bv$3 zLz?w^U1L^o(oV1RgNdQ5s`UkVr?1Dog%+2Fq$11V5Bw)T@tKh4FP0QCKi5}G@80jH zO7t$jRohwXwy_cBxM34xxq=SoE+A;cv7^pzM;+9v*g{wHO^q&2xvP>A#zrSkEj9xW z3F)sDMCkt%^9=M6Tu_gm5V9%y6yK7Y#kxNX;xo+fV4n*gei4tuam(}*+ z-vHiNQ6ssgN^D+(gzUrd_q>p}5aAbgBqqdny6sP?DH%q@mRk$EB?>L-L^jv==-dFO z$DjUi~`hDqrW}RPn$o!A|~9OEqNz<2`=%{^Z^HTmcG zgIkjk!Ft4)orPPwa-;>SfNP3z(f z{X1e->Ekcss84}-%0yJ-(7TfzngSIDB9)NXFd&O{{}gy3m<&n>O(@c5;;i-!%WKvw ztzRWmx2&gl3XeBdSBWjCmpJ!wTu9q<(4485A`3 zEINq1VQi*tYp!H(E+1-fG{WMrm*qKKYg21$^`qA56Te~JC^Q{oA47ACQr1j!mcqvy z+e?c>;;y@;Y9$BktNw&HAj)v6D0v=-jk6U-pY8~re?#rLPk7Q5k8CRR8>!YCT45;k zkvFD0wxb(mquyRv!vo6^yLRcC_);1w) zntDVIo`2(15t0~#1f(N(q2CwZzwtkb99#c!5ZzOnnhGO}mZ_Fk__C=w|7{@58M}(qQiesO=vAC{t zQ5|bpZR@V`cdP3wso54S+Js``5n%Qb zD?*b`-woZ89sWJ|6RPwDUs+Fgyh9I2xrK)}pr^-tl(V<~wM{NV`-xk8(7syw&`Nz` zPVlzqv@^-^KW}R-gF*Al(2m}B4E#1bn+x|gyxP~JCTqfO-)Pv;o*((kK_H(Im>N+5oR z+eCPlEHfh4=#lcBMYQgHXPq(p)azMu8&@r>UADANW?9{0(DK?3{WrMI4J@9*^KSre zM8*tr1>SHbVX+T*ICk4HY~^%vu7|Mk1H?T8IrAPXLIJe+Y}V+yCS+?Ja`vS4OH zZ_MiemP4N|BTB6vl5anC zH0m@FwVQ-mP3IU+=NNxQ-hgPxV|!ueG$br$$d#wlq?=X`B5weSJaHEG%RrK1kn6Ad zXv6_NkadlSGzT$F6>g)EOFqXiUwEhGf1Gatz6A!%8_u`R`YZe#s=TjH-hfSjA?^KUpus(Odr(n+?%$s3F7JD1nDNOW-I?z*+;2o#xo2W3G} zUE825aI!dUQ2iSiZ-CEX1-oql%JI&T%Zxja9DiiMym7duATUMFF3%{#cl!t42wb0( z^lN7HUi`cPg)_@I?I7@(3|J6yg22<2!ua6in+~~*$4>JH&Kog5#zlW`n{^QXg6t%7? z94Bw=thL))WxlD|CCy`Q9bEu2UU%P%*M0B?_&v7NBamEbmMYw=LoPHW!)=8BbogJgKpB))@%6PWP|BcG z846loxk@`jr=96XeTtLZSwH!oLlpN_7zp=y9xE6^@ASto)U?dhRcnSvYxIZ4n|!ZjWo~PswAJSMWII&CuH!55M#rKD&C{N70$dN* z(*@rfjV@zQc;+fJ`mTm97~`^Cyp$vJwq;RKM^F7Xz`22`zH?ban^YTm_Elnj$hP>X zBgs*R5@U|s3EO$N_7VKvho^AwQ3)PJa39=##4mX3;dTH+jqh1`rzv};sT3QHWYUMd zw4C9TLk~#4rSzij{0-P8*fHRZpd?xQT*FMCZPhx2QUlRa1Ce5*;o#`lRrd;f4zQs< z_k2(mfYcNKv&)5v-2E|lD9EJ8@px4mb90U_%7q&kJEoy(bxa~e@Nn5^5TP|o>YZgx{T2i@6 zS=F2XTHPGCra5L!Gk^zBM>uFhW5|ZaV9>`zjt_+@TN^xf);X?i_SbxJJT7jAU&g{0 z*56gqg-Z>{r3RE5UF5FalnJQKbkt%RYKD_H4!k?rOcN+J9Eg>=+pX&z*riH3`K1jh zDo*%L@G$vD(I5P74FK`Ldy6G7m=%Ny{;sn;fC zI4}8@c*A3JBb2LnEN=^^793BEn-rKa=cV7WkjB!2c?5B${m3vodzFxb?MoWB$F4 zIrmx1@78U*^LEKYW`xu32Av_r2E)6q9AJ++ogvAN>sP#G?s)oc_1oI{rL2V|9gE63 z7nO6x#D=wj{^sBK<4tO2#JS9IDP5PG9P)P7MvU0tWiiA z?cKleY+?Ho(4zK7T>r*{Ui}-1tFYKgJRbkXrbh2wwT{P2>3gfKO>_5V1y6{Hk$7!6 zvf|tJZ}f{d7S&1o_G*H2iV!20oZ~{S(fPa!VqpG_<*mr2H;7w0VtNP-sz1oRMoUlQ<7D19DlJ>>{9FWEA2C`a&^6Z#tlqja_wTbxKeBv11Yu7RN+ds zU0kCLlV+Q^7N%J`ZL@SSNibTcGdh}9EDfE_Wp~&V zOtoW6*|p)1r$`5PNQYpW6W)d?qHS(e+q|gOxzTNN;yWb1~OFL!`@AKzdBwVNWe29AmVDgRk7U6E>>?U0mGO3vVoKXqRq9e<{50oup)+ zuIrLUb57UtNmkrb|F+Ml1cWx`LYMN#t|5sx{8AL~3})qpFu)nYg_*XuCgYg8f-kIQ z4m_UXy{%fCP|6SmBVeGb`*nEZQc)7bgKYDR9@;Oc()r6t={h@oz9?ac)M*26ES@3O8$%SEvGW>OpTIg#!dbRTi{AUC@qE$D;NJT^UZaEDwVg7FVRmQ63}Uhs05Dr zDZm>uAEJLGCwcqJnS~oZu;iu+bmNTzOG&GE1D~*4S8}5yaPY?LR`kT%JCV^BeG?SD zl9gT3HT{!r@2P)-lQ*aZUcRY{?iuQM2BmdnamaAkYdh*n7?cJoOn#a0pXLqdiF*BA zOmyr8k1Se&-5lnZ@kXl4@)0OH8SR*cwo0(8zbp0X2vN)hJ1y_B_+mr2T0_Aj(3i@ZB>|N{c?+YGpys#lfBnoGT z4ZHoM@B9tmjg{5ntEy*gsGKsldAfJd=XnDV3t*#8lMFGDz!W4U0=fATk-@AbG{c{-*G z`tE1+J!KhI*@i1q4L9C1m=C@brk-HF;UYiNlkvtsT(tDxYWrl5O}?~K>j&iMl{aPu zu)p_vw%_mWKHqznJUy>?xL@{kzvAt2&CBHv|L{E#j}M3Cu8u30NMX%M?rlCSk2g*y zC;IrynuitGSVV@`g-9$GjHK?(#Pp4?X0bhM3+l_efRqO;W(m8=3{4 z;N0*?SHsU6KpoJnYc;De$9>&HhlN>QTb#3X2AD7Uwf!4V-U1ajN2?#x3f!*0iOh0c zU8^;;gzInV@An$~8#USjx%TrmGau|LO<7z2WCo{^%Nx*$qXIgdbBEM-6~x>|?$$ZGuN%FDaT&#tMH zo5C@j(O3Ts=x4sC_++8Eze%E$`)ip5B)c~{2RO%Fy9S$!zvfaj6mYz zkV5cp3@T`Koe}LIWva8OJ- zQcWMytV@VAIcRM~b+x=H<5)Gr36*f_?4=%7Dxh;lAgbqL;_f8p>UaxUg|}-Hpd}_u zHAQKJ=O(kPy>)|JE*=X{o0f{sO=|CDKJ4Fl!(u+>y4M%!G8EkZnL5J?EF^4W=>EYs zuH{7Z$s0==J7pR>7qp<#ohY>Hy!ueM)sfP@=5;9m7noZPi+YQhibE96=yYXV{Om zFBZdYuyHj-ACwXmn1RcS5KThSfS@CdnnQ{VMs}SP{4cnt4|!oW#VYN#cg*Q)1&$Lw z6skb)FG%EI!o=8*i5ys!3U{IkHcn+;Cm;tDs=VM9syxC9RoWi#3RPs<@;(--WG-t3 zW$+4Bu#ie~JhxCKmYc{Cv#u%PW1&jWhDK1});jN{9nq?}*IQMGl+Z=7N914cEv0%8 zzaYIf7O_kj>lRCqd$4LOj{c%BA9h>S$+*a&J}H!JPZFe1Vo{a9uK7#;i|wZ_rBj7y z95+L}ef5f(-uiw0oi_qUHB(8&kk9#Xf4Ij;eq}*&%|=3!5Y?y195%A76m(Gooo__s)J#GtEGPlT%v6puGvnTYCT&9qFJc&T9X zIMlk&e&)a%+nFa*LWTy#Q}WygpEqC+3k@hORH9+xpz+3QbCORg5*35!JU}1?6yhVj z%uo3&Z!B#^%=3`sNF*X2DP@pqG|5=4%15f5ZWnvpZcN*b=WRKD=h*2GrXEsCr+kB_ zvY0MXtve*Z4{yM5Sn&Y%Uf%~teY1{vr@Yq#%n*h{E7lWj&>j+Iy?0mC zz28C-*T85pE1g`%#>H(ol<$@f}a%ote)(T7h?O`oqz^sxPZ zYBrsbMYB)5asIg%_%|S)B93K^R)M%t73gqYKATm<6QqoSFc(M13vS{lL{%Oyz-m<> zssf3lSfR?2wmi_%)@-hz30T_lmh=@^R3%|$3)HGWR0R@8u|^zgn<7B#n?kq>-rV4~ zrX}>(LQ}KkW9oTVlH3;8&;&od-b(1?3LVl*V^RIg8CFT-t~}X@pEr_1h6cn_?zoYd zTJWo3knh`t`ji$mqCxx&@s57@H|9b-C16yO2B`>gk3XI`?lF>InUTCwk%$e>qb#edQQ(5i*6uWf-6T}lO=7R-Mh!S_9vk#R4Zxrc>!g{{7vstVwQmr!tidKv)^=vGZmpU?MIFF(F#C<(Sa=MI+xwnxxzba5My2G((u z+io;>X=^U8-RLr`>1g`$7A&d)u(7fw38E_8M2@V5AQmt5?ykI_5gV!F=VJek2j##H$2=2^{!Q@M`=+VAa69PlZt?U zKJE|q7|E|pNe~AKi$ydC#2bJgfE+7YkY#Pi5=i8@g8;qwCLvv0;lJQpfNz0;S%AkI zL01mAo;&S$?ks-Zn6$s+yS?nCM_)ED2vvFlm2|;x4LN`}YIF!brl)nSEKDu6=Q=e{ za7L#&qrLM6AP3aLN`^EGes5L8c=>ah`iyGAnTH$Ws}Xovm1lB439Ug@^zs*YeMWV?+wTN zJG=oy>ZMulW^sxnIK>j2_mb?_lI%B9?3c6IFFm?=VmkSIIiG6#94hl%3++!p1L=?>fRqO&-dgO#SA2# z;<2rYN+{74#jUVJ6~2i|0YN$|C+&_3$g{8i#l>wv_P#&+KLt!*_OPL+uj@! zN4Z&}(QBGvt_s%Pd|gu*H)}MATd3l>ye&dE|75oBPI|9qC;^SM`KgC0q*Gc{2ISxHAJwQvDguAY$NhnQ zgFVc*A?>R|juj(&nAkA-?ks`-9pH__<(U3>i*#*;|AKD;z6HL-0u{PM@KL$+wDJU>4a~MH%fIV71{_>Td-Pth=&NvBiZT@8es$geugic1*|TsggUuUgpS&>xt@^P%)-URSQ{qY2 zgkRhej<_Wpbx-)oBjGT}Gk(8k{63IZ!jFM5TN!uG&u86R-oh(XNyefo&5*)@O;qWX zH?YE3wSqIzagyE{%b!_{uAqGpZ)~VO=@cix$P|h8B3Dztb>4tI%(5dbWFf1X`&X9I z6NId8!JH)9s`OFc9Fl3j-Xg)+ zCrs{W!9A&eo;M)aRG}sG)N~qt-dN6VU&LYWY%KOlQTY~l16(cx)=Ez69F+6#^M)A8 z+*J|p7XPbt>N&fV-|dr6*e9QKNIveEd<^82bkr&72*^44kXOQPoxH0HJM&jUz9{D3 z0NzN!&l?(#Psc^g@=IO%+O8^gtJXbs4?^9lMFuOMS}teQXd!Rc0QkpKz#U(~0}` zx31`1*NIo&T&**-SZnyVbaF+&rR-#S!_u5;V4;VHHzY&YbAwwgoM<+VY7Pzx5q3YP zSnsBKS@fGX5)-|>Z<+-&?wc%NQiqjji*`2)yji6&G|P6qWt@R;(2b){?hYbvz?>9l zV}7nE4cc^==2_meSzM*@VK>TX!teCQ+GguJr_-oUJfNZ$e)abmwt!{Ub<~4av6^N2 zN>b$&;U0$ilz3UY9K#Iv?Nw?+O0;>`hDf=luwU#=w=}9J~f;MhhIz|SwtUIsx8v}y!7=Bw*RjTC-}ynj0@eR{J?Y!3jU48 znVcqZP6J2+n-~kVvDMs09MFrSd~Ro<7+SrnGSMUU7t^fk2_9?VOZP^9^gF##JV8Cw zpQ4X^t3Udw(d0MuF-h(+mRZNV;(s_^XuY^SbIpgW(XK)jtX73rsIs9c7(yx#TiIUc zv8T#zV~bCU`H2(5y}+kYtDaqNek+I^~YP+Uy-JV3s19YeT8hpunp7GEr{}z{e}7l$R#t*f3JQ zm!RUk>5_f*`&wNkwyF4A9qJ*r{NO`t@?nW7nQmjJ>i6n+c67AB6_`7@cgc+Z{ z4?&q7wMcLjF(8hZ;4f53{nBIq61(v~%eTP)fCYHGp?5}I|BTwr6E-+`1CV3fA&%&N zbj7c)%w!c+u9`a2~sQ!I>JQLq|Gy>%?i&2hDUlq8paG$*48!PLYrfHk0-zVq50zBSuNuvUyghrgN zRvS{G2{(V@fCa!%MkANeNCW!*e&7wigcI>$KPW#m=@)O9WZg({U0JI(6gFK>BXt+- z7`zFgkUEv2dG-4!q1Hykgtn#amp-U@T-p-`nq-rzPJ_1jYKy|gnj*>O?5%Ft5U zpFjnC+oCMs=e=YEKHd-q>gbT2h^ikf{N6ccs9u(6HazInzx0{QI`-T`_O{wplW3(K-zIN(8=rAD zy=i5pf|EDq1h;9qTIjl%8avZN?M@`v98mY_U;c*JBlJRCWT@+D2S1fZM$(m3!JhmZ zObvlts};`Ss^Q*${Q4+IvU3w2AoUCoO!9%MBf8z~!e0wJ;(jPeD=M6k; zz+0wI-Uy7j;+3N8n4yJdojl%fOxJ=bb%9Zr%c(^8*n6CKUl+AH2LVt5Z>`{l;We_3-;0 zuF*ponW8y^#~aU0$zf5XOh3WfxOwCJ({bTph;x$Ay}$BCkq*T!(aOm8Yclk*70omJWb5Sl5biSqP~9Ahbs#MBgc zraf8GwL`+SQ^KvYr+IBqpCT24Ng|RnJqleJT4Cd;;ozup**9bwOlphk=(9d$US7wN z{HCc-*!n&iZOViqEfFwp?{+BFBp1;{S``U$sjjnX*~?0r2crQajy}dUMcpSso_^1M0f)Vk-HNBQ77rVA@dkux4p$ZU$K3?lNq5`M zRKJX4fvlG1{Ar$inMkNX|ZI(fWdpRVJWt`iV-rCb9k2H5!8w~->6Xp20-Dfl-S z+$O?Ev%uP9#iKaZ5}o>D97gZ)lrG*l^zM7-=wW)9BeHBoD%B}P z+Fx`7FV>>KN*T9;er>ROqXt6y{xvke&!HQ0sqFIykSL#HNbj6@aTU-r$EjI zkOrh%^h6F_??YC`r@}K@WnB{@(~kUFg5(7e6Jm)le72ms_1@1N|F3)t@Ga2Y0zBSu zKX=^w+%NRsRQkmm!w;ZqjuqI;UD3WqPgL5_s6(jGA~LmxaV5~_qqh6b{1fj0{DAxY ziT3m_t_bpv84u)nm=fF*S8U^9`)!7mj+^ zzIbD-eWspUDpm8bCv*dYA+w91FM3~D8F<*>Q{FgK_0%{1wsnq4n%j=Q@kVm^!GySD z!ATeJtdqwZ9!Vcp5o7E2 zlE1;@jY+85(KlOtLkZ?7#Jd*4bxImyUISYR&zIxH=*Rx^PvX>vKOJu3ab}o!^OjvL!t`yU(NV;*Hr6owFi2%fhM^JUx^> zTz?MA5=-Pr$94AN-xPx1z-P-j#`(D8V`!_Encdum?&Qu$yH7Jjrw?|b`^ zH)Nbr_xZ+LpGuiB}jK)76LrCdP988zCDT0ya1JtZ5EWd2-(D&R)a(LvQG# z%BUpR3V7SnUFpctf)N<}|kQ_VPn2xic>mEb#Xm z_t;oC*NXC9XW+;&SiAv8RA5SeY(ctfP1;h2x8cUIBILJ1I)!d0qZOg?Y?M=Str%-1(&fpVHqqb?y`VX?>t*2K*%6p56^@NF3F;ZlZDBSoOO3Q}t;O%P7l>=7v!G@L!)o-ir@i&K9>RBfa;hN6*+lV&8Rpbu?aiV0*ZRib^^Fi!fg$z&n;QK9IaaoYt!fE< z%9v20AzZ8}QcR;%s!{HmiJB&l_6kLgzxr`3YB7_g+Y4_uEDuwJ5fm|qyVG(K(F>quFr!H~eCWQ4z$5NMdLdF+P-NnnQ#c^bld`#U%oN0v`wjYhZfp zEL2cEOSnl<FkMJ$Pw*Xk6kUFATduaTvHH6iu@H&*T5gpgVytYqy14E9( ztZ6^DjyTLddM3u@_C>RsidJ&Bt>kW*%PAIVj;PZnR6%#mul>aY-grYBt7mC!Y(c+i z<1-B(Z%9S5=0tbQiRzG!=>*v5lQ+ck(OoG|-92v^2O1|??x^YyZ$P*q+WjZXctiIv zrLBb}|2S`G!Vk3Jr~W|b~%do_vEqMsn! zag$IAQ3-H6^!3#k7;gY_Y_0d&TJN#7-t!q_d>3z2sgbj-Mk(dbG)^9Kpy<$e)VxpL zkm$H2*>Ph|>&2;T`CE6T140N6al_u~l53T)SVo`w|F;Do5Cfm8Qxth_L~@H0j0z-N zdpLDAzWj}|&&CBtA+~8k`PM+oU_DBrzfdHX9PsmoV+zqbp6Hc8^hhKI#1M7!i7+jt zPu}1m$JRPz2}@8vS-4$Rv`ifX9?Un@*BRt5@O3RvOr`Mkty!Q*L!^=>n5Q`VrvpJ} zesbNiH)r@3&iHMeW4q0V{TpwLKg^zZgf;pn&e9Wa51)(Qb0%&7`IP3pmo@P> zOtQc-B*C|X=h%xhMJrW?M7tigie-3&C=4=h#9;ZN_bnDws1Ab-b?r})rbxM};A0ah zyG(|EtlZ6)k^cm5+6C;52O4 z!Tu93U>|CghK9QD+EtW(>Sge%`d3r9$idATg?1c`v#^P=plV5W1xSirKCk2bB(z02 zPv^Di#BApUul2^1s*{STBE9S$oTf?@B+hf0L&`zl=Yk1A!QV_ zwmD*5QwWwg+87Kj4iFToY-;cUJ=LF3t}a}}-3mM@oy@Yj#h~T2^Ox7o1Ffi$;!1K2Q*3V2tXp@+KQl{Sx4)62HhS+-njfWAu#%eU8X*asjW~M1{>jZRTUu9p1Gofm20|Qm!h(xkk{9`+fw+OtM{jCQJLX{k|Z71L7$> z-jHm+D%E~Xtn=nn_RaCAf@1zO(_|szWYM>f(W*fy0^aE15W3!nWlGd3&*>D?6tYvC z;H~?Urgv_WZr-$@Y0c8QWioYu96j>J`pOw|o5i)`CUo2&m8y!As#D%;QmU0GhYE@F z*;q0s9$MfnlMqJC4IpL*5;KE{4}6HushEFb3$!G~fgHdau&s-)k-#{_K9iVdLn>3D z6l(T;>|I9Szu;SdZvn6X+>XkqLeG>ZTmOE^@7zxpjye-IqQf_%qqd{tcCrCE#_eK{ z+l}e7yn!Ld&#cMEIwt+vG5JKt)RXNKPO!Ca=t5w{?$%W%b!eBWs6)!B$Y4DzN;Jq! z^`Rdn04Wn?8pNJf{!U|5joQ#~{qINkp%7A;;e$$kGrYl6CWO2HYLaN_6t20YsBEy} zDd&sQypmMR^R4b$F0N1!_{$R?+aHfFL)c&*~Un z4(j2udv&)7C8|QDszR7&ps&Z=Keqtz22)ue!)7@x+t4=d=Dw2j@%VV-##6Iwp9Nu2 z+n*Xw?u|F7zy`tniWnz& zLfe#M~gFbvAJh2U*#QYvc;>1~@}*JVjChiQp$GFd zj{4^=Gya;t)B^3guwqjSxh&c;s9*T(%Hd6>+OQn$g%|7sm96aeJLgXG<4F2+ z46=X2P1eNEFv)y7Q+Y_C#&BH62+k!n;ir0Hc_uQ?^k(jUSs-19E@8HRNxtX`cB>?$ zCgxbY)fLOLTKYzNY>67F7(7c|7al~P)ktr(Mq_`aiy5Tq!1C~^KK%@M7U1QJ9xuO> z6Yzah?5PK~i_4V+i!}an#!JAJeF4rirjkIW)iRw-eTV34`-{?eyur;Hg+z{KaZVji+=;PJsDd@( zn1VK)e&rqzw%#)Rdq z=_^}OSG6Q^)m5kxwYDj2EliAU4CN+{LVI)njg5Ywr}PQss>1Mn={oiAsUo!sLcZQ& zzZa~P&t0^#_R3_A{>)C=-};$%=MAa0%TjF@CE71-uGqJ;^oQNWJN^7c0{zI*u4DiY zaGrE+qWgC%M_Yh~)!$<(jvi8oeO18L0OSppZQsB->@ zKyT41C33MErNEMu>mgL&Aat}CLj^ppi7p_yXGwm`Aippqzc3=d(<7%j3v1pdnr9GC zzac_}Z11b$WsUBxLVkaTm8;k$3Z=OVMf(fAhB38$9e#I%@ZaHE;QzS=O4P}v8bY-+ zLbm*3&EM&^=P&O(oI%-vPT1MeU)})Z7<~#Ic?zBKd#Bb-1Dvt%mTbmFzYOVn?S zbcH-K>2hTR3j%gK1bDMj2}!qKV4nSlSImz;m3T;^&lh&wUEZ3xq6LPyrLAg7;wo`X zGo)~Uq5(Fb-RQbTNZ|+p!8jEza`}8e=x2bW5{;#Li*{Wq}sMiw``l& zyjiAx&62)&V{yIo!FSUm1BQ745qZo2DV;h~%Lew4-gQKy&rqA`s5LoFQ zw+3*5@jt@1!2i4j-m49-qz+4#TXp-SC3HC7d@x^lJ38ij&e&a?-s35M^KSreO#Z!d z((i1EKkAL-)G*1ancPy*k)uZ_{!p($C{q^(U;rP*XH}w3`mDMZhQC&*3%=ACZ>FnZ zp{rs+SGCqtGSsIhXl;YhV7>6h11%{%3nK>;`QII)Cx1h{frYf*Q%6=Q4c+tnkwgQ! zsERdU{{}RySjK4=Ls9({?MAtwZ)x9s7B+YnGyJvT)=QRa@D71kuJRYban;BV$+ePlNclN9Z0m`4 zb_+W1t!hqR0YhW)@y7b5pmj|_@b71Nqe_t+?L3N_HOVS=_y*?Laj5YOwl;p=kZw66 z-Fjw0(Ps+YWa#AujXDWym`yPN$HY>;%zHsIi9Rl`(wht7pjwwQ8Uj%i3 z6m^d??UFU^wk=K0mUhdLcHKaWHrJ?bfl<{0<7yexis|O{`gE0M6~a5Uk=@N(q$UDY znGa}E40DE)@vT4Xqqw}$_K)~C%(gR?xY*O5OC9sTC<{6T%Nr(|8zq=6t7%Tw`5{H%?df?purQOt&=kk5jC?z%Wa<&-qdp(~eewpx zWoD!3`InK^O2V&nCl*rSbYPzFPX&IJx3n=X$y9K0=-$OO#s%imu3)!qYcAc|TE4xh zcxUbFopo<_*1Z|9eyDrBy{_>2)F4O;I4zvRga_ zZ587RN>q5_W{uWDI}WH)kzg|yw7*}`RIs%9`MR3?O;uSNtFkvU(>F8IKwFu~TqSK| z#%-^R-BOdVz9D5(UGmDNOqsUarLA|szp=bE1GEx`)MH9sjZJWa_U3VG!Nt)Wv#u#( zV`IpQ);Qg~6CMd0982WCf=#W zn-AMlJO%t4vs=&3Zao89QTG#QRn6foW&2iD9X=T6i`eNCJ ziXGcZHm|SRu&!$Tn(7UU8#ZyZp-sEFe$O$C8= zAKPn@JxpYC1Cnhk%4PJFT$rVzg1&;bff9`;Llv5Vinh6m za){dDAhn~QV0BC(8b?E@KZj8dSY1+m#nz5Fag_gRew%H_ObQ;J66*ub?u|TPG z?Up`xW44}!v4gR~Df`$70q8798TDrmW_=1Te`BD$0S@*6-}BB98jcYf%W7H%z#EX{ z@DuY%aO5?|biEA6t(6LW^G2n@&}_T)_L&Aj(Kn8l-|aKBfs;2bJP&QWK`2xc>HfTf zi){eB0ow)l3$$JbE#$Ughkw6BupT(r)$Hc@h$FGl$1=UQmnjkZ%NyF64EyNof97xW z#v53n3N-$j#esh-W`WRhkR+!_l2Ztp&3VJs>pAS_pn0rAj$UMrP_a;f}Yu1 zxZWdTh;SJxK6Gc!Fan=s| zw6#{-+FHk>wvM_51q70?lnsIl+_KyYl_ARk0*ZT7aaClCpeV>*$$9USsI@9FtXkgx z_qx6pSA>&uPCf~o+uu6n-}fyY-H*$+%GVo1pXlkA>CZ^+R%E4~B^x739~ia1 zNxuBYqQ7dGm;aFBF$5r>j6jBiR=#7aaPu*)vt2hWF#BY}%}zg*cKh*Z$Df`zaZKQr z7^U?$XmSddzmFHC{uFup2G_(fuZGL~nvWLAVp`M1tg`)L$#knoZ?TJ$Xtj&&N_kxE zSGw4*USaRPW7*to%jQ$IFXytuasCdc1-qQ)taNd4by@B1veMmcm6w~Rt=rZvYoy)R zRCQll-P^aU&3dVer;CDmBiDg<-C5Vy$7%N}6O%0mb@!JV?RnhiK!t82&WCMqy|M3r z>DDN>Em3aut~cmLX$PXMHYcr43>>9Qy^$wwb#C(~fhS$U!WK@?xzKp^MtG5>N`|BM z8$WOLt2e0RphefYNE;#495hfW9a-`C*pVqQ(bG@u`L?e0#+eO+R-ASZiZU6W75{9! z=-cWIT8N`h&3#(_OTQ}9pemixuQH`y395b}GdV}5+y42Et%n$9>_Br0hFGAC(sLu67i2X8&q%jBypW42VSc;2qE1`P-LaCAxdp{MeFY$akE{N zFFCkdt5on3HgUa3)N=C1&pE#NZUwSvXbsYQ1TyV4Y2}K5MRQzcd#sq_*lqmN_s2;( z{#?Tq8_Lxio#sin%$Iz)NETDcM@wWemwaTwrL&c!v$ZTXlFk%c$;b9mE)LQzjuI}; zk}j^2k6k5Q-D|pf$l_hoRhDjRYPhVe>E&ClL+u+Lt|hiDQ|;R-_>5)P(_p-o@ot|} zLr2hR%O7`K>3o>g3$AMD`Wu&7TJLLj&{Chh-f?Tcp$k3LYzj`}^&e$AXgsjt?ccY^ zFT#0igiF2ajR}u#9*DBse0o(vz^FW73+fkp{aCMmCvCY-vAK%%l^wmM(qRo7IQpzV z<#zZ}3+mg_e*IYVooqX`RHybqagKYAirp_M)t~a#c9nW;Fp!mgR`qoIiRA$a?xBb0 z+m`zmlH}OTITO8A};Z zJW7_g*Be8h^c`H#Z)9Gd-QlX+qf}{D%L5wWX+w8QQI8F0{@Bf!-Qnh?zIAM;e5?i4 z4^(gLI>B7n%Oo6RsBU>hBhx{UD-xXDqP{bhi3nw8q;q3Jl$>KrT{*PzhEq&%6tgdi z$)Mq~&F2sME1zfl69WGR0a?A#YV$%9yWiJ3&tB2#=PIoq*)~71OAHT5OE* z-Vo#c&(|9z<|^jb_jTbqETjz?II4WTLE}tz9kX}49MteZBlRdY=qU}XH?H{T?Km+f z=FsTh(!$?)z42-3(P3rBhLy+kmz>!i|MkV-|HOxOQ@-99P$bl0y*^-F-)+4yps0Vp z62sw-4Yoz8`X5sbIqju% z0~49h2xiKC-hgV}CuK^ta>(lqzmrTv7!w-KWZ4OF#De=YmIGA>1Rzi^0jf71IPeZF z8MkHO!oWpyMohjjaALaQq|EmxNSm^Kqt5k)u5U%#^{jY>Z<<5rbIS+Zb7+6xj!F)V z*MIk$rrxONeuW)>;!^a6NxK3TpYk_>KCtZ%{)-p@oXu=`~-`5X$^pG&i>1C5MvrMw(;0J;z0dqn50^u%Y?Y z8}w$`sM3;UM-GfV?`J&c_P+L9`$lo??Hh&iJGjxrSXuiCkqsNq#Zbx>jh3->}^HPh9=sA@8?L z-p_fwkWkfY{;KDJ2Js z9Ir6cU$gc!bK8rb;>k~O=f83Y1;6t6QIiYM+l@3c0dDQj{5J}}R= zRi>Th>mRlZJI#kSEfd^6^Io@d`zniZJ1#f8KV`tVlCD=Ib3+f8Td3sNFmxr#w9|O~ z(8_%0fw=WUp-P6G#wU*osMr`(P+6z>DbMPSNXyNqRwek4%Cl~fX|JWsaj81WwQdo+ zecX;XmymF??~1Z$C?*Y)s7JfOU-gE$O1gvg8;_oCtDe5RO>F4Iv%%j5CfLaajWo{P zY3p>t&)PSRFAs=!4?Q#|S179zmHze2wo%Wr`fwofcumn~_LVXvWA zA?{saqgN^FU1_0LY1ymNg4Q#q^+o0DeZ4$Cr4jp6h7=4OR$xf=hJO_Q(4qH2f*I=O zpirfeA@B0opdN6N2@PXrr*fkv6!)jlPmL>ij+dDe!OX!Z=8hXb*Giy3gZgV8hy?jd z1+)U#;Rq(`5JR;J)e=;`}c>?DU^Ir9Va35&{r- zS%9vdbeX2hx9eQ@WwX~TnH8iup5>2c1;4P`lUU7(EZsllgO}D9eJAxs$93$qRdIpt zmMc70URd5g&-T6A>WxP>En?mO>%4L6=CuxEcV7RvVdFRYoT=$~nQfoUPK!KNMC)BR zw5fNoLFRPb&$i>=b$s9OX^n0ft6#zz7t5x^mQ)Wc=VDx0ZCuS|khJ=hYbyW$%LCx=ud z8dsg_&0aIV?QkG^#MVC`v7p))13jweO1r50?tAu2Bz;VNUL6 z7T)E(^`@>=Z%_?jLrZdnGeNOTvKK#xR#T^yH)^W^?4MONk^9vG6PP_mnX&oG)*JE( zx!)Ak>P5QyK8u@zW@2cLIy6R+ryS1n1>I=&aYpXY?7@%R9R~>tYteBMK^2M~k6DtOSS78kz1}FHo5uFw?igFxQ}R^z*&W>Sxgn!9ITZcsOnLfN-IFDyf7Km|Vbv`f zGCH90hEc^I11qjj25}QrsEOl(Y#|PAEe>kj7*vroCjX%MO~;w(K7LU@pWoOuE~xKa z=eGB4)az9DX3_`Gh6-IBal&ZZli!)28~scAH`DI^_shJ=-D~I;v1U!wzCrhEGb|c5 zDYe(asi`7#q9%!EWSw>|mPP9m>fYWuyTmrvVV@==cuR6Dy_ZCtMGC`z<%&^b`!##e>B zBjHSRICF9@>WzO>y+OlikY+3J$iC%c2Nh}zk1+W@#$;5m$)web?1M}eOr9O1Jyp_q zT6w4GHB@Z8vwCCY$pANNTIBq~GQ&I?L1C-;#t&PjEp@{Tc3SgM$93HTsXVsN0e z9`%MnQdO_B?C^v~d;BZ{wk?nJos=tT$u+7p?ETHQ;iubc??1Hk;6ZcWRU zr`!sEYNkRjq}HR`@b8OMpPH&1-}nWs4@S>=cfZTJrK6epcAIP zFs0wYGzXp1B?{^dnyA9vPDNI7&_tCY*+i8`T(3$^9(Acus3aNOa@l*R-R|B?_d%R zGxyx+lP0?ezU^&&AQa?U3m#htCS@`sl%A+UBRy!m$M$2)&SOl-A+FxYpvD>c|JvIQ zhYcVA0R;jXbOpEL-xhxmFn_`J`Lou~w-C+S=sDkY)T~Rb>1Om(+4rZjo&NRp2E9Nk zIquoFE4FSq$3Ix}2;1c_s~aNi9a_UBLYBxHy=YltYV?kC=@VPs=Oh>XglhdnF7kR~ zSVI2RZOhm0UUhKe%)G{{Hv*101|C`N8Na!29qWzpkMHa{?%;cVb6nuqhgK@e*Bi8P z#J*qGpWC=2*7=LdLS2@nVVw22+$&pe*a~PR+kDHG(SF~&!+PWMs=@=2R(p@z#q62- zh=$(?8LEPmFFD>-y+KVJ#uaA`t1s%ZwgOUZWkIs zIyR3nRQhK3@_HlW2ooO8oY+QWVI zc?ZK>@p~CInhHK_>9$&rg)KI%wwUc7v2^q9K?k4o43p}GR@bB6@C&r}+39s?{q$U6 zODf3}98{SfWr_J|cG^K<4%@@*z2Y`1UvE%z1a(ZzN{zeiu6Jhrh+D2*vqh?zHX6zt zls2P{lRb3Lts8cAWk1g|8$>rk#L0(fpLLz6@}k}-T%tlRM8VP1?X>bORARP#{jTZ_ zdTI0mr#-kbA@7FO&4brA8YON2DtT4!`__z-ZmISmu-ofob1{0oKKHC&h4{B>I%S>{86?@kg`mW=%aCEg<8;o zPIGP!v_9W^WZs1C)nGZ&x> zA`OAavEfmd1U-0at8&8PGxz!K{)*zJn3qkY!D-dHTFH)_|Qk}uy}C1&&2blP+vS~#>G%_$9h3cWhI z=}Zrn{o!d!;=yr8j?O#3Wq8g~S+QFCnZHm?wbLmvRk1$3rj1nEtNLkoDNRUuV@i8S zih4-6Q5?E8`MNcadsRQ|U7bhi!!7)kO);oSlO`{WF({*zz9`fCmQL+kI<4<(>wOI<`F=q07>ZF5t@K6tdLVbR zHtv3HLkfoXDf@Eq)vn=tRDvRS$!_ZTX510!xbid4pk=s`2S#QvFb090B z>*kz4qYIYMBCBmOsAWTmE9T4F&{L=e$QG*Z4_)jR=e{-0{U4||qPKiQr%fks#7Y}j zJk;;$!zAVXrIJaHuASNYU3A2ZiyH^$ShiNOZj{#>7H8H8Shg!${t+vwB{iMdiq351 z$81>_wx|nR+?6ft#uiX|u#bAM4=K9R`?6&BmSj-$Bx!vlcl$_E^lR=I)ZC`@t4{7$ zeVzMSbG0{n>&v2JJEO;JOqde6bNB;GCSBgJR>ybz<#+#;$Emi0TuZ@;jT)|}w6{dQ z_ifIY_gP_A$>MI+bW8e$6y2&hvd}G5X7s9@saG-WmGwnwF?0QLE(T@a$uioY^lOTK z*_VCGKJ6;`>i63{c7?X~iRE8h$*0zUbn57Qe*W@$wudcIF3A5gs!9ICqWDB~Z?(28Lc8Z@G~eS>~Voj7#2`UyF_$b-zj zNG8EwEyoh|MxF7Me2hd->k-LUSQWYsUua!{h>faQz4EEjGS zE!-$H*=%p(Gs`5T!y;+tMb#fFwVt{1?HkqI)>L;}Tiw&QqT@O#*Pr5K?cuumyqzJf zrH~=gRQzG1Gyl`}KiBMgq>9^pyEnP(5ow>$s@@UQrBdBHvRW@%mY8b2<6Qd0R`of_ zML(fRKaq<;Qf05R(qRdY{9d$gSheIDRT}*MW{5OyICV|6?+~+LlzxSD(9?>6B~=5< zxfoYg8CP=|#4V1&g_;HENKe1>GGeu%i3lM`3jut{i7_QAjMvg>>{}3#6R!ZA%68o zr@cPh5!!Lf(T-cAJGv!wbd@K*ZYi9oueaM4N5VZ4T~hd)BjE!m9R{-L>yH@^3l|(r9Rzb@jr#i>&35WOzt4~i`z00CtLvPEh+V%~kRD&73+ zk+@a9SY?x`x#uF+m5Y{pn>wvC6MUYAEn+_~Wj|cPcA}WGoh-O~XvKbLEsG8N zA;p&c$X*r)wzH#@i?g(|E0>Smr5}69;w}AHp6B<6?dDt4f!6!-PV{pUxx21CZ#O`h zdV^kCwor|#jzUY7Z}(pRD1z-3Cg~Z;a*1MfV`MqX>Ym`zD^A)go=fjUY41~9XfkY% zbL^1Bf~|qe*6v(+aNUgDMyfaH#Il5HkC&*N@;2^O&C+~W!!oI1B^RS=sgZ;W&8?8f zn3d478zak~?2Qx!#=1xDp7y|^q4mar5L5qHcfVM7TGPXbYkc_YaBqD~^$(3Top&oj znR^JTT5(wV(6!0-x%S#n5FAtEZ0YyZ-_RdY>HmADS9DgbJRRp=5CFe zwKeK@zo;4hQPcdRehrA65*YbE%C^V}K~WQS9r-E8ig{?!DtBq?Y-{!VR%-NBnP1ZS zZ9`=Mb#qYHMy{n=o~3HOnQD9xFEW@HwV$^&g4rU=<_NW&hg(=&>d{5=Ti>#Y`encL zD;?LpYLZK0$K8ip1sqY`7S05QGrPi=lY5xs2bhbSRP&dp=UJ*hu;gc33+_`l%HN9( zI#sGS9+?YbHt_qh+|*RM+<#j7mV92qGp^#zP2oicGrNv57uKqCJsS0@H@LI1vwL>3ywa2a^4VBm2s#<2y)aa;x^JTW{~ zJTf*T&`-Ewn`?;g)JCi~Xi#q6(pHHp2M;VR{`67)h$jUjp2|{OFrt*pr{x8oR&e>O z;>qxe;xUEkyCX!@A`!W3YQyV|!@={m9bFc5blJ$VMlbDDMis?N{y0!z z+TyM48(h8N-ir#G;4pJx@*(4j;?K+Tl{`>mZT5Nj|D0;8&Hb)XpQeberyBJuB$R&^U9x2d z5~NWNowdgC?fkG{e)xX=)+2%~vTQ!0vHdX5`dm+g(*F&8^3#wfJMbg1|6-Kp1~V82|Vl_2>iYNn7|?Ri(B0~3|H_=km`7ZJFr}YNpuymDIm)KpVe!u9Bxj z+o#wH?%61t6dOS*tr8~UPK>@Pc@zbkar=?I3fglWPQz9}uU)}z@goR8pb-T!sYChi zp`AYxsT{NX!eNQ8rxYE-A! zZcXRVD5t^git=Lrb$vkR^VXO4VgvbU(^Kktlt$cMcEa`6d&VV4tLN9h|GvEP>+|wI zU%0*72bt6f@^WaAF75;KS2Afr=*t__@xK7_SC>UQQ9AOC>524|M!});m+!59r_m_q zfSo`90(BKg6Kc}>jR}^6)|*-Rn=kOQFnN}xCVsN`TbVqI(8T|x1c*!m#Io3$1jrI- zyU5>m$sXGoR3v0@O&KrJz&|oC_EXmf4Lq*mrz?LliuY5$pDKU!SGN3z5BJK^>+#R} zoiLsS0SNqC1*|kOkpH^^npsxrIaa(z$$cvZpCt%D00Izz00bcLCIQWKE3I@Z`r5#7 zJ9*RoQP4sF0uX=z1Rwwb2tWV=5P$##nqI(CBLjf|1Rwwb2tWV=5P$##AOHafKmY>G zSs;C>1_A*HKmY;|fB*!VR=`3d9f1G@AOHafKmY;|fB*y_009U<00PZgz+598fdB*` z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5Ktgsrjd?700Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHaf)Gm;=SOb9o1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00IzDBw(tMhCl!U5P$##AOHafKmY;|fB*y_0D)#LV4{(RKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2-Gf+x<~_o00bZa0SG_<0!=HhP$LzA00bZa0SG_<0uX=z z1Rwwb2tWV=&01iAMk)dU2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00baVyTHBq z8VCd+009U<00Izz00bZa0SG_<0uX540`oNPArOE71Rwwb2tc4o1?FnrLm&VF2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00a~W%+b7uKmY;|fB*y_009U<00Izz00bZa zf#xibGFuaY00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|P$V!*GX;SF1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00IzDATU!i1%UtrAOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uZQO;O-1f1OgC%00bZa0SG_<0uX=z1Rwwb2sCej>6&*D2tWV= z5P$##Akd@&ziHk@AOHafKmY;|fB*y_009U<00IzzK(iM3Rr4+a0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_P`kjNQ#BC?KmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1RwwbMFLYa|3n}F0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*z)7r663 zO#}iEfB*y_009U<00Izz00bZa0SGj2fytV85C}j30uX=z1R&6)0+Y1vAP|561Rwwb z2tWV=5P$##AOHafK%iL*Ow_uAKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2-Gfcdx91M0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ph#f6)@=j=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG`qfxypNw-E?H00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOL~d1#bPMg+KrT5P$##AOHafKmY;|fB*y_0D z00Izz00f#;;76@n2m~Mi0SG_<0uX=z1Rwwb2tWV=5NOTm~vL2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00baVyTFa_ zv=9hD00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHbH0;9EVAP|561Rwwb2tWV= z5P$##AOHafK%iL*e5-u}fdB*`009U<00K=aFiQId0s#m>00Izz00bZa0SG_<0uX=z z1e&uz@;BND1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00IzzfFgmfw387CKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb1p@!oPDUUA0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*z)7r6eVHUa?%KmY;|fB*y_009U<00Izz00f%1z)0=u2m~Mi z0SG_<0uX3YfiJYLBM^W91Rwwb2tWV=5P$##AOHafK%hAbT>D%bfdB*`009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5KtuWnf5gV0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009Ue?E-&% zqK!ZR0uX=z1Rwwb2tWV=5P$##AOL~pEihdB4+H`bfB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tYuAz%ZRZ5C}j30uX=z1R&6)0z-BFKp+4C2tWV=5P$##AOHafKmY;| zfIxE=xH?1!fdB*`009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5KtsASm!DN0SG_< z0uX=z1Rwwb2tWV=5P$##nzg_novR20AOHafKmY;|Xi9-A#ySWDAOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX?JB7uQAR}ct500Izz00bZa0SG_<0uX=z1R&6?1&nmA zAP|561Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00OlOTsG7}AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1QZGM*SU;900Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafC=lqYa~XjE1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00I!GUEq>| T4gvuPKmY;|fB*!VRN(&sRbk;y literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Saturated.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/GBA Logo Saturated.bmp new file mode 100644 index 0000000000000000000000000000000000000000..28891aad27ea32424b8a8ad48eafe9bcd11b16e1 GIT binary patch literal 1036854 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 BGa&!~ literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/MinUI Next.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/MinUI Next.bmp new file mode 100644 index 0000000000000000000000000000000000000000..db11a5de44d7246ebd8c39a1b1fa7e6942bd70e4 GIT binary patch literal 1036854 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 z009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mt zwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F8 z5&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn z0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP z_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs z))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7 zG6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C& zCS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ zke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$ zw4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7 z#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT z009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mt zwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F8 z5&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn z0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP z_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs z))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7 zG6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C& zCS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ zke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$ zw4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7 z#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT z009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mt zwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F8 z5&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn z0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP z_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs z))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7 zG6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C& zCS}F85&hN{ke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ zke>hn0t7M$w4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$ zw4JtP_1Y$7#kLXs))tVT009C7G6=Mtwq^C&CS}F85&hN{ke>hn0t7M$w4JtP_1Y$7 z#kLXs))tVT009C7G6+2N)KhH-ZnyfAPd-`OWV!XbW5UZ6BS8XNzcEP8--n3~`?dMm10t5&U$SH8a1s6DSU;Fu$p8x>@1ab--bIdVMKmGKS=j_OGagDf4ZKY$6JyyRX{c8t< zecifswVz-42@oJaAg#b9mt0bN)=ZNBOJDlZbcmAld(lM~O{d>WFTHdU|Jr+|*6(yw zRUtrt0D<`mtX#SB=9_P>J#NP5zvY%&;u`b4`NH-`p(r>0KD8hH(T{#K&3LO*#$3w{`+fG=XX6_zQ+|F2PqYOA0t5&o6o?M<0Lu@f&ZvaoxIg-A5;1zw(u@yy>Q! zBFR7h`Oo;AIr7LOCqHW^0RjXFEJJ}9KwGwKnfu~l?*HS%2=-BY;uD|fZk}65uy6l- z^Y`Ux6`%F{ciqZf;%m(K%AvbwlJyBEoUnE4*6ydlLk~T4$RUSJa@HOK1PBmVo&xb7 zr`^FZw~pXQjhDRSB}0Q|Zhr*hp^-=Cm49T0w!vAye^>A7tFJDf>-a85ch64O`|PvN zefQm0=DG69D|dR<1_A^K5LmVXBfoywzJ2>hkk5Yhv*nF+EcU|tx8R_1+yUuyr@we*Uzq=lPs{81fXP((TIJEBWv?f4+009DBfuWHx_^`WY zZvC0hd}i?I$VF@@PmSCe!E$HL$gJPLtGdWujz9kRC!c(>FUbr&r(F|k0t5&Un2tc- z_!z4Gf)~8tAOHAA-{!e^{Ha208#>r`WN2I34`==UUD(C+@}d{L=rZ{^Q++$T@w3i4Yv^G2(e8R^TiOr1ckZs!UU%oTPi|(Df>*UuSdA;uayX%pg=Yrq-<~O@L$FIla@elz51PCm1 zfxZbc$Fg$e%D?>OFC+KF3vR@}kq^a@I5?MKWI5?M~Z$tMEnb)&^|E}%4dWpAkd+f2t`i_i@ zcWYS_AV7csfv&*F!4bjOv-|G5k9?<$cr@PUE8dAd{>5TshBz3O z^{n5&Ydd)_U;EnE`ZkY=cWYS_AV7csfv!N`_=xXL^u3;Byu;Ui`|UTEBo^`E$Ru$* zl8k&Pg55i0UeEgdyS5Yd^4|Bpw{K^}zw(u@^gY_GWlewp0RjZN0)4aNJ@0u>-$Un} zcV0I`eAu^hOpKBVAGP#7+E-Vc009C72=vX4 zzE@p{mwr0nfCIX2FMs*V`(6*KFG&>bX2`tm^T~YYzPs(Tmv|xBJMX-+Z(DpL>*%A8 zj^uqC`s#`kAV7csfxg+%7r*%8i%YaGe({Ta`}^W$lAMuQzkgSCr@egn%U|x>6Y=-G z?|pOG`u22dSrZ^YfB=E6K;P^b8Gq`jrw%^&;O_Cc^+5+6H2$5+%WP$moRRY8bCI04 z9e=Cwy_|mf>3tg_e&v-{4wCn68*H#3K!5-N0z(3QvtwlZvdb-X>Sj_GC1nl)RuZtdG}*Ijq*z4zXORDIh98!QMAAV7e?kU-z;DC0YJ>^St$ zLx+wJK0M@*L*lz1<*B~N;9&B_tlz)O+t009DX0)4Zi8-M1RXO24Rs7b_PTWs#0?ORWhEyJE!zkk=Tua}YW zC!ToX_~Vc79v`en?vLPLg9QNs1PBlq66l*9-T1e^{q3PsV?K<{-Lrk`F&R=lH0$^8 zV)peiGX9Z|e58A}yB@heg55pV1PBlyK%gtoH#-LL_N%{2?xOmQ#Ic5BGj88uDU z7r*Yh>lTI+2ghe#Sla2I>g!_qH(7kezFxZVkA3W8J1x}R-(BzYpbZ2F5FoH@1-kR1 zT)+C&uU?o;94xbSBMVDA{ZrjLch}Ru$>J+^?>}<={qKK&#flX>Ej03M1b2GS1_A^K z5LmVXeX}FtH{Ep8Vp!t%nBt44Qlh?lXwPTVmCi67U_O&q0JM5}jeZ53Her@B#6HlD5P+y)2 zkK0Co009EaP@r#i+;Yn;i`TgM=9~NSFFyHnGR*q@yGnh%MEsMV{A73M_;p{N@uxgW zfB*pk%UNLCwrwNF#~a@8hQ+hI{`IdPnLLUvKKXPqjC_~&?c29cr~0m~^5BCHj(j?< zzyA73er;oLnScH3UuB+0AANMN!GZt*0t5&Q3B<1mmb2q$Kl|CxwgrFq)1Usd%pXM; zoN&qques)$^8OK=@-=ozxs4k)mc9J>&wt)`-+kwm|EjC5D)U@>?X~ktVlx2(1PClE zfq2K0haY~pJ3bzH7E-T}5%-UOv4{`b-e)n@k2&U;AO7%%k3ar+yykp- z>*+PGdCkJI#giD{<%q9T0eJz-#*n%-zzgIHh=~+v)lDV(R%|>kyMNZpfw1SB8<2~2hZ%a%}EE}47joO8FFd(l(pUby9u*NdJy=bSC? z`}=XE(pa{5In8DF@#oz)f101F65VR<1zXO$_&Lq+RYGOiVoty3FNZZxe_AJlo2ipf zN`2{lXn^^@d(qtU$>Ub7XA$z;Ef?MJ!4xvvS-kj7Pz$cyZO(bvymjm8MQ+WgK-!FI zNih!hB_II_NI(Kplt8l@T|DdTyG|OLb;j7N(}%sDF?QFl$L_uDi2EB$8cP=~ugaI* zOI^I^5Bu^{b)u(^%|7d)jb-=Yd1<{ah=HYxi0$s1KGF8{oQr1aB-GR!_o6rEoU`Gq zQ>yYv$dkqvUbTBuB#>@#p$&yZ?;%lS#$6}3vH7$V?d&tgW}i7W>*TS;v(Hg)6d}4V z0SQPz0#lkm=#AOu&N_9q+0!06`^?pbyq>kztdm!}Z{{&nzOf|Qp*OBSVAd%lx>hO0 z)n}iv+MKf=S*14~hz0+~pTA1Xv(H+)bb28R)7B!1Mb{s|X^o{xZ_GV!v)QK;VD;9s zracq_3$J-g3Ym0HVOf#p{qrtDbdA>2;WlkG#Kx>s$7Y>2cGrnxi)WqHj7tAT zfuy?ZIe>}gb^>Ggb=>$KIWf~oQEyWat~v=i~R7ede0U zD?*$t>Z1JTAbNx0u}kkw-AwN|e%7gL&OYm5O;=21?m)LD?JV;z+xh-R>R!_H%v25m zw%AEP0uqpb1g0c`&>OR+r~aaJv&4Ha*xJ?ufDSo*Z0>oR_MZ~p?m)Pjk)J;Gw-+0ns?FDlKZ9X$7pw? zKfS?F6h_Wox!c?eNOaq|=WpIrIMtpF#0Cv6OBY_ZWZqRv7tLr=)wA(H;qre8NI(J- zkU)_@ewpX>e1Mf`7GC>Sx;j*KR(!3ACmIO=$q5lSUUfj%&!R5eF;cF0uqpb1Xd>Sz%<>wwLve6BhsDr1`(waX9TM z)7QQ4juTjkbK%u{bRYU!;ezPNzmdl6Vm!&+cgHW;&N=UK$+^*f=qq!Lvd+J3x1|ej zM5Q#p1=AU?ze+#?5|DrdBtSQgG*9@vi=V}GRaCy|{k_+f5u??u541%rZDa<#{l-*0` zU;gr0r!o9Z1Wn?qk0I`p+(0W*{YBp?9^NMNP!!_L3_71XD- zX18cp%a@L)uAVqdPG;87^?T48rFd3SG7%@yVr{#SJ?oA3QRO6->y1}6+fY`X`P`x; z0SQPz0uqowC4puK(IxXPpL@Y`=3VkUzREgh`g(1Lf95*3{!VkA@VjsN6n>K>b1z;p z|LSB#m-)=QRr)da`0w{^#(4?RwzXNkQF+llC;Q1!-VTeG zXRmL)F>Uqvm%VKM6|W}Fdv8Co8RrsuYz{+jq-@STcavr|U(R;U^mW^4nAH(H^Do(M z@vJkL>ioWcoW5-F+-AP?a*TWFH9-kTKmrn2RS0y|8@LEg8C%ShRs$@p9)SMz1|NK% zzAjParO6m4$1wCp^a;7{?K$$f7d;JK(RPNhnD6VMv)*V9r#*8GhPO1G3HUUKEhh6Es@}L} z&pe;`+>4$%>vU!;Z+O^2yiKaRo0& zh2Cf$oR(%KUAo{8nTaJz0uqpb1SBAV3IbjA2AweJ*l^KP=3n}P`Im0r+_KZh`oj4a zzkmtAlUi7MFBSBn>-X>co%dABH`UIu<_l;WtCG~d_5d(a!phrX_U&#i|P90>QXeCbA|H*$)L?>cSPDZpXE)%I{0GIP?{ zyi2x2OFhuAV)xONFO+{tKmrnwz*Hs>dSljE>4WdhL9fk08KoA4Y4o6YVDj)jcY2=B zeEHDV6UP?a^zmjr&T!gtpUhF|jpRsaPVj!;%%jr>Wjez->!GtwTYdf&yJnTLa-+{w zE@9?f0uqpb1SCLLiu3{cCG)SEckzz%FMH|y%XVx#cUHST40Vt9_`SAiYs~-MOXgqp z@_E1A@!r4v2qT*_Yn3nA$n*wDJxof7z_l(n!zV<}L3&$@!YI&sbyb`J1okzj4ERnd+R$$x8{XIh&!c=RB&hbWv(R zSuymr@`^O|#yOATl;)>hSDtIVIrI6V8{V6${-yVlGzMTsRminxow~-tYv0xs2`yh? z3pji{cS+J4%LmD>oY3;@uQ}(ewbRF3PFs8Nob%Nil^4u|5|DrdBrw$pEL%(!$tT-V zUk>_to-*w9H%!>|u&g&0Ubi<>omVGxavJ*D{M35~&qiFXq&Eo6P?rjWnUCvNV_od;SyX7g}v|jykMaHB(9nEnRqHr-WvoPydN9tJ`)N16Qj}B^P&{O+qbb1zM&cZSnU)czYKfF6*51SB8<39KN1D`2EcPN{1uIb_$J`cc&n zS(#|p({q62#&MB=1SB8<2}qzF0mgx*UK1l*SESo5p%o#!?RB=6IWh9mIpp#=(sSt2 zPM6aQ(CRv8N=bM?0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvu!=>E#qKFi_jZSfBMto;I6yws@^CvcV7Y$kbndvFx3cz-q>iPjY1pj zzyJQ7^~MvQ_{0dg*Is*Ny|MMyTgSmSyx|QT488G;XFMYgzUo!4;-LPGsaCYiuLL9@ z0SQPT6F>>z-%xL4Anr&&0uqpb1SBwY0_u&SBQ-(^NI(J-kbneQ2=uKt-tv~WL@No~ zt+v`KnoeH-`q%R(-9Omcp3;KaKP4am2}nQ!Qs3{VSmvgaQ7u30SQPz0#lGc-+Ci_7qR{0AOA=^EGL|B z0!JS5kcY%^^~Mw|QD#{J5|DrdBv2-RNa&+I1>Z&Jiq%(N9d&X2_18zt#~*(@f6}xP zl0&^w2JR6FNI(J-kiZlqFo@nja)j_eZzS)={r96cI7m~A{*5VEmdvsQBp?9^NT3}7 zL_**G4fRGlsvehs1SIg_A#nfwjq>{7F;7b-D}kmTVxBSxUG&3c3WqWrnmT5E+MQE#lGg+#L@Ac09kfcM3xJ*~0f zhK)x(DsA)5t+ytp2Rg(>0z)T&cLK)+4hqJrKI&1AVw;z6Q{a(Ud+oLJL3SSVn8&dF zkN@}&&W%sA?br4;F!&FPEJo_E!mXClGpr88grTSzt63 zLF(Zd3*$}VNIuTaJKph*tT*@+Y=qo<@4Y!ls%&E?@5hnnKKHp1a<|=f;|NlxyNQO7 zfCMBUfngBf@toJkKfdvhhcs4OEp7A8ym>1Epa1!v!HGj7T3a$&{#=Y`ZZtOAY_kaYf)~6%y^;C2BLN9WV59`1iR9|5 z8{hawC^D> zk&k@jeeZkU```b5wq2JGeBc9w`N>ay!nvpjwx9m=r{k<2{_uwpVHq8LKltfOU;0vn zJpAy(+l4Hj>k$b^KmrmNgaE!|+!X)wKdlWY`S$ z8*Wf<4EJhG>DcH;K_f`bB?9N}pn%J#N25sxl=VY)h{T_!2!WBR(_-Ys{miy_a9H~} z^8R+}o6%qV1D-W*=G9NAe#mjlJ0=a7R)435-Z<>AdyY zV0-e(CsW?Ks@ZlCwj4()6WgzU{p)wX``!Qj-~UZB;$t8CSb7$b(4mJO%1;=uXwf1@ zU2$Ys%O;y_LR5eL^PeOB7L&UE88*N2m9Hd{O*h@NgH?}v+~fH5oO8}0q2fzH*ChH5 z5QF09%$d{Kux#_@n{U2g!2--{>E%_&fJo~(&v_291=1XC-#bC<(n~Mxj~MSzocQ*) zza0Z2s&aE0SJJgO=4|=J zFMdH;9j@Lu`skzI^rknx>s{}9%Uj-(`$&K0GoK+L3|P2uVVtL`q#g{Cfjd+``aUBTeL0qNsf6W zx|$aOe*gR56P`&Vit)6&D?@LbcG_v28;`*YF1Vm(5v?p6lrd6gd;9IT^U&L8pMCb< zfBz>v=}BQ5l7`4*f{TCqw|}ddqdLLjLHhBJf1LQaPfbB zh}oYc00Hg@3fNUwT}A0yXPtG}@(CV}aI*}BPu$2%L&rPmhd=ybZaQk5_@3bBKmU0W z!T=t0>#n;lNwd_sr)q}z)1Uqn@psJ#!O9EoAT<-Z_~MJpr*ouhx^)6n#>~N*wh^pd z3|&(Xy}@e^*Cigp^%LzJ^4xRJ#i}}bqtbY^Yv=g$uL#}B7`o=)?;Lg1QI#p%YSkIEQ|N#y-_Or3GY z85H$+4Az&#Ig;W|P8#nb4?SEQAN$zH@JWVw%!xsO&>Qc3=Q~N1M`E^o@SP8S@PowP zx8C^v_rH%xOa;ca{##oy`|eAil0eoQ6mkj}+u`aBbPFY)SE22;+wNsAd)W><>_8c2 zS{M@g+~+>WPoXy+_OOR>oP&53_Sr1?aN51m1daIhxZ{rdPGLFX zh$Hyxr7wLc&fBfG-Wo3`5#ndg_VDMM-~47~!eL51!tgdh_&AFl-VWH_%G{AnIai6j z{y`d>h%GO?u(SV-Z+zov&E=o|>7QQx>Q@)d!%qIBF^HcCf_dNi*0(q%PKuw@p? zGTUpexn?MADSJQo!4HVPWnoe&Qr}{WEq2~{XRdX=E2G%soT1ngfRg|J{@?%O++wlk zPkeotSAHgBy+Kir$6()jBO<4aO`A3iC&@2=`AZ&pJMFa7%U}L-9vWdY+9UJ;TPD{c zQQpFM2DTLDBK(^BaewiCN6dY^GlqWyy@5&0QqESr(f4z}6Uzj6@=!AIZ{!=bd+6IF#P|-uD*I z%KJ6N7+DCt!HGN!%N+VXlC#-vCmwyAsJLPG~1BDvyU6dB;1JyF`eAb<|6+eesK5oSEbuszqu;dRw)-6OkF* z&V->+AfJ_Y;;aGLa&@>dbDYH;2J8<28#WMKJ+2_OBBz_`#k74 zt1LB#s5c_2Lk>CQHLrOM(wEnPocf6;o|tXs630~ty+IhtYW{Wb9pWdFUJFu~q~7S2 zo8fB`7^&W%#*Fu9Zhz!N{;W?2y+J)f9gP!`l0V>5ev4^gLV(Z%yfk4F?=@^$u#@c@ z-}pwVt+&4QtzY@dR|uB7XOJWQdJ%w;SI)>f#tmVh5d1j@ZNx(hVO$8ItY^p8D_A7upL$%0z zE+^(Ii!$U-JW=G1z+KHK(x|f^dgHN=T|UHh_0`+DHL~^yy|L$>slNxkJ`h18^=!mt z4YqH1!yC$M(Q{I>fuOj2*OmO+ z+;JiGc@D5s>EECRA$&X!2h3XM(@7;S+itsUeh0}rIF=7M-~b*M@j9Gu;UGrm5PqUk zLzA@hsElmJFrP@Gvn7?kX4`N?WRvm^;*DoM57mGD*MB|blv4kXctoWc{SUHD-g55tI!9lrg9+2Q-j_R}yIQZV|(W!Vr0 zLkzb+e9$C#*YjEIL~lCu1~Etc!?HQz3B9q=MoDH=PPma}M&1d%LCXv0jvj47n)4pr zZd=&Wj0iWXb(B9LTi7B~DN$6BgrR+{%oe?oY+;R(}!0x>B&e^kPlZ$zL z<)X9@2|w}pB@A8A>8-(uzy0lR>B>kp$?UV9^(M@r>La-BU1#puI4W+CQuJSSL4 zgw*xuA9_EAd2C6Vg}RkDyW;7w&pQ-95db6eDZE}02|ivP+H{pCa+3Jer#^*wl`0~x zBVl-8vW$b?h{ryorAQPD+2W1{CT&|d$;k+uxipM1j7!6~;BwwUoi7c(j<__}UVAP2 zkcHTu|NQ3@GneKW&v-`Uu^dT%M;^?2BkpuKWVUFzU`zKx*aEgcwu}U!M8OvMP5W1{ z#rqLgvnI(X_JuF;32DVWbvpwdRW3qX;XYs%wIpWQi2T{vXE(0wA z;!m>7BbRK_vx3K3#LsIW$T7==DMELBN;FTQTHI7+y!ujW)Uzu)> zA@5WMn?8Lyk?=^wIgsCK@lKOmG+^b^V`rT82G9KPiqp$3UmD)Qfl0enOes*#SBuU3 zSq{SyE;`;S7RupMpZe5@|KSgRI5ia6?|Ny!uvZ{#N)%9bYycP{r7VxC(Jw+1bG zMazpelQci+-zYM1e{vJxW}(avvA<}(xp=~J$I-aJO~*I_Dq`M%cu}2Ly^+le-)TJD zc+umo=iUFyU;Z+eJ03wih4NBa2J)}$gpgp^1+Eg_^>}T}jV$!%&xx{A8C4uC2IG+x zwtloNhk7j~y;-ULXDF z9@ zc;k&DBlJSSRN^o5#5~SbZ?wCV9-n*!hNw5hpuRL z%YNj7*JpD5fB*M?#71c(W|Da3GoJ}tE-Fzx`VpKTDmwq_rDkOIG^%Gl)^J$tf3_qE5ys_7I@=OR$Y0X??S$*l^)s`_rHP z6m1-ADPWmx=Rva6#hl31!902#aow?yh7U$D(*npgMqu@ES4Od)F=GaiU<|QwGjhL^ z1h*&2aga+-8%>1lwf{yC`@3Xda>^I*&&U--foVjf-N zqJKq>x#h&3{>+iEL*%$n*fK9lPL#2?{FI-KVbwV34S;3k{j;C_EI-8?am%@#|HO4fsrl?@lg6mOMsL#j^V7Mp zc21@5UxO_pup+0Zeb~~n00Dd*8B5>sb7GE!9Y#w9TW+h&_LHCdWIMJTr`aWkL}{Rc zXq~~rVzk3D54nY5bcLloB`1nhh_rgu8}Y=WrH@uWno){zo_Xe(+5UFMt2f$_@%UsV zFm$~^pGH(YT@HBc;NM^<3R{MFkPwePUL_`0Z_s@U16X*?!ShLtLo)#luVEhBK`t~E zG>;&<1P~7$^?BE$F9&ZrBu8^L+jeusN6k*ZGQ!Y3o-OSNn1?@^_6}krT9&K?`ZF@j zBQ_p%2rZtFB!N?%hi(VYXfI4=dyJt z^ad@4iR_wdZnDWHu*Ho4fy*zyeCTZX^hU7d?Vfu-*fOG=a#hKe<8=Rcv4;ckpnSOKJe>eSnWxc*?G;yC5!#?9y+O3Zi6P9VM`pR9 z@S7p$XtLpbis^Uw70*v)uETtOB3+)7p?n;l(#usf>?%osdyq0eME^$U4IUb~$0K(W z{US((JCp$hJXj{szk#1N?rw(8P~&j3Q>jtWhj~M}gw$)q#uT8miQu3JKTiw+KK9sS z`6(V##k8Vkr~5s&MGF*;U(BPigV%gcDFz;JpV+wQR658)l86bl=p{nZ6RS5Ei5Zs$ z9~9LMl@3x3S9};eV6NlzxHNc~=tqQ}K@gH61(GcjG?7q;+M%5R;omsqkR&tee+oAA z#*7)sxiMIE+Rm=!$0=;&3oRFHaqGbr&l?072Q+lHw2Wl7yl4d5xcw{HVgP!BdOysg z6^4>Y^^Juzf$?jX?A87`ZZU?xalhl)V|vm^k?rq(_d60|sjoL8d~9i>#9;1IiffLu z&UAn3joMewfRlv45cLKxkKBMbLV0@7^PdWxNh;{hf!h|D5%>FpM{m$MpY9g4ATWhd zSpW=vb!nqvd>lzIsD!5wuTgC4=#5Y&U;XM=IhT>PYzH@{97B$ruh?K%)C&(1y+M~1 z%)=Ni4TY*~{D4Q8dxXeIf=SzQoj67G2IDlxhwUH#_(zm;yjj%I8=-jdJm3PQ*fScP zC&qvmx_mn0WGPfc&W+D=DHa4zJO=CNjR?sb3XVsberSdRDNj859@A(=gk+p8eX&Tr za~9Mah!T) zvZV2quhjK#@WB*@!P4x)mhQu&^KTT{;@=3i)QLI!BV~)IL&PGUNtX`5Wwvowa-6D} zVX7z-LeilKtD@iy_o7E^#k?2yF@rygdV{G-IfxWtn=Qd+ZdJ@fRK)ZkIE$Fb1=WgZ zXUd&oocXMFJL-*gWIR4u2@FMV6z?+LP`LG2c!qGRa&M9ZTNZ*%h<~GKULLPUr&g{h zA_T)madC+@o>a651Q51NJ(P_hQTAgS2Wha*A#u`<+PrWb@Lr!2MqC=6+a$*V7T&?RG_az_3xy>%U@KGA^u9IsL<W$G~SW|d#5#a9N9_d?e#B-b0%=|9HRH8UVdBV`RS6;iMN+^&<^mM~Eo@#HhC zfDVe3RqDHJNmK+ar?mWuPM}sSi;50MV(7{N2P}7qgkz*7+M)cJuWZf{12%(gd<$bk9QCXbFf81XG@~(i~vkBmJcHS`IB-OUwy^?p>U`lNe~PFM)Wz!wlSg&YjL@- zWe7jB0%9jhBL^tX`ddFmLaH}y7^vM=kre_-6*O__|?<;S7Si-^+I6uT-#Sz}B9`T4r zpiFr7Qr$CyP-pYFa04zp?y!)Vpm;T-*9{iZ1cn(H6V9J;&>OUplU!UH^aiSoQ8O{U zHo41%XXra|Y3O5syg_`TI%s^y5*9|s)YltKU5<)iSW2Bw!G_-0XP-0%cBG$zjoOnp zak3L5Qqdd1Hcxspbfm=yDZ2FLqA&+rM!7c8u8GW!9uWkl8+5kk zLCQ=TV4<-fK;dTwUA#0gApi&IEJwA=^O=!=cxb0jpH6^w<}K$wjQ{vpNz9jm42w>! z7(*>g+~c4(kX0lXmxk$*&^ZV~zM4nsg$aSHb^dxnxBFV zy}^W{;TtL59mCy^+7lNUY^gWd(w-7*`IOkG*^(EMKyOf(gDoRCuz`hf99eH*2}dxG zF1w8TrpQt3V*ppXVn19;#n^&arGJA7YRFD3bn>CV;0)xmjLi(C4O5))YacDM>W$(h zaDOTg=udA%I|W{7-qV>Indb>Dm<(*E6DCg#y5ZsRU|R$@;d&#QWpRFD7!5#Zq@sDF z+lLh{4(8S%U0yTeF;&(Z9B0BG#%U55iNfQ$(xkx1U|Z@(;19UaZcd{)gO_>n#JiFQ zhmNz};0>4T)3_g(hK>i7c^~>g3O}t~bnhWuUdFKj0+UQ{1Y5dKOdwmNENoHKWxave zKy5N`o|4Z)qw-tKL%;6j2#b0n)GyPL^U}n^w^z7LVxc{hJB5Ymf0@RdKBa8y41F!9 z$Px8MB^D1(Vgh~W4NeK~A~z$Ck$95OSb&=mXJd3ch}VH4x0-r`P7d7r)V5U911_XU z3|JEWjnEqmjSt({7R?*oeol@ZUfzRPrQV?GF9xnODKHitN)h28+ZfG93^<2zaj>QG z#gZ2P25t~8P56xmzclfL5C2BgiG8<&SAwc}kZcl?ExmdmP)Bdj&O?I;T?`lrTi?GC zpMqt(@4n;e-w3whE{oDtlg!}3GFxtH*tXLf+?Y|)#@W1L2FrSb7880j;mW}4Qogz9 z3?J4GVslwWPK`JfesV-rw;_!i{22%~%9jQ*SW+R56JG_c4PQih6_h5v=0AZZWTD>d^N|izh14 z@(_z>SEb&dXC`5|A{}fCjK#r*<%i+mM^KV*Ytb8Y@EGuN6i+YfjkC@=i|m(6&d@JM zF+zCa;pYh5jo?;CZ=g`}`iMvL(4G=qN%z=e0`vyGbS98(Xt@r0BitIDOMdaH4Sm0? zH)w&P4V2cCJT+_FRy^(~Bz$#UKkFEH|bRVH&_m>YKr(Y6>66=jG18^psMP2WYn1j=l{YzJI$l0@!` zdV?t?E6r=McIbb`joejlU>l%1q#hXQ=*Vjq{D;2KvxPXLGi|7~JU)f_xVRz%UK+lY zMkMH^xHLuoM!bXbb@j$8U)k7w z_r~jA-}vS?linCWz4>XS@vK z)A`&pt;Q$;zV*xkOmab9&>MsEEb0xSWgd?KpLm=e_t)=#|9i4lehBCMw%bu}v?Js3 zp%942ex3fJQPVMD0+N8P8gy&q2ISUbdEDb3$K98gO2fM9jfiT9TN;JKq{*Z=f^9}U zx*ZaVOBQ+~)ZnnL4uf#R@>NT3FaQ>*@Uf5eHVii08aPq1SETX=8R9|pMz1i7dLtBC zd|ZZ7N)I2Nbu<>Enh+jw3k+RvM7Q2y-Cyz1rEuK!ghIX16D|YyN}yN0L0>-n>a_3U zf2I!=-Mv`24T*<)mW4{H(uSIP19v6&`+y6b5QyQHTW*O;t*AF>Pr;ILcG?4nd!Kai z9>gQ1U3&^)U`Tj&Dlz7RJQ+r}U;_zZ0|2w$;6e|0T{xW{gKU}NEG|t^Z_u7Xie##5 z-ZO;3cR(GTk?ORkgx>hV7kc{?Z0L6U6ORGKyjUT;SOzrPsLP9!l33G+JVy8LUHWdDsa8IKHw0Cx>#zP^70PdK+8;|F<$Fo|f?o(ymx zlFs(u!NS ztT!^)!FQN;BY+h31|xGbt2*Wl9wsNpPWb$J=64vM5_;ovpG*FY`k#Ugy>a{P$-mJ} zMGl^)6hm2WWQP(t9ZnkEVkxqvNrE!dp*UVFx49)DJw=g0D<~?BSJEGkaosRHra$*?@M3$5<-Q(9E=O=YC>1N z5e=g_Pa;nInSC$Bz`61E!F?BcBZj##js~-tYmv!{`H4(*wY={Dk!3zc$u#Dl`OIgS zt2s~dP}Un{pPG*DvMkhnmtA(*sLkt|ucF@IF-vFQVO^TswI=jNTpC{VKt$d2f6b|1 z$Kldo2D46m>QkTMV{JR^utQWOlT2>}TdK=o``zz;cO1$UN#HeNZn0p?)Zf9jJRX*M z7MCVB2;X$0*fZbkIG9&1`R()ug%Hmq4?Pw}sq@@mcr2~S+zWi=hmYT}jd4}PP>#0q zk)nSCp}X*jX9LQ=>fb0c@yHMfgo>b)@<0ejBA*7}mgkM5 zm)-%6wZ$)JdO_X9)ob1?~4&nbg3POIjJIR42#%%@4fMsGZz-qR;LTI#u~`! zcqALenVbA(Gz$&dbE6#IA!AV3TJQU4hx728w7 zzY)iCvE^gROk#%jAb0%cF?iyMClU;O)vMV>y+J%Jz2I`9{q6KeOuf+`H_xg`pr+o) zWj;n?qQ<#F=)BEyn+Hgp$5%YzJG7^Se}mUsLUQvG=YR_YLT~U%GOUe-k)Av*s5;{% zy4OcUO{x(rvYfx4!pjjedW9KG90bzP8^yT_>F7mA0u)FzE{xQ?u6YUj^Y|3z-{44G z?g1|i@sKqL&}ZX;D>KHIDfrqZUTa1<@e@gOwXp91ku~Z>{9VjO#RL(|oR%#q>kV2V z@_NW2b@fKHq{Q~N+j?$K$tlK8{mcg2@Et{_cpne8|-Cxq=lT@;t6SI zB=HcqtKK;1po0k3N6TYny73snSMaJ=y^2RJTfXPWcRCo_i6gzf@s*KxJs4TW6Uz{O zW?p3~byCL$9#%ZENImXussIiWAhwvtm)TD_<&;sISJVEiH*nE}&0SBd6Ces6qpHa@ zK5DkW;SHBBr!y9Sga}Y4p8mqbrJ8Z%MH6JO(3pC(VKbk1p;?Nt z{|Hp%0Ug-*(lqxk4@PD+r(uPV@xZKOPg!q}_c|wzE{u9(bZm_o0&yR8&>K+#c`W3Y z5njOK9Xv)E)O;D45WNwXn7cSHD5b~<^*aa2-RO!zuw_D$jPB%h zNSu20K(Yk$u|4`LkxZ>Y9tn0FgBYcW2;y8Y3Iiatc>z!Gcce zqD5@*XM8H} zzE(6QGG08AdrLA43de`_y3v7f%THbPMvKjq9GYcuj^U+Ydh=k*ozfFq^+wB8@Xtw4 zpo8Avnaph%O&j>qX=Y_699p;e?idSAu08quCs1#YM{aE%V!SuuHpdIf!mAc0)ocvv zqZkl5$+1OmkR0vQZ1D(ju;o*dKn~k(zWHXt(BRINxrRn+9!z2(^}MuX69agDj#O`u z1eb;~1{R!7WSoUh{>5=DWT(Zd!T%&qvdorGiZIBRQca?C87*I$NQ;V|uh~5O;mN0g zkf2vamI3W{LT|kL-KqCQdF_ zgDoDmCfe2bRBId`HCqPGqat`{kS={e%WN@#OV4pywdlD-Uk*ajWfb$`nbVnAf4@eV zk8LjYq{u!+y`!;Gz7PBX8L$Mjlp;RBuFb0Kp9O1{r7B ze*5iB@IVI}MfNLpG@qi8qGiJgbJlMAPbxd5og{#y7r!ZCw+sAAs1f@X$jKr3VX1 zFn40U%J{&G941O{Fnt`{cqwL>BoFp5xPAsZgp5mb+G(fJO$dhuTQ1GS>J8L7mzPc& z+ill);S1B2^?A=r+by<8N+aAU+ibJ^rwFk9_UTWCp>uBMMwS-6L9YYYG9;Y5GuCYA zY;h3;TMB>Ha&`1Zs<6k#Xj6-liG?T@%QnM-a);p2C)oj{u>Ae}gb66Sh1FF^~Dd=-@|eM9acX=hQp@8u75j00!qGAW7oc z&wh41>e(`s2J><%?C|Hf`8OzIWSoT;MpV$=d+&|tqN8#cO!hnHuIsPF5SIqu5iz5j zsUt{^1}wH*FEUGjVmzdY9$-s%&HDb0)mKkW3AXQjZ_)!D{2N3bO(#bl*}aXX#f8G3 z7hI5RBmNF-LT@l0Hj!O@btZX$Eh9nbn#&w7LudQrAOASmQgl(y!4_#(W*eM2PTkF% zCt)5VXDOL@Q?ZcO8O$42v5&i(hZy%ePKh0N+%Xq>W)Q**mil@l!pD}TPs$Rb-ngN1 zoV1)`Ia%uv_Hz~I&Z|gh+xQTjw z4saIHPPpFS{VtvfOj*Xmhu0kP74P+t>p?Dh#1LD?+wv4*7S_G?+ABYWn0bs}+vyE} z=a2x$Jf6M0;}@eHmU#@$We_4sAZ&7?6RS6PHw;UdDTSvuE#nMZ<`pt$e^_}(QPUvE z08G?i&O4qi5^B*KsD-?)yKc{t;O%ekqBnBnzxq|uC!tc9Ew@!>8@<_ z>C>m6M>nMM-yN@XAn$?dYsE^OQNcnRC+zDO8e^V!mX zg?adCktW zt8w<(jgwDqthH8Mz477~H+I>jvGdN2uYE1)fl_asuqbUWys&Y`8I9@F8wVYfBJVuL zw&>poDRTJX>D)8VY+QbMimmdd47O;DxWvI0=LQ7OUBQ-)%IW-mmm*u5PReYVaF6So z*%s5`IMpuqNL>0T_FNaP{uNhTL0RRJabIvsl;PsJUH9V@W_2SHu0FA$3b@~KJaT6N zggcZi5Qqv(>iah$>3Dd8krMUIZ+?@872aZSoYEkOONXZl5i*F6z?H_UH@aRy157dk zMZFQy0#76Fl{7TO7})4|@QYvkg8MO+{s=_nHG%$(F#CZ_+)pEZe!-#U#TUUtm{%17 zbZ~*T%X{RGIuU_^Hsi6Ddy&OdqB-4mF>pMGVF%|!m`5WxgM*MsT#k5Y>chOKbbkHo zUlR$QYW&qX?=b=~CtWlzGBpl*BNELv@J+pJ9u4}yq=MkJmjD#kqJ?$#BNs?1lp6~^ zjr`po-1s?Bc8amlNWlRHv=(dmI{VDLK`RO8##)TCxQ{jA-ii3R5sK-?4brRLh>YZTX3w4t0bHiI4fE~)n8!SZ0F~ud zz0pz<{BzP1DC-SgF}P(I@ft0#F%38k0X$pqd{*8#btvUW6RIY_ zbvm1IkTGR-;_M>~FIjjYc)ajdf|TN^h&{C9h?7(Jli5Frgef2Cwh`ZHB?(OBCoTcOik7fXBwUMe(;Ju(c2YrL z7)1hryy{{h8VR2~0RkgC8Geh+@n`;(ka1}ko=IK6f}@@*5|@TK>*81P&MC#HLT`NX zlga0>&N@AK9?%p~1Kds&L@ z?z>aWl|?Mjv8C-GvqfeHTe?sNC^)c_=@o(G{rqd3!WJz@iGnR2s%JgxS;3YHH?C%x zZH_AM5GIN}?vXH$l8-!~^Abwt=%bG&mA;GpC6`=6Bs|cF4XeUDUM`3;MyAKjLQ(He zZvX`QiG;qR6x6u=`9KmGVWEYHgeq@;${vaGau*Vare6NcOeSO}O#1%!zmG}b?w&DY z23ED)9TQ@kiB19n6eNmM^xxo4q?qx9r)ir95p`4C2yA0`Cbw1JS&qtU!u=cAPcFzZ z{_~tWlobwVZv1F1;@6g?oa>eV@h7?Cg%P#J3nLx#BL4U+Lj4;yZuz1M0xd)>iIU;T zS($E4^O!G%NT?Ke@aDYpzE7N$0&kr42D#wLj4^z=BAZ8@2uzHOK8NM(*UUS?5L(DK z-aYd>IJ!6TSdJw0Ml^H8;MUGnfBqG{ap#@M+fZ5WlMp}U^~q08{*7WkjT}$S9V7=K zU-60+aT0mu5_kHgmtLCL@@5fiWBf?pY&nq<1zUVjTW+~!#E)Mtu4bh%<%3b|>5iVw z@-nA)G-AciPK=nWbud2K;@ z(XbL3i7zu|!-_UXmem_YChkve0!6(MJ)QWb5>+Jk3)9yyLoZ*{VqwH69JsCerV+Q~ zgF$aZE_mT3Uwr$3JTm5&mkT_fd{2#znz1ky0Nz~&jmEU?Sug}KzQV>&RDyi>jh+B6 zdeMvUPSfL&7pToP+l<&amzd8!`)o!5^aL%;qfHs}PzcPE%(dW6909`se{3Ty8l7qS zVMqmUrWap)F;BA=^Ei>82tbz`nj|=d6M5Al5~9L9nq~+?5_HIHcV**}jhlZXo58>Y z45P0L0BL8(T5R5Y^UcWukl7-cz|MzsTY3|P!IUv_4IjK!$hNpNFL=QVxV~{|=z<%U zCfe33ug)m+25KEK@SEQ>=-{!_PH7u+Yt)n$mBC`-^bIyhvF*5H+Fp5ON~O}ZLQacp zd9x_9McKj)w(%v|D2;JxC}#A9fGzrjFti(HwiMA|OCN?{%h%%axs`-l4n|-)P(`ul z>LUxe?%YtcNJg<|i&K;Vv&a(KL(9dU?nxAThP$%RPb193J=of_i05WDHZ`h(|u$i}<{(RFgLA&v!NHz$op*Tq;|+_R19S$%BpxPV3{MIE6v;6`_1ya8plymwHdP;rDo0hZYw zal{chiFW0x!|{ABJM^w8#vl9C;5Yl zACC9!--xJk%o-dS-v@#Ng~6d`vv=OW|b7VRm2 z`qQ5{f~oc6DW;yya7O|Vplon=M0-lh9m@MfE@_=Bh&m)|>J6L*#oKnk{SJm<4|h;J zrm};*_;lit%V<{GN8(c^Etc@$EjOJMPp8I*UVgT8u%z-Q&W+mhFMs(9>S??MsDn2=d+)!t2c^j0bd~JA~uRq<^7|N zPO>D1z823KWIxmneL09ZzO)j_m2(%xKG-slq=+TpQle;?B1~>N zDMo@@sRP@xJuOGVJYwJ?M)Phla`w6DXzfKv)Bmc)HvZ)Ee-wLMG>9otpvcyJ31kA?Ae5G(-iY=T+?aSH`H28I@E|);d39}1;c-FpJ$@5p z+24Eby?L$Ut(k3JaD?&(P1Qz!3{2wHDeR$s=TBw|#R0-21zAFaMLvrisz|oDZK20= ztg8*}0t7Jzu@)nbeN5#Q4+jea`e-yMnuneI$zz|N2*B$e*RdrAS|xCdV;)JgOP%9k zK-L?eAZ8rhgIpJ4;B-=t_&cOd)rN&gCXC16$U@`=OJY1P^$rn&I!t1RKj{|B=mYrB z4VWsG6ElIhQt{X){>s$3VhmGd3@qDy_DOmJmqiCL5G@*;Zra#khcrRxi(b^2Gbcq1 zS~`w0B^U9qWj*JdwEwY>b&s<{avgp`Z1C%0how}`J-2c7)yvH&XEWF$rz_dQ4YyL< zi7jkthJ!7IiZBeVEwgPIR$NZH&XIWRaDNr!XP<@Yn^KJ^`qZaB#kJ0NWfc4GeCIn9 zd&Y>dM48E#KJM-rZF)ZrOK*_7c%&SE{PDExpllIl(Z)*K5KU2GGre{RS=1YJciCv8 zjrettn~QTJ1|~2he(qlu8V&2m$=yv1G>V}&Lhms}AxEN-t7|-wdP`eXohxpbDMBFb zj+XwSJcwvYh!-46>`+h;508-!dV>-^+$E-pB7QNGi#PM`HHuPU@mu z-A8K+Eic)F!4CZp*&cdmZ&8&aALPi>pPp=JqpA{sG8T>?wYUZ>Y43$pI zs7fSF`PWe&LE4czNmruw;8Z3MdgJP=ug2rY;B>aUJjN(F-XJJ8L)ROm!Ys!m6wYuA zpo>C$Ad-W4LHTvSC6b7?+B$lJrw#XJUZN4?g)e*|#t>CIlQ_emXI5R*r$4 zVR55y7Ng}ZCM}$tVHm07_AKM#AV0CJzyA7YJWk=nVmx)qeCQ2ktKhouJS4VqLcJb| zak#v5QM9nCs~LnTnjIZ`XvD{ufM00FcCW2yw-^`WCos-d{%f->c|hg95F~1PYX75 z9weKYuoG+4GyI$yWfTC@&PjYm~!90pLOZn1skY72@mL67wr(LEPPrJL4 zkQ7MzTv601qHO8!TC<3jE$0Yjj5tZ|uYdh3iUP?&D-R!22%G5vOXQ(9c(WrpZf9<> za*ldE!u`%ExK@atjC0r1O`0R|NURwf7%?f9nx{mtxVv$Gk-B=LvS3W{gWMOCjms~; zJd0j>^3&{y(~@>lerk7z_R1|PFQ&xF3DGr__%VRbbmoIY+^O&1Xvs@Fe74$ZtD45( zz$YV|)e_Gr{tS#XvedMVV0D^KDou^Fc!tzZt7gdh{*4yHc!+@-PkzmWqVG-3M_<+( zbvlUVsy_mM=tIewKrc-ec4GbE50ig`={0iT@!5%nm6yC^g(cY2bqTh#V$@{I5EZUP zO}1TAuM>de5E3=bV?t5Fx6_s_$;Bdgq5BFkhu-KKc<2FW_9FH1EEt)&I}dUK+!R>IC^@t}oebGBjWDkUw86zl z$>G}1EkG)f(2N-~h#UjB*{4sRPSV3#rcIkhRNT%Hf3H~xCQNogBoS3R!y+Tp{{1D? zt6@1j7&{x54aUL&g%B(I=^&J{njf7ypK{0JwE(!E43d5M%aa*wqZ4W8ro~{3 ztFtCshJ@E=n~Uy%JIDac>s7rd5}B#qAwgLb|zLQ<~m^_b!w3M8B3RA%(FwGJP$Tn=n)?0? zv_y}`ln}sfkHrIwcKGX}TAX+E|bv$sRU|aJN z)Co3H^I9UWV^7yGEpg^Q^NIP$aCb%>e`jlR>h4IOOaK|oTW~C>?!1&k4u0f;bkelR zIktRoh&ws*{&wnH5-&&nrPB9V_08)$i8!%-LiIxqNQ{zGGp+gwQ60xhrQC;L;7cnx zhD|m}+JLSX{b_?NLU!FXX_)!*)0Uaf^YNNHp51D3$z={2uA!HQ?q z+%G-`>zACak>|&0(fE8;ec;8@JMR-`j=yurQT$p=J)7Z<1SB8<2{c<28+;k~(o0jj z!}RG%D%7ddsnDPO?8f%nH=g&r#z#NeV2tC%7pF+#D{RrI(KVh3w&8{;5}X)pStHH^ z4@@F~J|S%1{O0uQcH1?!+%nl#Gjc*kUib=aO}$}xkbndvAOQ(TU=#$RLO<2mk+A)zK6bs9@u;DqzB4t&TsySi8ZjHz6VCVkr}!p0SQPz0uq=&0--lP{NdCH z($ln`RQmK3j$R*!9Fk6FAT8UXCh5G77~mA*dFxwKqX`|HX$Qz_!6}{&(m8}9C!d_c z$60l}9HBQ(JvG@GV`C=}wMk1r0uqpb1g0#3&>M94?8$Esff;8LE)MhtNBSQ6y4!Ba zxzTxsBm@Ite)X#!^b972-nitF70#0>d!fy^1SB8<2}oc92~3FI2-n1sN2ZY@C!N%2 zjv!3ZrNa`x@^KcvFw2UgW2>!__UPOzH4=LM^Bb>uP2<(CZv4l8B;ir?oODRhpCljw z2}nQ!5*P}BXvLr^XMjn#EZBBlslln@SsD7#hkqkZr`d%V7<-#LX4K414$lssYr)i> zT5uTW!ijy2-l%Dy!6YC72}nQ!5?F~qvF>JoNlm>`R3m(BWsvri8*fZiKMt1q4hNE> zVTHaNoXAL)ntB6GLR$}QE1aUBhXf=b0SQQ8#003g`G_iGV6VBR!3YuR?&$4M zR20SiXq$NSqZ`|9+u&A%89P~F$(qIgHx5AS2}sJUq^4m>HF=s;#^Mb zZ&7db$IY`OAOQ(TKmy}QAoRwacP57hZ4Ip9eCRAWLNM^@c{~#F1z2qERd3)(p)~}@ z2%}RmqrWBe2K_fMi7~vL-7=9W{TuzE_ACiVKmrnwK;Hzi-l!upvIq&ianM1@K|!aB zSbEhP`|m$A|Hc+u^x&USZ}eSSJW&D?kbndv&>w*b(Hl|YKj8`K1F~;;L)!lR?@4>~ z;pK=^n0o!V;~FQN(D>|UyLaSJZ}eAGJWB!+kbndv&>sORYuY2&Qr*}0Z%|(|0G911 zKGCOtBl}76&P_L^sQTzH8X4!@Sn2XgoSj=$)EoVk7SED^1SB8<3G_!GSJMj?^q@Dg zNchM{2GSeU`v?P?X4u|x%RqVq)f59``TVPTqrbx7SrU+d1SBAVp%aK^h?z4RfA~X# zxi2odsIJ~XBruuhHrq6|-n#L%uO*R?=N_-$ekX}B)|2}nQ!5|BXX4L&`Ozalzg z)Knel4Mwoy9-*&AI7u?h&>MV@o+grY*G=0xafW{bA4^OYN+g}vmPB*v`ZqEPcO)PI z2}nQ!4-x{QHyDwMB&aD2LOh^17A{Qwjq(zDBSwhSQ5q2@^adIx`%Jp-l#}L&dZQAH z2PGf@2}nQ!6G&hbdLu@c&>`e!KWiLwOyj3NZLGh3(ld2NzP$FejW@r!vFDy?+irc! zThdRr-kOw2*~_8cn84y>(h`t>1SBAVG694^OzHWa_tf=opc!a+VO?*%w*HMssOX*G z11mN4Mty(C<(DVDQ64#~-Y8#ak4QiQ5|DrdCW=5&54`Vvb@fKp14xc`?J1EXlmI<3 zsQqbP*=VD>dV?XcU03><5Qgu{sW&F7@R+UyBp?9^NT4PGl)%k5H*UD0!4TB9zBTCq zD)B5Q$~(~-!na(X^rW;t?P=+QDb)C#7Xr}aQD1MA(=8w2+b$fu>MHd{XZHRo0SQPz z0uq==0tf(Pz+e8-NnMm{`G-Cf z=Cv#^T8@O?_{?Y0ci9+4!nV#b&U%9u9D1a%J>!g|jyij6Xc8jKv!9*h6W$&d2}nQ! z5|DrdhDadmjTS}G`A>RH5Fn-!4gUt)uFE*jt8~g2-TpV2`$GGVYx~G!X!3QVX-ucePD_@!PM%dg=N97!GqW+B$7C57p zfCMBUfvHCTu@PfPd+onbuC-}ZVIjie+Cnt+#>N|`h8ybl+J2{RT ziTS>Y@eH!xL2tb9g~_(H*Y47DBT`pyv|KFzlz;>zAOQ&sPJnu!W!9|5ZMQY(Ec(0O z^`kekPFQE1#vlKf2DuPhUiq_S0-+iu&~Y_p2>agR#}8DmSdcsz3Cop(CujqSEe zkwk#bk?^Z}WAH*{3=)ul1SBAV76S2E6S_B0)z+`vyVlyp07N@yPI7vLw#f!$??=lH z!8r26A10IPf4xP$k-@qn0SQPz0up$z5eU8Uu6H#U*~({I*+$CA3>VIv|NPIC@xu;l9Cuu@sBBx&PWL4s0SQPz0utznKz0QbcRuu?)T0CM zM6rFOC?p2lpE)zxh&(8^r)0B>mh`kA%`qpO(3^WCCLO)>(iN_lY>7J(kbndvAOQ&s zg#aBDsHXF}U_qMwd*6L~tFk-Dk8-*BL@POa zPy!N=fCMBk3Iau+1N$LDXk_WB9(yG~U0$&7yk3T+{6oMhg)9a3UV-!Wm zI3*wf2}nQ!y%LCFBmebZsYeH14z{c~5ZKn7N~?|rxaF24Y;akST-SBcq7?YpV+WEz z(MN@u%E-u>XZGyhKpJ5uX0YwUIn(P^FuVjLAOQ(TU~&^c1K>ZARM!v1%Rwhq2Bp6L{b}2Eec$_1nB8_usrNBES)B63C#Eb!c5b~jQLNdTLomb! zQ<-7Ifd{5-3~#af$Eb^<@k>Ag5|F?oCP3ZF((*bVe}3_cqa8V${SQOjp&5lf8*F#l zX{Ainyn=|0&=vH0%~mmY2MY}=H5E(Ev8{n z`Ol}%xiV&!ZC>etIiU6!>FMjQ-`HrQWbLlIrYs;idRh=#%w;-z_VO?4^3@frJ^b)= zgfY2%pUy=B5|DrdBp`v|5{SkHTpzJAUlt=ZKKt2J1rMbg=WvBb_(RSppxj( zy2l==zX~#=*l&b=BIh`LLeMbvy(PoF9L6RA2}nQ!5}1?(s9TF`Op8IM4#Y-$bCw;N z8`ut|Pie360}VjZd5yum=bxW!Msl#Nxu74=Ckq#*=A<{iF{!C`*?jsWyt5>TPdJxkE&?h#xwjawPm4#qhB|EW*Yk0SQPz z0uqowOnY_Vg^e$Nx$%{+q%G?gzL2)Bc}=R0+qnf=>h8h+jK+@lzBeU}za=aQlWw~$ zU8tH(9t1-$&@qFavCMdel-hdhl#ya%O3~VfKRksYaICTaxzF|BOR*G5KmrnwfCMB^ zhd}x5o+Etn9uENB9@ti{#ag?+{bIDVr10mT{*)^E@>(Ys5hj{luDYt#o6(bnh!bo; zy3`ao_02P+1SB8<2}oed5@;DYOScF5b$sbdo!kOFRp0dkUvRmJ#Y6+Ov+Rh8*Z4k zm22mEyh9ZqKhYPo80`idq(3jaEG3Qp>3a#i!PH*FMq3G6R7Y21a)8Jb`nuBl?6eqd1W;c~>!so?ICnvOqjU zi&`LwH@zv@*{kZHA&GfE*naCO0n^SWMbDEWhsARWBA(A35(9%YopjAzjP`xSD|%>8DH@5C;?M7Ye}y9InxX+D zAOQ(TKmrmNE`hIpwegwHG!8yEZF^edl$kS=Im2o|smxl8_C5C4#-~4>=1}ERw&;iY z4M5TE^U7DI(?9Wv)PXiShg7EJK?z7e0uqpb1V%vs@5F%XD6A^SnT_OwDd>$sW)z9( zSj$OxL;@0!fCMBUfe{g)R|5?ev1Olh><22Uz|QF$4nh;SsAa&c84A6_B%y&AQ)&>VX(!w6XA&FuI(m{ENR*b9VYcdx&dmK)0uqpb1SGIZ5XfC7uD?EwEIik}D?Jq?5y4STThZZ4G`DdgX+n6aGAB%dUGjo5HfCMBU0SP?F z3537msG}O6|9tvl?0epmL;@9khym(-b~fEKeNQ&lKmIXgsI!+Nnr4nUrt#nZ-8kr= z24AGDlonkNM(VVxs5c(urAYH6AOQ(TKmwf!(1wC9Vw-L1N`m8#OW_&+(sju`6IyDJ z79k$GYK&q4^+s3729SURBp?9^Oca4!(O2%YSQUEXr7uliKVeX6<)9MkeP&0eCkES- zPfmIxdT6vn)$%7XF+QD>TT(jxLd|2c^nPG_52YFea4<)8XDCcHRlfCMBU0SQQ; zg+M5WlTKQE!xCdPD*ekbndvFtG$eZ~XF?T{=rJ!v;Qw z7ViW{V&&J)dLxUFEw@Zw6k1H^%h9>}Xv7@8jsp%zVx!I=Sz2~zz9H}C zE&&NhKmrn2K_K+T@yDm0nbg#5TUNXl9J%C@3cV4nFvNAi1zq$8F~lI*XFOxMLu z!j7sv;*Uv6_uMnZ-|I^A4XL_7$(EcVTbkLKk1sT z0VE&+2}nQ!5*P}BA?l6rFtpPHaU3s49whsVU)0qbcsXK_>}|KT)f?fQ`N9`c&k(-D zQfID@p#U@z2}nQ!5|Drdx)KWCaBO&(LIq<;L!IkyVk4}H)wQQb8Bp?9^NI(J-m{s+DJ-Vv=B zuXsgWy>Z%UUE-`HLqhcBV0p(omisqwr;rO4esYn31SB8<2}s~UNT93Uh`Gc+@{z_7 zM>M|mtp+obvs4aZji~DAjc9H8_kV93et3%WCqGGX)>jLW5Zyoa-#@K5ISJAOQ(TKmw~Sfg$RR zfWWv^X65?pUmJ7>%_^m=G>S)XbZok5WAn|^_PFEP>X}s+vX)Cg0uqpb1g1EFq3ez8 zrnvUnx_YCiJ-+w7)L6qb8f;x8AOQ(TKmrn&90Z20HyCC@&kB~yF6%*WFwZ%CIoLA( zB`cQ6LD*bKKmrnwfCMBkbiD!67@d0gl_Xo(JgG8GtK zUSp8#lb@{Kn2ZI^JV`(T5|F@@BrrO?5&bthNQ-tqg+6)w%JPkNI6jVWC+&AbF8AOQ(XCIY?cja_z0G9a&= zQ7}*iF9)(@x7|AFjiPfS@2|I>dZRO4f0cj)Bp?9^tTF`Z>y4OuoNt}{^rwxZj!GYO z{rlfjHamMc__zt;q@CV~rjzy8Z@lF#jlK3tTh_O}HErMbKJ~^bQ;IZH0uqpb1SHUz zKz+TDJr8+j+O#AIVs@`~sdUyGp<%Y(I>l37+r{Z|2}nQ!5|DrdRxJX(>W%1YvCcZF z$HjT))zurXeQg72!9Z8G#gz^l{JG_psZYo~_oOeq7S~maq}ED60uqpb1SHUoK(Bfu zoEtIHJ55*WUokhXS2;xJaqPOk$?mwAOQ(TU{Vqowcd!{9k<`!xZ#GzjW?!k zag8Gkn{|W!|53?KmsNI(J-kidWhLT{XKLW2*p zuC-R$)>#?ZO0YWPVFxtN(wA2KkO2b* z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ j0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*2Hpb!nFAYH literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NextUI Helaas.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NextUI Helaas.bmp new file mode 100644 index 0000000000000000000000000000000000000000..19eacbbb0cd5e7b42fc578dcb9db253b81c4e55d GIT binary patch literal 1036854 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 opb$_9Cy)5Kssx1QY@a0fm4QFG0dm4wO8@`> literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NextUI.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NextUI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b6f52eef6fbf74335a25b9b23a64a3f4cb14e4f5 GIT binary patch literal 1036854 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ RfB*pk1PBlyK%mtE{{@@6$0Gm$ literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NintendoPixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NintendoPixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c8075b283c379c05fb6a46cdc365a904913cdde9 GIT binary patch literal 1036854 zcmeI*d8{O5xd-4uMMV%aQ3T_Xpt6WDn!qGrhz4O?5F(0*5u;I%#pMt81x$>hxZx5N zuSOFkaRYN*5D}wBa}_Zr;teXIMqI&+1ml9@dVkD&=Sx{#U42fUGiUnDc`BKjudD0Z zo~l#d+tpRoM<2iWfA`sR+q60V4$i-;Z?|dF^}B7_wA-frZd<%*Q{Mldy*F+9R}0Ju z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly SK!5-N0t5&UAV6SJ;Qs)ozg}Vh literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NintendoPixelTilted.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/NintendoPixelTilted.bmp new file mode 100644 index 0000000000000000000000000000000000000000..063b2da340961d76c45c72bc2878f3c6e6877b6c GIT binary patch literal 1036854 zcmeI*3)nqXT`zF7PUQvghJcEwsG*`*38p;Y4H3mliDH3fii!ea1$iyJC6pIXyx{#g zprl7s6vcy<7(Ae$26!#C^k9gXnu=7SozD64{$e%G-h1|b_y4`@|NH;U^DxZ2_N?1y z=D*k4Yi8Cw@DY1{e%r0CUG~g>yXL=3ufNq+|L1yJZFRk^cDOcptF7|+`P*!@^j`&7 z6Cgl<009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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

1!oh 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

6-nN1_~%(Q6Ck}L9#UZua$J7; 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk W1PBlyK!5-N0t5&UAV8qX1^x>k$i+|-|(HI!M2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 z7ATP3jCDLTaDgYFDFOrt5FkK+009D9OP~e>tGi=sow>6mK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72;74L F{~tE6smlNW literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Sony CE Pixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/480x640/Sony CE Pixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a2928d785eff2f99c90be19692ec8566ea373ec8 GIT binary patch literal 921654 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly sK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyuq6xpf9#RTOaK4? literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Sony CE Pixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x480/Sony CE Pixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6d67d781b20bbc6d5b206108b298033dfb35a11a GIT binary patch literal 1036854 zcmeF42Ygh;+J_fKM0y7S0qI>pidgQ|d%fSa_iM+3h!p9)H$g-|q*v*^_ujko-lPfX zy=Rln=6hx*9F|RX6Ci|a_TAsGY|frDXXcrio&R}f=AD1N-SA|7lX^AeUse7cf5c?E zmd#|!W-6f$n@oJaC!fjoPaiOu66GZXgn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)zfeayFwOSMTm(q*lD#%L+2mv7=1cZPP5CTF#2nYco zAOzftfPR`w%e#@U)E@wCkB3H_#)Zj0q&Ra>4I6BZic*j{UtU5$2nYco zAOwVf5V(5+=#6%{k8@09Pc?oSrzRy=R_68Sn8e0+M7kC%7txVXcQ@v*UY zAF*5^1cZPP5CSO^u*Ahh1qVfkghYn~I}ah86B`k(qu_U#KM5AIImJkMgfvG*#zjYQ zNmNKMXFB`o=1hG;Y-B`=QE@OPER=Jcr%ivQQkY<|s7S2V=uq`%On8{HIE~}cp`q%` zFsEmdFis!=>bcnNl@K2v6|Axr7aeVP*wsgHsi^E|C_Xm$Od{aQw9w#oJa>baBIDY$ z6pA^T^KXU7$oOQXmSQqe10JjjB{WoLI4v}i(hy0?6*scr3|6Xz;_N~f$1U-3@K;5k z?jG!a>B6$E9oGHSfA)7@4z5+{mxi^6*01?XgIa^1sj}e5=4%J^S=GCHn70>a!kIS0 zh2+si{PL9$5CTF#2sk5o@N6UH5zj27lIOn&QpX*hoh>PTr<^k2p^(BB>32*&J zMRKQ3;E4TeSfe_eIqH?h9MnlNzSa36VI+@4l2m<;RyEiDJkX#&pzl@A|LQ00|WRo`0wk^XsB6@7R7ecuRkyE-f3y)_FUDyM1Eq> zw{un~By3fm?)0r(wW4R&g>70KUO10SbS`uqNS=&dWsCK%RJvcK(ka#lb+BsLzU7}B z*0@fpG*rqH5)e77`}SDbr~CZY-xF<@qPdrKZbvdwb=So9oD$+nT_j? zEn7^9b6;|EcXyYwg@6zc0v=Dm&>I~KD?SsW&dZl68YQZGI^glMI`8rK{YG#?f5tT&7brmygPgGNXwbO{j(7# zICLdCUnGp=k;vqFqg(NOa9B5>H`k`vZyGmE(i_Vc15K$f8x6jl_Q`wny!5|@-f%%f z$F_D*zXfetEU@+3-HPTR27TOFp^&gO1A4FM*=1$#ZmatCT+*S<(IpGH#9nVCPezZ@ zh5J=3MQ>|^oI;i8T0C#3f{zcVR@TrPsnS^1rQPC=ZDuw7vTym4oeJe#+OZAENRgY1 zLeZJMyLX#HxO!m!xy>6-uU~_9?U47;UmDcBynpZM^{c(lo>sBhsfg=G51rk#{`|Hr z1FDy!u!hvBdTH18GwavhIDX7_qUepg!!KtG0U;m+48760P|m&;o@A!n)Q{ht^1pX@ zcL>uyeSiF0|5?+ohwhQ-+PW0ZMKA22H~2Q_+O>cym%UD%*fwhT-f5E;w)vswQ$;!# z%;`dJAV|6v%{}+~uPG4+>7s8p@}G@*lqxu&YB`5g+5b81llRBJ{eMB%t`Z4)KMG zlG}RY)A#AnG2Iw?BLy0^RE7Kb23-Ct@amQQGp6kr_xsk7!?+4@NYUt9I4cwe0_L}B zHoNJUbDDiU_lKs_KK)?tv`JiYhu%n*43tKnr;GnwuR4%ZtP)c{d2jLuZ_a7f#Lyeg zXoPxuQ6)(H?n&czO&Yg$V4ptaOQ5@!c4|v9QslUE)U7Ed*ZlM^Q{dOPP?|axTT%j&Hn!DO~Z!hs7|e2 z*`@FkMh}~!eItb)_EtKy06+}T`wVOJ%&o(z{2vz+odJ5|`k{lpo+?5oyKYclI!&fk zkUM7~E+&R^jxAfn*bSE)nDvLw18N~vy`ejFI_ufZzFN?_xt{34TnO|A*SgRfh#YPj z6A?bJdU?zyjMVh2{8XocIhJ&2&2eI&>(q51#bh9j7PM@Z3hP_Cg|UX@dV_HkF5fux zC#nPkKsu_xE0=qgE=c4Vqc_MSnT6r#|NNsfRFz1~0- zZ2Rq3eopBbc~2=Yz|F6%`dN0NH#Yn{2-E$piR1X4C(y&%KhfWh-r$)xrBvA`HC|iA zGe&P*-n+ZaW2TlS)7pMLoe_38ernAM&L`}eI97j^Vn^>_?IG8kd}zU(6+Jqy>DLQO z2w)=u{8QB%#@&0AQr#t1CiDq+U(~LZ@s$g`K{Dnv`%0C0Y^)RV@%lKixzHQfG^i3( z3?vyT_c?Ql?mNTuhLO|J|9Po>o@{+9l!^%tCD#nS>CqzlX(XD)AD@57@Ep@)w*Nlj z;Oyy}ejS2JZ1;o-lZX+Ud=LUcKnMtdv=ea98~nO*t$xsR7Kv-U5pRy2{^iGG-}twF zbR`l7T+&f*I7^ko@dvFp=rp-w(Dkb;n1R`?BUXBh4+myW!)oC)%$&Ao^7x(Oe_zqP zO?v;$Fkc_;9vKwqT5piZldD(koi>q#G2+8m*xLTR z)(+^syjzDY!-wvfGGX_`u|DU{=)9yQ84i$*KeZfkp*N@uR0%2u<-%3I=gwq|-q2PE zzl#?x?%0MnBpJ+Jp4Xx&ikf7Q_vFd2Q(t+(i>^MgVkr}GXMOuQ*RJW;lXxy{-x7S| zIx&cq!>9xDK?n!|A>f*TgWkZtq0Q{Prx=ud-idvKZi{{gQ~!V}WwF?g`M-baTc@wy zNHJCR2Xz-<=#6o2{F`riJhwl`;q$N0*Q4LT-4h9R=s}##-*BMHBk=bo6S9giDK)Ld zHhyILpr&dN^xWDXFf7(0h%H>ZXAOwVf5J*nIUT-j#y?4rlt-ntdpfkN;TsZEvS2`8Q!SKXG(HqBCEM3u~%esMm56+o+bm^j_ z%NBuxw53IF99cY{*`z1et~$JEJ_~90O`pPK*Ja&1v9y*LL~j^HEFXk`5D)^c2^e~V z#R9#{6=MYoD;Ae_YQwujzzDyn%?~@rkJh6A4)ZtYdCzWK|L45f%rThJ9yGK;t&#s|cxB(-kefGxZ~Uzj?0fF4%kdOdC>M8by?Nr;jpIl0ixT2> zlkq96VYmgOL`bcU-#*#$SqKOLAs_@&Bw*+bM6OeJhkSEC$Ix zFcY$EPLtQ^lSIyQ^q?9QdOux)n3JD*`v?OcMRMt|vh%D&M>tt})0hT~-r&f9DrJmixvXNw-xsRGhRe}nqYf6$ z-7!DQJ<6o0H%K8h6X za(7;O%8H>ka7+h*_}CcUEpf4+Gicm6b~xzT6(;J~u1jR*1}3Hsc^+XgGDlq09DTmL z3jrY@1cZPlV6QiD7m3qFBnLgadcQO9sM|5$WB6Op7be#mJI0S*-lGevCwL5>*Rt8h zUk2+l(@}5qt5DJ*RrY_fG!?I9+ILfu-Y8d`6`=O#IDRf!kR#>@HK`!QR~q#Ob1&OI zZbI#7Z>vP5X0yb{>&y9*o{j+pPFVP3bN;+5y>Vg3)+L?VvgDS9#*5mwW<6|#%@b*I zy|M3)$&?WtBGWT;c1FMYV*A`CoNGDg4JtD4W*0T!2bpt zY2jSjAys$$sZw}~r&O}6=Wnovkq(!07?QZ-%sX>O%Gnrn&Ua0?kUqtpSgLwMpC1(z zbmQ1j_~5S_Qw-}aac`xQG3CRziJYkyq`~Xt@ldau#$7Z??oMxr>E7t*?X5kW%*vO3 z6-(l+op}h17O^ryr;3|8%ok-^BMUhfwrw%>>Jz#YYdW!`*H`Qpkd#jhM-6pbYmnD zr(V1h#{TzZgGOXvAR38EWwaCui*d2EtmLxGjeHaWLO=+3IsyA%QDz|Q8b3N!BF2mb zwesSYe^IXDSDF~;7Fm>_BhlSrdg%@1&@XrI?~4J2RC7d!h=p7`6T4fz;Sl-a_O0>K z(7Dj#s0+R_M@96lSc=F|AP#5pXBzd!w%>+fvcNoYamQBsNRsP~%lr2%YS(h(FF%cV zsbQBQPjtwaJ@E2h_Ln68%nDgth;%KUXU_Luv)Rq6-re->Z%S|A^tDK?`7N3zzsli= zGra)~23)!o&lBKeAR~kHM#nZ7G4N08d;T0Lr-%)`fw2P3#+VU9OL~9_iPfpV<9H|2 zG~#V5XSqt(YU~>*bLzS14Tm})e+mI1AOu_!u-6;P-`A+&{1o#*r=I~+e0QcdCcg7u ze$t23t;SqU^^?wzx^2~Adg_gawNp%z{Xv~yZQq~=VZtQek`nuK96qz`h38zX5L`>L z?TP6uV4c8(PXBB8Gq*oSU!|cj6_|*ZkX2s&am~HN$1$|PWP>IZA=wl z8VM)RcPHr$o0)|p_T`YO-mt}OW#g~~KmNcd3Ed@^t4N&ajRQ0PU@0yZm1&=Su&PfF zrc8wSc&kh7M2?XFa>3^lE0@n}`5hAF*T!|((}b?paabpLq1=L#M8F1wsBZiF8qiy( z{LuV4?4HAX9wQl=fW6+}O!kd6qB1@h<0%}u1Gud|q?jWkYsLqi$3qL|0+97JM;9+R zvtcbez3ReBnzmXrHxo+Dk&%os@s8_J-T}z074}3%gRSn@bN%1}?D9rI9GE>F5yJkq zXE)#8a>clvd=LUcKnMr{X9Vuh8}~4tQuv9JtC#D@w~QP%zjbpQ9i*%`3O#Xf_KXyh zK?j$r>HfD@8uN(yz{XQ5vwq=M=gvJCQ($C)MC!gc#a!rI)5WtN2jeLLmoIS|`lVmR z(nS9IzirOM?nZCS`{7%CqjOs~AqnW?n4O~Hbgnm;RKq^J%)4OCEL*|OZ}q)i9h_qC zto!2Q%a_h+{`JZ}-Pn({*HeY@^?irlxQFqSLQiZM++U}hj(&ct?@*yeGF0O2>>GNu zjy~DpowCM^z?Sh2$M5P-okx~wGl7{ot86HLe(Ppz6!v<9p%$FPIz-ES(ar@PXRhr0 z*3Fos%S7n2TQ*+UzV+bTS;(ikEt;O)q!uFS_#Lj5KZSr05CTFVIRQg&81qGa&!6== zb&~hwf#++sxYC!X`J#oMVC-Q3j49#1K1>C~iz91Nc8nXX%^KY6wtb`U6J3kuVM;%a zxI=FK&0-CP8;D=OU)s5ig{xS$|M=`f4$`aYTQg0OSp=az-aH+%aV z_?$hRe7-0raNPd1+n>*=Y_iYkZ?8Nz^XpIP7P%KU<<|Nfofs0P#s!`(K~gzxB%X|r zcU(HegoUZhTCMmA$Ik<^HJG{yE?hTEdjAa~U)WkLOVPcpQ3@{X8;Gl!Uwwj~4I-z1 z+%WVfW@WIyYEmRl>>CtHr-C^dMq%0~>yg>I^dyO9Tn?KChVCyfn9IV)$4~0 zxN=}GG3fYHytNz@0zyCt2myNny34z;Z8LgfP|XTz@gplAOBc4i+g3rUKULtVxfAPQ zKTKK=%Q{L-_jFHFKYgDu6dt9MKl^LF!S)kG&Y6=xcx!pjE*PkX)TzpkJj+-0jrhO- zI%``P2r%wWr^yh;w9h`oV8S}eA$6+~1E(cVm~n(lm{e)3hh-pxO9)1s#+kQ2lq$$) zy;js59nF*Y%AQ@hDYqsz<3bWf^0>P#&592n$O0L`vjkp8PAp#vRr{x1X3uuA`KGX^ z?eJN{pZ>*1%+0`bpVZOc_?s0Icp4e`k4CI^ne+WOOxtj{5COpv=5KHn*Ajz1fkNqC zJU`ONSP$!Xq4U3IH2K&e8R)Bl)ymly%584CR@fjI>tWd~m$?m0hZytP%Zx!V0TsFB zaKj|MasC|6Jy>*u*@r5zvS*jy{`EZmF>Wze^^IwqFlRSgqZCw?D3WXJYp<;C+jCCy zZ@rDtC5L-B|C4JmJ>ma0CM=Z7iK`a$26s`5rf*eyRkFqM5I_D%sn~JRQN)Mp!fpN?(!JaW-AT7(9h=F>9!+o<4*^FU%Mxb_PCN5SnX++E$|?0M9zeNTTtG&bm&?vZ-=~(PX6$1 z95}Gdp=X&Q+zZpUaYFJBTyoprS7Zd6hNw%}(BxK}DSWU+81C=OT*h#JKdkOdapb1l zn%Io<)$S*@6dFfJJXs(k$fud#eu1M25TiHLq)0U#(em3r8sU)xk;aBH{OMrX(B+}w zvlg{=b`uIGBEXO1tT^tF=TVll{8YR0ik_Wke)GlY^{ctu7^PCz+VloXHMxpwi9tt5 zp|moYT0LSqykIsq4JM!HbDYn7kXgcKl$2fDF?@>&m`8tsgaY z%$pq#oGW^D!AIHEKM$xXVcT#=r$KYTYSiX&&U^$%om2@%RffO#ta8b92XkE|ZWo`b z5_ukBS}%UjW`6r6Ryg8J5v)Ug$sJXZx8MK$0x>YcrBA@oXuI5OE>n=jDYmRBpJu9L z^JV|z%a5tmOFI0h&x{HV<~W{AFgmFs25d?uBZvFSpF%(g2mv8r5a73y&n(`=0>7+l zd*;G93v>!>rLl9|@A_JnLg1vDA7nN>J+^Gg!8tRSZpT;lrhEJ}a^(8qKZ%?(8BbyN ziX%%FvIcW;`&RfEcXlt1GrMnbyOtQhk1knsWYK&cfr(*hYM0V7?R#u@Hmd}K+7*6iNSND3)OJE>$Cu0L*755}#SN4lg# zD?E);CGhvoC8;x~O0;dsR=g_mnSa=OGI5qQXV4ePQxKNuHkM*E$?=mJEFh7w@D~M`hHa)Ki`;k4d=FfIaod9Wr(+as1CtuWZbR z6^m&bjHLWrx7x*B+wl+MWAi&|f1TDFEP7>)aJ$^u7&F4C^5>kHf9=`DX)a2{J`(vX z1cZPP5CTF#2zVd?-0ZUuhH;;Rv#0N!Hj#xY+kPLhW9%qa(BOJ~-M~INtm)fh%WuQB zkNJ%eK$iUMoi^$4f;p_r!VIE!=Jh~yl4T(v1cX5P65zp&M`MER$yz^O^X?F^W~i_9 zna<1_$rJVHG>16ZHb87NL+8^N@XOSyDHv5D9`RV-mR)U?EMN$#i z@^X(iH}ZHF<*2bJQ=~XS285*wECcq{PLdNTSorEqJVkLzi}1$`){zcL`6PwSkeNAlp^Qhn#fPDTg?tB z+JL(!TsG~VG=A&v!$ZAozP?k8+%_ix_t)d!{5K1J zuOCs%Juv!cBLLpL*fo{oYx?y}I&Ocz`~IvGOx_^?2WU)w{|!8B+ZV*tkKdi~<;P@X z`Pgxkk zx*_|hC^e!Y0hFVYvQm-1mvv6sJk=Y^OP6`JFxTC~l z_N=B~BrUzPTl1LwUOMvQ%a+Xg?n|5}460F~Q^CibMxHl28>z4C)os>yO_G*^ru0y$ zw~gB~Wqg|)CY(7OSu~IP>ORyV0eZbB>73o{D=g%TJG90J$ebU()mz4=*iG~BOC+0r z{h7$yK4D@BgNmHq(3TP$U-T$hfa4S1{cqB7hg;s?pStTL?+}0kG;nGGcKd?BQv{x= zmUL)?t8=CqaKpRpaCIJ6_3BC8L0*q9Os5BL{Vv+P-)7W+Vf5D{NBCrZ${?x7l}f1Nlw}2mv7=1RfXxi*kr$ z#dS72Tdf<^m;KT3HL9IzGCAKqu;V;Ce&QZ#-B0}%{Mh{OqldZB^^>WN{N(DD3)=j! zc3_|3&)37FqtnRC7Q+Ylx*=E{)G{d>^eD&BLxh{?k5!UdwT@4oe@H@>y$YcQBh|KfkE`}bbh zu9erx6Rsi;3Oc!FB^#fu8PI#|>;D>Dr|RH3RYGsxRFT__edxYPZR1i{xg=#(Be}NM z8=TG&78KwSosC_v+t4?$=lGx+<$tPKf&Q9XY#2On?SS6qDBDA~U1zQP;_bhWz`-U@ z?%Jccz23mvHpdxnQa441q{mD3aaJoiCBNjFyhDIQLIZ`Pu_u*9kSZ4(UNO{y&uvT` z>^6ei%q_!zMnR>?t>~@2)LD@MK;|v5`-v?tsq2lo-+#@d%HHKlV1ZHPXiH2|!jjdN zJC270lRS+|mlUO@9D5edMLBXjje0|sj@5cA8O85MZ=^@LNgP5z2nYcokX8chpMpCA zo)*U>ZBFrx@A-4CFaB%a?m6Fo#WoqkU##D~L|(QD(-S$8UqzpS-5YBF%7jhQ=eGDZ z==$~Kr`aFD%);&)>>i>vB`?O9PTnwYFZ&btoJPID{%g$oTRWi7l#k!(QYa^mo)`-0 zS*jpAaiBm*&+={^anz|Iztt70$Zg{(8LT%{8WI!9DfuPW5A^1XMFuxk5UEN+TlOh zstg|m6W@D-3$dRw*N#VBHXYN31x~}Zz=Juy3)smW4~?^%HrY0M`T+3doD)QhU16&&Q21Wp+3;pu+CLa%PTyNAX&;RyvV|F)W2Z@nIh-XM46k(`oWa!uYL00-q`N{v|Al?8Sls}-{hyO(YmF^owmgKAX- zGPWA*31L1y#*`_~&Ge_vPSXiJQumzHoVA@{5|Sj5Vnyip;+v%dL^(Jpc= z_KjOm<$oa{1cX55BVg-Wqk;k#wQI@b$z@$TtYJ@+4z1ap{BG0Ah9mUmtNZoBP(a7W z)Ck?#;aiE>9ZNg4ONzW*>#GO%-EHK5&Yi`67Fbc()eCK~s&5Y?hE(+iJsMph-FJ_Y z`I(-Y+?N8QAxvUqm(s|905z6jH<9C^=nZm59?7Z7Z|An;-N>x#59l`vk*nA|jvZCz zHvcAR60dD@9B0?2gWf?Qi#zkW+UbbkzFEbq}-MgHv<7j|sD+sIkI%Banv_O0oQSN86{;g_F`gr%xC^qE0dudvm4 zm!i4Zkc(&Wc(d9Im1}uNZ*(o5mzfwmG8@tA4-Z9ekUR3IR7d;PkqaB<*8hEWUNwT_9^jW-%ycH7^6Kr=&OuKoPE%zu`p!MlnDoBPoMik)2W|+Fu(Qp z#`&)G2A5;mV2Q`+wX1uTDZ->g^aj`JwCNe1N^ca)gWkBhe;+&K;&S13P=+UCQ~Vq;{@_~3qe!zP274m9DN*XA_) zYRrFMX713i=j!OWJsO3PJNY04gn$qb0-1q;{&B{?V)rKtbjbV2obQ^XW2$r)NnhW! zXs-5ovgwZgKI7+MwqyRsSh!)t<63X93p`t;v;3C1lmn`k!+8aJk#nuR-kAR7|5yjg za+SHwzonN?8mzJP;QF)-o-a!7$Rjy5@_4r&*cPOHu51)2Tc~rb9wt{n(Svf8Qgn$qb0uP0N)*B3b;|Bu=2rMnc zGS7O4dw57hUC;{{0UN&78@}hxVpza{pawE57CMW2i=0s#B4>stUCgjXbqrjo>5aGz zLk6rLGGJlb7Ifl2m`sQYuC>=2V_$!zRW?)SLOECV?6RhRZ|1V9$RD2GAa~@EoRVMV zvBYliuaWDNKhPJ)s=j#t^eJ77D*tT9oqHoOVsJ0LVI+I^#Ic8$oT-zF z|1oqCOGJ(1uJs1mY05`$k9qB7TypIg^V_CjgU@Z+z_mJUtf}Dhv89W)j2OCe?5N2f zzCHRs|G-4API!2FLoNO-o|l{&$>2j8U#@AS7>T>+4P7D;{{AOcF2AsS>*97TnX}Qo zWC5JLGrgJVqlOQ$6tgJ@g@6zc0z%*+63D`O14Y4;er#j}6EpC;KJK+wQss=lvX1$) z|Jt}N*J{Ip?u%0$Pho-zA}t=1hTN+ zFn|w!rV7Iop!RtlVN)B*G%cP+ zT*oZm3IQP?1cbnYBal_~2Ki#M)IC!t5^$M?$JB9ez6wScRt3KOr9mxr9~)Y~25Wm+ zq;qb|Ce6o%-eCSf@3KXIu2-F@wzHdl$-C3gtjVlzK3~+f#lbl2V{y z!7v%_)2Dy&k;?veF0+4&3=5*?xBQOv$huY=dV_5Nu~)Fz#76RqkVA2FYDG3 z4`xULc3b1Y8OpBp#*jKy@r=#FSXQYlwz(qF1>;(8@Knw%=mb*<<)38Z_#t(xsm<5g zwmiCIp|etVJH3%g#_uG9*udgs%gQw0eg>&llu!*<#E4#0B8G3`ASUVSbT>Ja7Cfrx-Bmdcm zK5l6JnnubTR)C&Zxm15O?)85$yI@d_3a)J$Mm)v`yma<_st9KPxweI|9A_b|>;33i zY-?QZ`U5^97PM}T-kAK++ssX6!`!{oCUJ?*g}&C!^hUYj5ObYt7vJ928|+74=m|W~ zx;WYXE8MQ)N(H?EF55^}9&`vN7)r+eWce%vgn$qb0uPsf{&5byd82=ovUug1_rtgB zks1{oY)t1%d-8DP6%!uL<+h+c=#Jj+{JFjrOZI%KFnU8p9u%Y(eWX2R&cys46Bfqh zqyO^~J9CYAsey61z1~2I9GX9yHL#qC-e8*OPqiwUqoc^C&Z%)#iXT`(%V~65%*SA0 zg$atpLu{LW{h4j+ai4X5>n1K#UeImcImiq44UXdxoeN2cx{Z^Uj+`w`SN85kgltm7 zC=4AX?%#>it@Q@P$h6L&liWKVHu&G6Hwx#%QyHhm$En?IoW0aiWvlh#&h5*)b=o{) z=$QZhlQ|@8OiVQc(*udCO*(cJD}vJT(gR z9Xj%T)2FasJo~cM8{FTx)X*Dvn?xr}{q%i0bZ#`XK`q8a20v5Tm?~gg;_QR& zs+6}?+mwTm|7gTEcB^`KoACDkA#!l_;6iT@r{0alS>(oXElXI%`E$eCKR2j#Y}q1p zt=+^?x3h2D&&I5ddSk{^XxOVSgPY?ACGeE+*f(S9qP8vB4>u|}NS%{vjdhGj{uTm4 zKnMtd2T#EE;~W_jxZuYhnCj17?P~}0UfjO5Uafgow`V+k2{RM=_h!>KoQLC)>DGSq zH<;ANqy>(s$lJBPcKG03#mvcn&Yx}DkG|L9PHh*oX|b|*S0e@oy}@QEYX|jZPUe7W zPj@Wv7?L9{CTS^zaf!1JT5qty9NX3tSRT7>P(L8LmK-Pt5}XrpHc$CfYV zi0BOlzq(-GNW0#+Rf<@&sJ95(DA_;d78Chj2nYcokm(56^hRuW_|Ea8cTbtX0z=#* zO#AEue)a>eUG+J4)*Kb7(wx#WqwbxfLqj=@lehl%>mQ$eIIHQGTSpDwHEG=5X_K`Q zhztzeF?Q6RDHGYmWac-YPy6(PLks2xUcKUb{wzZ& zC_H2Aw~aw)n09(22NOi`voW_tQ<5?L%a5mi{LZXzKTo?SD4nASf4`|8zl+Pz8BIPR zo_Q^r{{HV5v3M|}}#(uGBWeqFK-+_#)t-PIeB*os0EHN zZExl`pD|W4;-!Yn0KpXl-mO#2&Z)I4JLJobp&pH;?Q&=9Q$elJWO@J= z4`+GlFAjVVBGxmwG z|IGXr{#@I?7v=?aBq7)QsSDTsH1#=N)d4k8!#4WE>|(V(rCf1JoZ~u!j+Z2>HaZ@o zTy#{1KXYc!a)LQVCCORPX-i%=?q^uXNRNCF0zyCt2!RJmz!DcrKXQ8A>Xs%`hrExD z{=a{&A2M)$>*gUhZ@RwkjT1+i@3H>pf$VC^2Iy@bH+h{rVRT9QTD9SrhI zI;lF@ds=?0cS1R{ac#TYCM{t4S1s#IZzzA}O+I#=5#!tVm>7nu*8S8Uy#Z(TtHoTy zw+~ux7zuFpVe_ydh#%JW`dv8Z>>T6x9eSf|F>|EN2xfeJHy`ZvhVo~=I2C{9M%>Bk z23n49we`a|O+E+#As_^VK&B!!!VoVL7sN9Jbe3-#(q`=5Osx!0)^Z1}$Zr+!Q&WzOf)uI<%0i_6G2{W`=Jd8f4l z`!J7U-M~K4p&_KxK5{#~kpu7IIJLm@B+F(4uUuAVrhPMayYkR_=IVic!y4C{_}=Rn z9I!>8VUpW7@E6*%R3W^Az-P}Cr=T>wJyRwyZpGAG*ski+9TWh$cIW_iMnW0)Pj~wU z5RNTdjIh}^ZBp`b)I~7ullSrEjz=5B&Mr z>O6*bEs`4t6b^y4obB^u8~O5cOs<&U`g{MsE~POq=eKNL@MH7!g9qRo19OMd$a7`G zDd>iu2hIQS2X^Ul7P;0NOot#neJhq?{>i3ahpy<^HM#6@7DMvmx<6&Ohk*~a2AlHn zyY#Af(!Q{5Gbi7%9=1vuykhdL4GuFN9Vy*DQY3e${Ezjo^c2%s@v?qm)r#cz)kl7P zz8)UZet-2v{Lr?>N6jQ*J>avLZNzXpQ*q{J=gb=n4ma=A@I+oWZp#^Odu^8@Esu zFKuBM#9M;6YX{?(@#F4!-FNf%Bd&-2J{uQaB|pYhda>_X0HKI1aU zXRhiVcGtu)j7@aN^XS;uUt#$zvpzz-?%f-M)*B2A{qg0;q?4&B?Q=guS9@mt8VbwM z8%!pl_k<5aEe>!}__JspPR0VGlK1uJtl}g`0MYlduLJCW*7^|>D|tES45t10_MZ(J zjEfNtFPNjh9r@3O?Q)qYvJ?_#D^|=4lm&r)-`P3%Z6nUj!;GfYzr^8)s(5Lu8}?-6vk(vhLO=*)DgwHL3-k54cIcqjsgvh6 zZ#=PL>B-eAPOe(+7*?-1v0}-E?OVJ~pXB7Uct6mQ}TU6sGp!)S8ueUpFRrTsyd*Tbx?G@-85(S`LKMYgZXFaFVJ7UgQ@q zApSH(Wvh5;sT+4oPtF$tLO=)z0U;m+gn$qb0zyCt2!Sj{fTvELKr!_*cEF52S0U*% zi+)f|3x|7%JVncf{k>FDbvkY7NuS-xZ$q%?$dl*M6&WYoY*fLe3=t{5jEtoCZCVZ* zG>imOn)i^@6fYriore2~(;*kCN;tvg^!TlcmulT`xR?AX1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5Xc$?EQyH@A#3DIav=nSfDjM@LO=*SbOKhJ%;3F6XyQKu5?>Egfe-v?eD%;1DG3k) zLO=)z0U;m+vIc=BA&Is96Q2)Ife-vCFCicVgn$qb0zyCt+$RCd7rX)!60cYi|F$H4 z7Mxh$Kk=mi75KoP9ONrb;H6JipX4P3gn$qb0zyCt2!XT_KtIITMpF8OC06uJY-F=+ zybzFR1gsn!0ILKF=z-gS!CA`GSaaXkE zWFa5~gn$qb0v<>JwGeGhjJGCEk4!9j(^}KpTHi16#gxQ`wsPpjOyZS)%2GJ5Zx8O$Hj+@F$2nYcoAOwVf5XkZb7}tnRP|h*hc_&o7 zU}~3B0FuE= ztQ?+PAtmoZKnMr{A&~V5(6dJ;sLfkP`CAK|vQ#~1sdLfN@Gnb)jM5wGMt`ZBa%&Pm zGSp78GO&{Ms+#0T2nYcoAOwU!V&dFjYlX9x7n!zkNr{b&)Enwvm(;CE0LhTj5CTF# z2nYcoAOx}u0o||vZB88LpD;5pq1BCq>gOyCFRGcM8Lv0g^wf(M5*NDN6L zVI)shtaxDMlq?GYAs_^VK-MF0Jlb06bo`6w;v1eT2;=Fl4|8E4~35(y)DB$A|3G$KAc zq<%^^g@6zc0zx2b5Wvp`;qO@MQw*aVkFR=CiH&D7lipB?Ija&z@<=2})oIQe{3RDc zKnMr{As_@ihd^Mw^_f%g4Nu3{KcmD(X44xgJ!e$%NF+)1oN|$z3IQP?1cZPPaCZW9 z+k`JK#=mhk{>^jobx+0DBb?5pdV_?KJQ7J#NifOQ>38>1kn{@yAs_^VfDrHm0*z0` zRX7q?{dk-b8<}2jkV2A5f=RX~l#b+42nYcoAOwVfTN8*%NDQ+ihFcO}J{?!B{do^UeK`tez1->B!#dV|E11u{Z*$P`(le8tM)$(3C4E(C;t5D)?n zmjH7dnCHNXj(%4y`S!$CI%uwWIIhl-xMz;Iv3)}&{zx1dAvtdT*oDHA##Ze^3Z z3jrY@1cZPP`2B{Z%>LL0N6cDmxVzral7sA!DY7QzD+Gjq5D)@FKnOe(0{UV9YK-*{ zZ_6UTgzwJBS2!43=dhWcS_fnLrQ6LHy`6=_W->+A$RODyv!E6$$3v-aa#JB71cZPP z@IV6eyV15`lm)&CIkv@=*%Mp&fVs{gbL~S}N^g)IGDX(NAlW3d46KlGnakmUbzZV8 z1cZPP5CRX8z>biFr}o4){L@_LPbD@UxZVg%d_jkR#24(s^ZtpAeXWG&ysgi9snF;~ zLZiP`Xm~X#H2BM+!lk6$Y1yw$`&ZZgMKQt{1{uS?p>ssm$RODyvkwuq+*$|-0U;m+ zgn;J|u-cyOea+S`7vlR~ivRj_T;+Y{XAYQaXNcZ--pAV5TLpWu!RH66H^>?pB%5TG zER%7vPl;<3o>TOaQz0M(gn$qb0vSdC|5p}k;^|0h{;e@j?TC4LcPxEzt&Gwejc+78 z_qPfetT)IY*(9@MnT(TtAb>(%LO=)z0U;m+gusI%a5L6gad&LJeX-B%kEJipIK6Q* z;W;G7jfA986~TmG&>H{&3vi^82mv7=1cZPP5CZo=KtHPc##+yYCtQlOzIiaV z{MMM7J2I)>sDIJ&oL7SK@pUu({e8L68vp?da6kkoaDiH^9QRP)&M1TSp4$nacKzRuPAs_^VfDjM@X(Z71Y}}LUqo3IpQ=O2x^#)GJYafbJ11q+P z9F1XAO0M9MhDY5uBXF( zZE4XPAOaM)fCf4Mf)SV^Ih<8CIW7c*fDjM@LSVVKrTChtdRwBk*l;7gQR|>tNsc|{ z23KqoIlQd*zdvjm^@f%lKm#2Br4|VRAs_^VfDjM@4g~c4#=oPjy-%5ko{RhH&)Bl- zqN{I=uErWzx3X_2y|LF^bDz2P5p$hmafAk!6Bt{;6X`wgN1t}R0WP3{4uD_;CP+ao z(?=cZoBSyRgn$qb0-i~LeLz@Pu_rL$(M6HPRz{Ux9bJ7>bXE7&8~e?8#;CR>n$X~q zZAj&E2I&o;fewIR1SUuUE8DDiX0wu93jrY@1cX3}1kOiTORb8kO^>-ji4C{b8`XEk zRNtXO!>g=~wKlqzae6~Zjt$XZ1SUvRL@ft}fDjM@LO=+34guX4hR0by-xo`GXIE_b zwb519MORtx{(56)(gNP|saGOCJg0FqHM&6_*F;xZ8O;a?Gf35t$^#xx(aKHT z)W#Obpa!@BU+SR{5CTF#2nYcWA@JhH=n{*g$}Nw|`g&tsbj9US6_!L{=um58ZL>HY z====_y#ZuU1KdNZmSj^12mv7=1cX3fto3@N^=6dyC7eYpi>kcRGxWxas0z!Xn8@+$ zSxenh@z0)lu=7P7^ahYY4REjnpCXWYCfE5@B8Ycl>rA%Lm(HN-T`5YYeue_zh@hQhuy ziXxyOC=LpRqM?99a(Gm$l*|eNAs_^@Fo9_o;|tD-sIfe6}7g=UjMCm`m zYaNJFD`d}E>YPYV|DrDRhLRjhq9_Q8gF?x|RZg-d1cZPP5CWb+Krex~5^f!Q%sl3F z+~+%DO3aU_v?P*cp`tg+&5bNGGvcY~;gwcISKSbUFHn4#Ysrx={>)wL4T^w*pg1TL ziiQHBn5dJw$ULEPN*;xP5D)@FAZrky=VJLod_v;t>lV|b@PacVO3aI>xFoXtV$mCF zJVoh^84=3FF)^&<*w81(hSuC~u8WD|Xwv2>sE+&DKP6SYK|xR)6beN{0Z~j87DXnK zBWpB3$%POQ0z$yk2>cn4P36li!8q&viu^^ z8%h2*?$8@k!%I&JD?K?3ryS+xMm)VRGD&Y7e&F^EB{?XR1(6gG#YACIWE33LPo|H$ zbsLn#3jrY@1U!L&-W%mwL_)4<;f1D$7o8POkH$m2=ncc)SBiS0#Hf&BBSRQl$zZ*q zie^D1#YACIWE32NL;QewLQ|DI3IQP?1hN1DzvzUg=0sGS7g2tGgc?B*yL zQH_@>FPaPx;M+>{2Fp*BNAX+!%v07I%o-hI3u8k|j0!C?Bb>RTwf{5|Y8_Ca=DygP zdsV2hI~Mn(1a_NMVOtE_z^Sk~rs~FM0^8B1WxlAr-k_K$EQ*YRqxdL9qd>E2jg@=} z0U;m+gn(NUs4*|H(6oq>Gi+i*^u`9&``?A$7#&)4SV)nj|@aKXMoxCLVdX{~)3F`lA^RBja?MM;5DtQ0Oq zEHg;ms8vc*g@6zc0$G^AC+njMOcK3euDREY=dS8IZ8IzG&Awr;H~IvXogGp4RQxlC z<7ypv;PW>e^ace=v1Z{)D_Ii)LO=)zfy_@p+u5&$C+xgwIp}No?~2GGQ^LxLeItGK zM*pBvlftWRj;XvRy84b7J!SO4%@?)T8x$o4O0iP76fp%&os_|q%-=92g+f3G2!X6b z0PDKm^|jNk7}N030u#bYP7NkU={kSI&>MY%^7jlZIW7z@8TjSE z)rK~4q`Uu($Gr+n1ZIbDRhdSYAjZcEYOxE3qn8$2!TvXfZ_Y-_(bgLGtZb! zLqc+o4lQgG8>Od;-iTwvwFjj)dIw?R$lEC(cN_m)E&VF3jIOcUTzz}``};~!Z>YkZ z7EVD^+!Q)RPX(YF$Xt$0+fF56LO=)zfhAMu%3K7FLGs#%w|C8xK}*^bN}2 zBQSrrfP5YOnLf%2+1dw?9O>*|)S2E;l4EK(#Z948^jW4FOGbo%5D)@FAhQwB8-{vC zBz(6as_mBOcb7*N9v}A9J~E`*))*G8 zq@zD`7kYz&rno6|ik=EUHJ~z3OJyh7%+^#TJwiYT2m!Yy5O4GNbi&_a`XwaSZ=v}| zhtm77xtQpUdS^3MZ*&dF)ygktbH7}z{n#)?nK-tl+x{u8^#;XFp;Po!0IC6%fms|> z40#CwAs_^VfDlMu0@uP43XKUZN53;si4D;k^-jlUyxz#u-ak(}|Gb_2YwWOX-?l3@ zz4mKMRc|QCF)@q^KsBH;q;Kt#*o1%(5CTHL!wJO1TVGok@z1#tFU$@vF)pm+_^^@_ zL~mH?U$Q(Lz0uA;cU%A5?fmm~3&_(cpzxsJ8rx&Bb=?2{uxZg76g?GyYCvV6N>DMV z9vO@@2nYcokS+vbEmpQl&od&V(5R47hz-#je_0y*^|19uTmQ$K`DXvxCvT^~ znmdzB9QU~&ecJT~)qu)Cm7ro!J<_F`NhCr*2nYco;IRaFbd8E**VlxK6T?c32`xP? zREZ7I8<|6Id+t2C4)VgX%#g5i5ts{z^#3g@6zc z0{2XSMF;p;U^d`u^COD=7W(wKP#$Ad7%O@s;kg?L7&kJ5eIw@&euT$=@XPU?-=kmn z79JQ>V@FJtb#%Ij39v?jXJY8CKJszZgPQ7SBnD!({Vg+-CLNhjb*4C6-H?HlL~ zDub>SR1Yc%RfP&ewUHGo_uTH}LLndogn-8q_}83>+`~djj1s+(_(DKp1uI8J>J6#~m4vF|vCTv>E(C;t5D)@)OF)mr-v~=M;$u1O zZ+U)3c!A*|C4U#ak-7E8H@=U4?t??H3QHr)&5o$JJgUlujI(c0J*Xs96)FtXhRQ>& zlPMi{+w|moAs_^Vfaegv9?q_>cvNV*D$>+1DF3iv?Bq|53KjbX#*IvE-}uV+F(o;C zvwi4odc&*eu#l=-Vk)l6pz#z{Jw~Y^6)FtXhRQ<~q9Re9A-w7^)4G$3@kW zuY`aQ5CTHLlL_cY(F=i=sYlHVPn+MGACYHh@RPrZ-mo_IwLb5!j2mvDHy-`e2NMUI z*Rz>y@!_G&2(7&KfzKB;^ad4%YD49r3Q>`$PP8epa(MC&i{xDh2mv8rPk;plk#UJ} zmc)_!V@zEFa|{a3|BDhE?9g$$E0OgnnR&jbZ9E10#v`BjJfch-UZ&S>nqIz9YI1m$ zO)-^LJ=parMkS%bP;IC@R3R!7)rm?))sht}_RUQ`3jrY@1cbnX)8~G>1cZPP zfPl7jUkyq4aZOau%~5a93(q?wq{Q$Lz5S@@4R_TWA9uB<{ExXX+C0SpT40gM#QOiv22j!}^?;^*L{4 z+;DIE#zWE@R3R!7)rm?))uMt?&8Teh5&}X%2nYdBCV<<7Ck6(U86I4M1+c%0-bhel z!+rGz^Eck}GQH_#`u9yWeC7}HxgvMB3 zpAr7rjPRGHgcTeTTx@7?(O*PwBs9WZpPCw8VR@8xY5qX{ zncL47RnvZM=?zt#h6Yo$s9;nxDjQXfMkj7LJocAIGA;y!fM*g2jIuu7Hz-G+pj-oj zl-Llx@pnQag1hUDcf5;_3ahavR;^62Erxy2`=_|j8&oQ)78Q(YMrEVQd1hOaTnhmq zAOt*<0Q-kCQ`A4wS{$>+;NW6E+r)!S%7ydS-m9BQ)Yo%2Q2q@bb7fR!^NILaHJalAUC!oK#VH2>~G>1cX4AA@KEr@N8WJiw_La zKl`FL5F2i-H*z%fee_G8JRJgR?1-(lDW=+H_s|B^ zW8(#X%i`nawP(%$niQI&M_`fuqBkt{FIXB}Qewl6^+r4YLW6<|4hX{EMfL5mhz&Q= z8&pE7A{CNqN#&%9(oV(7;mJQ%l6N5>1l*SZzuu8%wd-rI^--o~e%U$)>H{Q_79>$QZ1>RR8h5)tXU+7 z`~KcY%7uUs5CVzg_QpKgF`y*FDE*Y!5WRueaBIDhtEFGg@BN-=eidv|ak5zoq-C$e%Vvy)h*$XV<_&eS+}MAbO+z zc_lX7Rc~|&z^qYnOlavT;iad9Ro@m91uc@8?V_gCZ_6aJ`Tl7Z!vuESoSa0+Q%-<~_ zZ%6;Cn`53i5?A|xS&0od*Bh!@_6eejQc*x(tMSBKPU8%HGT`Dlun98iHwC6No$*B+!0z$wo2r%l+ zZ}jD$1XD|YQ=5QCJ1DV1KP7sj-l_O{Zml=^2IcD(SYcUIofC1j51QHg6|s@U^oFXa zJp-wlDmK-dN={X$ z!pjWOhw^J9Hx&XxKnOtKjj^Go7XJC!XkPTjAu~!t2lusa6d4*^cu-KO388h4#UVC4 zTyIdZsoqp_Y3xEk2nYcokii7BQ-VwWmW`*)J1&|V{SxwMEB}0=H!uabzuqW0HWWV_ zr6+|wJwM`^qoOwgsMu6*Dmhi13Qx7Cx#=d5!R=0NCj^9m5b!7h*pnk;)vm8U%ndhv z>}_i9o3l*-Hs?I;#lGR@dShH@2{uNV99H*aJfY6f@#86~Vs{9jl2g^G@Kk%X zlWeREta#MVo@7=C2!V%5p#Pf4N1OT<>8xgM@S7}pL-)?^JDyVfH#I@@$uXhN9F9}r zkZtmY=nY-BI|NYGsqj?$huP}n-a#0`qFx;p^4Jf4`P%zy zu_1cH-StNKC6N`DM^#!Gl_Z%Ci{4NsJEMA2)v54Qdn!LofQCS$m+7M(@XIGz6aqpZ zLkTco9c@;_D3f0V1cZRc5LkOE_OWk#i+1qO z%T}SbVEiD9-f%~~!PL-_<3gVt8(MR}x$cR$I!BY%*PuE?Z`j*6bZw{FQ~7BEGz5=n z^pa5_AOwU!Mi9`CZ`Xq?{~H(DWNPR?ehGdY%f^rXx!Z`|Q2xEOZwj?;)a}-%%#3(y zdU%y}F}9shVzFPa%9Ahk=#QF z2!Sk3AU;72QXjb^47p#!~MD3t*Fcu#0`ewS7a^e;NYKfkvS{a@>CtlNf}6 z5D)^MNkHxTnwS_9XKgSrs79~Asyzd-A?Ix2_e4w48@8QNZ9A8_rQTQ=S$1AT)h#h~ zPsFqCm3O^^t>_K*qu2YxrbTbi5NHlG3YrEDgl0lx(XGZae=#K2LO=)zf%_p47jJ$1 zdp}bXU(>g~{JM(XV5)-(?9A@IdSgLk**Ou_cg8mS%ToVbe7!TGH-ZZE3PNn$gWjM; z&@^ZuG!q)j{j@c?RtN|IA>f$=B4Vv!(N@2(gn~c%=V<1a%VyjVz2WwHV|i5hB~j%T zM4~quT(CTg*f=eEB~ZU#py@N89N&rFh@p?JzAdKub`{)LZy+|xFOI6ZIi|to zg!&gmZv++W7gVrskP;i|q&H|RG#MI>$Np$Y#)W_o5CUl-pdAQY@we>15O?@WT=nh& zk2LYg*-Z3Cme3pPqpNO=uChKFy`=0LqBjs5>8&?tEHoJ!4$X%~L{p;OiC>Pi{P@T@ zLO=+34gqYxQL$G1GyiXNi0L&i)2BX@u1AOzA*pw;xSM?dt=i&^7a(Hqg# zHY?+XTkDO=YojWyj>5Rn;4e#qODc%oC^Rrw88_0~zLBKQzxAd0(1>VCX>WIOrVtPU zLLkc%&<|gyZ^VyZ7d35r)Qbax9{I#ai4D;k8?%DmsI||`#wfU3Z*bY7C5PyZ2dXz{ zI5Zy`5lx8(MYE!D@iQV;jx7IMDj5_4Lcj$92A3llMv1o$Ss7`1>4xb&FDAUP7u917 zrik8fYrU~6ruq&Q8eX+Fx@m26-KxZf&BP&k<3Z~Unh%YLrlcCwOE+j-G%*^Q%;j+L zTO?lz0U_Wa1ZMA!dF)-U{H#Xdr_vTgZ!iYozT+v?wlfSAO<;Ct!>b7mFDHoJC^9%0 zrJ=)v8&9F(=oUm%qCwHDXj~rhGa}g(0zyCtBqyM)yO(_8zZ)IWa%$L%{evF)*gHoP zpU1uuy`k1|AU51pZ|pPI*lT9kXO`4T@$(X8~{&OTpgn$sp!USS%PQA9Aj5Yo9hUslD(+A$!oA_k^QuIc2<#leZH};!r>`}8d z8v7(X=anQjFmZ@|Bjfc34T@$(<5ErRpEqc3xB{c;$x8?b0U_XN1dd;gd+a^0JYV_b z;D^x`#J=I)dgFi+8`XE2>tD1ycO#+EbK*)v*+R) zUQ1}e7|Qj8Mt`fICU4k+*f$=Q-cXI}Ganin&5cG!)1v|M6C~3|J@$84GA;x>hd^LN zg6SPE(_3Dq_r3Trd{p$t>gY-Ych?(-;_ClpdEU?3*vHxki#zo>F?_`2efEf8KS}nHJFl_^#%=)W=LbCNzyQBo-|Y4RI|)4k7Ps$2mwzc zzz&tX{?k85xhuE%*~s>xH$m(hZml<1>q=;RGvS56M8fj{i5NG;zTqxszZ@^! zpn1|rbyM}UA1KMM5D)@chJgMNdv{3iBmcdb<9|wNh~B8ML>V{SRd3u(c#dG`jex`# z0urD17rhZ$VwBt1H;iUTlcZtNJo&*9y^&>pbtNN0z%vQxAF;Ow2b=zLGdosX(Hn~+ z-B)is#}e0T%8QrijgsTTo*WzcxtOq2V)-n*gG3*@x-5bX7w-H*xSlBuh=x|ow*fG zi{5a1y+Na+>CpgbhBU@3_VXgy5duO$2sjWhTdbltGP!+&ZP)5wwA4BnSNl+0-4n{V zQBU;7q%5L0Xn+n)QvMVILO=*)F#=d_*&oU`G=b+V6O-0Hmi^i?>HaB7Z(On+uwt8;y>pM+2l8$}mb6`*oG<2mv9GoB%W7y@C>aLK0RUih1N+ zubf}{WdFh^JMUlmJoc6EV_&O~<6GYxO;vdOdp{ML`{it*!V@k1a<%p+(7<3FiVO}`VMuV%p|=!Qy9RiVru;bo?)P?4&~-Xs4y?$=>?I5@{1zN zFIFKl`}@LoX#Kw|HTRoq9W>WIWPavo+%tzoZ`g|1ZS@9?izY@xqq))OXnL{~CHaq% z91#LSAZruYcfqWtuJPFQiRg{!N^7DkuT!DQ`sk_~Rj9T(rrH)2s&9*_zFmbHyJA(? z9b0p+E$oY}b-+xh{il)#N+BFk770R~<4K_&b1(>}#Y4 z*wpnoFQqqX>^9fjt0af$4P>O&lmFk|S-?kiY=1m`^+GA`R@@z0Do@(J{wuGq^4eE> zbvNAI-QBG~ad&qur9h#yxI-XDY$dz-e`jy9gpH7dBqZ?L&oo_j@0~mIopX22J#*%q ztZU!k<}$a~3un3AZtvd{^-cstKm_6wz?SQFNAEo1DEi68(hdCcd~xZX_b%Kk`^GKR zH%RkZ?PsvdG#xY~xsC&d^tSFQXk*uf4zG1D7WnKFQw-PrLw-q<@+rO^Lyru-<#+BuyTAX|BVb?PcbRj&X@?I){;%7jnX%a2Ts=3 zH$J||tz>SfXU=eQaf@-I=_LXpAOd$X0jJCKe$gJ=|8>0bYQMk|4gGO%yYFN9i)Nhv z2Cf~1^I{W<^bP!bz3#qQSKr|F;U?l%;)de3;^yKOvu?CI`KLyG7Xc9vfw%;|n-p^I zTjwA7^5XrT%_-WSl8*kOo=mU!i&j_}S$1)FxuxOKH*N!cgByq2hnt97Dej%6_aYzy zA|L_~V1r(`-FULSHZaid*|S6m_{)bE@Bd8uVbgJc3f`e+CFPW>;@Ze^%OlFKjF7&O z)%6W-8EzaC+2+}^+)CU~+*aECs^3@<5CIX0OMn1GyyotTY%}d@r+J}88~We^xCEZ;8gS2t7asmf`bIj$-#AS04Hs(0qcg)w%?T^N)I|J{zJaolrS%PN7H%1C zoVfRq-iv?;h=2$rNPx$&2)o-6<$kn@zuzn8{N6r)-{*=inwIgt>i!v3@0jbclWw-Y zmYx@0W?^`FPlPe)8(CW4;5OlA;g;dX;r8Jsl4T>oUl@HT0wN#+UIK(9;J~_&o4coc;+`BU-Y1pu%ZMbEr&q^AJIh-WjxtwrEd^zp0M*-RNvs%;0EC~ z;b!5M;l|K}FVQq-~o_P>03F&oKYl^-^x`P%k7YafiNy3JlpkIoD?e`iSF@TBXV zWl&^A`vx}xw*xl?w+1%|w~5wJZuonm14KXsMBs)54quG&`{3ezUtYTJE9Ik4aemm^ zzeiQsVlOiGYO#r-C8vgA+>pLeYIfGvH@FeF9k?mDHEwwO=l~HA0TB>^8xp`iOu(Yw z&N*{`=U=qh<-CpjANAlmh*O3Jfr%;Gkfu6dD?A%CO+VBSK6W z8B%1lDWoa4@|Ba=%Zh;Q4d7t;A7ZGto}f$3@=S2E!%EKy$9KZGPk7ul`CE2zgemEf zkAAPC#xD+Hl~>+qFG>q1;}t1=Bb*_~()tFs05<}+12+Y?1~-V7QEvE4q60)g1VkX2 z1V}i=@9MOjk#~Q5F?S>X>>g!9`Ud+=DAjh^tL-+W`W}Z>jGD2}!B<8p8WU1%+|}ab zAe$t8!=vnFS$zYsNBFq~xDmJ=l!YyszaBbF1Vlgtl25>Tf}6Z8((kPce_;>cH~!fh z%D!PsOy8)v-%;z3v)a$nH;nDbYf7>#OIg&ufxsj72tT&~Hv;#L%o@r60nw2nAOa$g zOaj(V>#BqH`dtE^9~e}+-IWKvGb)GHQxddqn4K(}Z57r=%D!=X=o^SS0*}}u{M-WE z2;4Z*H+-g>{ETq=tL0^0TB>^CVkv*rO)Fl!XV!F71B^o^`;-$1+(azq`0N9+-PZUOCnP5zIDjuZhA5P{SY zux!Zlf3Z`0 zzJ&(IY~Yo?k)`zw1RL>2$ZzHz(YYcZ0wN#+sV2Z9Ubx958(pVokl*_k{l2)At;wAl ze`CA7x@Y%m?L*FD<3orgLgbJ_7&kltL!@tHU3~+QMz9fYgd9;v;APoJ^)H4_6af(s zfm9Q)matbHvQOF`IenL{P@5|cHNKpq*&Sxz*lx!=l>MIQ6(nLSI50SW9}}`n`bN2B zCWIQwMpo1}5MzWHkw&l)Z-kuNL_Qm-{;kl7A|L`HkcI@xbPC`nI%o4cOyAgMj2p$q zUwx$26+)-x?PZh==^H2;Sz6yfj1gu;It_0SRV4xhc3bt`CR}-mA483@L16aY(l;V-n$7C^24ajbBhm;q;;m(roB4^*xgsC} zB9OKO4xW$NchLi8I-46V4kkhHzF#m%-Z?} zqKg0{#t1VaowoOgY7+qw5CIWLD*~57-S?2et=X0AEpGFCZNw@k2ORrx9%*wWSEs-{ z-KB3tqHJVoeFLFIbP-_0IIZpo)guBTAOa$gwgj*_lfmjlfGcOqD+SsH^v?YKK ze@LX8or4Px*za!SpRe7OT%Kg~w@E(w4Yn#B?pR+O~;Sx{{vAOa$g9t12)^s+;CzppPn*!*&~Rsp%%n@KrWhX9-^ zDY?4@S|xAyKvQtD?ByxF1Fg*+1^NdO!h%w8P_R`@EDKLKi^3y9Oc@zMz;KfaZS2*e z<4h?&;cD@Trj(cxYL$}HNd6vLa(d{aGr}mWeUzGQ3du>WEFRvZrPiKJHg8&9j<`Eo z>jFHmn`v}SWTkbHmDZb5WvjjFPDlCWkq^G$%lU30|9zJF4~!e0pe5*`7fUw=pV5me)7dMWUIMTN;7(@^BOX z9L+r@4%s)dvc7>>BAkdQf{M5zw1}=Hz-fM8s6r7C0TB>^bR{robL2fuE*I(?klSP2 z$cpxjifbb)u8XX&D)ONpE3ffTWo~dsIu9Xy@`Le2L9PuOp(5^ z$!4uFWzqE%L=k~RED=sb6hTE?wUUy4KM1N>1Vlgt(vN@@C28>?`};p${dQhh<$gig zaINf=#r!uat&J=>HMH1-s{|26)5!LNfA)sbH*A%&vc6%IjdlSDBw~qhBBI;{3hI@9 zKLx5;1VlgtGLpb&vqJA}b)|5(fIL~mUz7!u3M=u4v}J2}`R?~G-23rGj2p(jA$@}# z!C6+{K>QFwL=l0^Ncq>bL_h>YKm^j20G8@-hY1S(!nhE>Z~gsnvm{!DN9D-W`%_j# zRNi2#N*vLh_D5O=-2cVJ2fw`}eWS`&TjkA0*~p^$27-t9A%ut`0%@|odRG0?^%hX& zA|L`HAOaaf0F{H+^27GQnFTdB$|K*(v_j!~J=^H2;Sz6yfFC(R0*Af8{5CIX$U;_B#*_~!# z<^bM$deXV_PY3!2b9&~9FG`5f3Tq+>Ui#qI{tq{~%o@r) zA6~roL+KlKlEqZnW{ewI)V^WFta~6Lhu|T887%O+oCt`32#CNfBw%w!lT$S}Y1}hS zJahDoit8iu^$qrW@!VbiIe+(i7uk~{eFJ49OY0j5m=Uw?fry-5A|L`HAOd#|fhe~z zWnT(&=VLvkTVTFSrEjc@%-=s4w~f2syKv9{q;J@(?J~+nmew~AFe7H&0}(j{5AoAW z1VlgtMBvULKnhO(aCbnsd*xBb1Dyj3_YKT{tMauiiYUJ_l89b+zhTsjyWhEhkLX|C zmcC)HwmS>!8;BD^g=isQh#A7Btgm;@&x?900wN#+@d@la>+~aSeUE@#Jp&8$4I)Ks zM(2n1=o_S(^?TtQmJL=?{_?K$4Tn)SvaG&=AR$f&6{3ZJ#g{sLA_5{H0wQqd5WupH zZTpw=&a#7o9vdB8Zb(p`K0(YBw?^L>ch&EubAE4}zw1ru8;8lh$$mO zii|b|qeRhhrWBuWwfIC+N=ym0O37)Vrc4hdeLSVqtguqEO({Jmy!2dC$}ET}Wi9*0 zxT|;l>m16)U2jR>$in&t!h;AQNQhI?@}_S^Km<)`#qj^lKTAt$Sdu zK0yTs8kHj>^^GE9uKGQD)|fb6JNK9Ow4RbB?Hh;vTnbuprE@ z&6WEIn=l~QQaRGsf5W415bUeWBBOHT?G@zr{5ii@&)@y-#d|+dyss<}e*+;wR1g@% z2H`=3l=W3VDIy>OA|L`u5Qxbnd(_coQ{=!MkyXcB&C@@q&|r_VX!`k!#_AiSX)C`f z0(VowL*YG=t-1|q zaYktF{z1j9%_$k6Z+J4pR$Lufd1GYtT{g510&yr`TPBY$ig+L-h>DN!=$|4W0wN#+ zB9Jrzf=)+}N!Arzi+iu`HszN9(AxUis*=K)f#m1Mxse z5ETRlu~F97q;D>LD*_@Q0wNHXfR*E7$64o!V~%A<9VJGD6c`d*IAipU?xj zueXVhN+~oXCSXX>F(E}qhZG}1$du6HlL!eC_UJ4V52Wl}%yd(@Q2&$uY{&$^zx98Gz`Kf3-! zH|6p3?#IuW^4J;IW2a52cOs@(C)Pa@Rp$>+IUH5{kds2SwGNn4<5!1Oi1cNZOdekp zVL&7h48#K=K~#_*rACQ+6Y0GOh=2%)KuQUe9%b~6A{nM{tTZY|<@L5In{3s#*&k_n z<-X6PZ)C1~^aukYfncOmmUO%bh=2%)fC%^yAb0|M4MOeiV#7mn4GhkYi6cGYi~6jm zVBbLBSQ$}qRb+)#*c@yRH@m_{mHWSxeZ#06l{eceZ!#suAhRyA;u=p`9cgjHT*I;y zg)Kj9G^Th%xmuB33Gr&hdc}fdMSmp>tQ8N|8y?n*7K?q!iXTfLSu3I}p=B)@Ko}4S z1OxFvNEBzo=ibpjML+~ZKm<}s03-RCt1ilh)6Sejf{PK%JZYKm<}sfK3PF z!Z;idReDTFjY(I_kH1=IRNCchyOF+8X`N9vST%U0)#V(`Jw^Vaw_-hoL1*X@0K@=c zKqRyqC8f8Lju!zD5CIWL4gqU^nRmqT;NalWmO#sh8UOydn`1J|OGdwu| zsH?@s-*i6ul{EP4-Y9j>1v6L(KkH%Kr3&tRoi8+vCmOv zet3>nS8{a<$lXQpz9NYOpXU2v8CC|DA!eY{R&rFE2#A0Ph=2&(kN}Q?M6SlD-gslA zU!P#+qeA1ZmY8Tv9O-M{u=EWAP;53T2bPm;jV?dj@=C4_fq8l;zGxcj8w@DJ%HT4@ z3^c>dpfmJ(iGT=*fCz{{h7qvhJFPhBY`!_N+fG}(nV|*88*M4 zR0Jw7FfiDdIJzmGxmk)zlXzbYB?HQ^GPn#e1C3}Ys8@#FU%HS8h=2%)K!OB5SQVac zTu8Yo8KrM*wHcLTr>({>j#>wuC8mYt>KKr>r}T|9(>EAO29#km6I{)%G}wj=!3trP-^Jx2N*8 zrGb5eL1ZWyP=?iHeT|Z3BO~uBT}uQ+KmYAYlS5tgwH9Qhr)!&T&@@Ow3SyquNe;)tz>HImjlKw_8BI-hqXN z1Q!|_TxeKu(J>)KN1HgPxRn;4M61Fc^&~|tJuke>!f;}MlwW2RAc*Nfd=FDLMpoHw zCyFT*R{zCO{bxtb{mxp4oV9*));SVY_oyk4pK(#@pLIQXIhyi>e{}teZp!25-H)F$ z<*_ra$4;A4??gyIGU<_pfEQ$rt}7McO;Da^%8%4TZ* z*-!xOvJ8(J-ieDn+!L&m@{d<^2PmLpwX1VlgtL_h>?OyF{) zD?j#xsiDQErD=T8g#0(I=^ML^iKE7^##UhTjlssmA^Qg5TW_duFiZ>Ym@94Kncqm?VEMx;MaPB|8XjDD zr1Xu58|oVj5W~b^F=PxJ!>4fNxB52H^+iAgL_h?RMSvX*Y@)QgqF0=a$~`5t{H(Cj zX_7zXhWbXV^8>CISUIZfuouC9W32o)jHe34XFY{MVQ3g2hKa#q$g~wDS@NxeL_h>Y zKm;-k0c+-3bvEkmaaRjZ3oSMytn_S?vhAkwwIy5MsIk{k^MC`N&%z@@iWn=0{6&5B z4Tgh3VQ3g2h6%xuvXN=-9yLS+L_h>YAh`srtqnW>CUO!@;01Gz<{K#JFlVN^*r;$BBRlh=2%WRsy3BJ9148 ztvo-h%+2JZPriL4c6({n`fnYcol*}qGYL^IzfCz|y z2&8}jCi+NEH0+-H9Dd`j=9?Z`d{%gwx#mIJyJ-T4MpKrU5LFbSVOV+9Nw8jVjVYDZ zc_L%1k7T2(DVt-1nS0`k#@(Od4PN05XHjb(VJ@O7Z?YF26;hNWwm;tK`UdbB0tSNN zU{J7WFhE*KNr6o3P!SLT5fFh)Nx-twuQ?a>?KWH6J+`NpMHHKDRE`YNH}*R*aa7yo zD7!cuO{UEJ2y4I0of+>7?7(LT7zl=gK|y4+jFKtu8#PJY;HC&P*kvm?Bdqd* z@UosA6KEajYv1rh@2q{$S@+MV$4JZ^HnPlJE5a~BDG&g<}^J7$w4A3_S8(#Z2XWc)dDz3E^n{>6r)X-8GSni~F z<|rEg2RrZ?0+aRCX(FZQB?2NK0wN#+w;2IzcH3|%=HNX=b2z@95A|L`HAOg1^0lX6l zWl8$c+DpS9nGsfSPFM!5r+D(Q);SzSse8m#VO3^#0VS=cKs6I+H@%jeWOhJ?T7XFi(2a`o+TAeI`}`M_@w536N8jpw`LRW zZJLkXfL$B`WKaV2>N5>qvAHWOi73A$qQcVjiT9O=zESrG zt13}-k9zctG?6MQkj8bJ=Oq4UW^jdMxVj8?ICMp_+8Y@m3VMeUTX&^OVmqY*=)LKSK zOceFG2#A0Ph`?=6fCuj&yF0|;-stZtyePa9!9~+HzGxEqhNS}>b=5uQs`IDow$V2L z2u5In6tLixb>p_bkJLdC5CIVofn*Z+Inb43UihO+B1$cdsJPOEG*6p&<~Pzej0xhD zQ90PLQjx&v8?v^219SicBQQalO!zuX1VlgtL_h>?dji<`c>v!Z?5e*e;>Aso_18w0 zU13y?4AM7_yXu{E)jjH}vc)V|RNiXKy6Y)G104Vj#x)Tj1+11)Zu>h(9TWi(5CIWL z1%Vl7oCTJI*IXS@DNXXVCC9$u@v^|_qW(Eooug5ex7blRvYh`0xPS&a0Hy-FP7whS z5CIVofjfi%p&@u6A9LJ!_q?#;OT$aAjI4C?`C*fv&KGW^}PtknK>}-9)-(B}uRJGj>w!~)g{jk6R5um^opP@bx0TB=Z5fA|pNRR+)0TEHrPIvS- zzuNC!7+#2I5^EzXXPCZ0Y>l(-`WM`_|BR}-!%=OQqvpQM8-D{VzyT4Uzy&nW87EP_ zL_h>YKm3b0n0TB=Z5lEQ8J9})U*GAUZn1T8RD#r!) z6PMjj2AGAFnnVH3eEJ4Jzyh3vsp(S@5CIVo0TB>^WDvmP(dJoLd3Jl`Bg-R-vO{*0 zCzN-(`fphF4UdU~RTbmNaU`n7erL@CnajQb3V?tGI4q+8N)DpQkSQG^0wN#+A|L_@ z5U@NEehqPL4sdO_;;OmXR&k@PN`~nhWJS5;uJ6f;!r!{bT~^AKTbn5`6;*phy)$og@Mx zAOa#F0wRzw0XAH)SP&K!U1PJY>;@Z43F){WHtu?gC+jQeUrip^E15;#p!+}o1wg=} z-6#nQjXo6t5fA|p5P?(?V9DU3&3(!4-X82Kz1dcMtF3B!#NS9v-|*y}f8tU!<(90c z&{?`n$LT&0K%q61RLPM}5&;nq0TB>^WDz(P;V!blR$;TP!d6?g9d<%~rDeRY#Ptnh zOZ{NMg^;8aqIQ_r9p~JnezT&LdV`k|$HSB(QFZ?Cl*3WA4>>6WKD8pC zdIO?*L!?>}Q&FYpAl;<1beWFReIRHzN~$DCCy9Uvh=2%)Kne(0Pxwo(xQcDD)!AjQ zo`&(vlVRWR8agsS-=J%BkZ#gh0LiqG0x8jYKm<}pzzR&UJJh{A(6uJW_2dCZ)xD0I`y5$C-=L{9m}b*>x|KmxtV zKmY zKm^j9fZemDbYrNy>~GHchn#gYhyMo6pfNOwhT*V5BlQvi5fA|p5CIX$x&&OFWr_`< z?)>|lRep0;|2?YiAI4?$7W#|Q0GdH#Xc7&Bt<}h^3t24}0TB=Z5fFhpoB-AXUV9_l zuOE&2>_pT{N26*SHY&%h(l@v?4WJn`h9=Q4nrAig4j(CXUj#%z1VlgtZW{tW2D;1q z9`)3bsCq}D*bJM&`(e2#m!<(U{U78vQ&4B z$3+RZP6MQN+-7p6?udX0h=2%)fDZv{uHPBqo*m*|bk+U*DOauIM&(EkeS>PLoJ(*a zF2_Y_jFb(Z5z#+IKml~5HGQmtMhAOa#F0wN#+BET94-W7qa=%>%Po;u@t@@yLD8&pD7 zR7kZ{u4NR7nFxr02#A0PhyVnzLlA;1+#S8c7G33x`>Av8`YE?>a0(}KI+air70SFJ z=@J1E5CIVo0TGB#V6Q#;(bMkQXWg~Wxt~bMdI|?~3MX-^X@vAqMu59 ze+pl50Eclfr*NXyQj!B%$B2Lkh=2%)z#UG&+D@|F9^E*|-8tC(WVZ~ZT;h%iSR~*1g%ElcoE$Y4qh=2%)fC!`sfzN}Z>-tCk z{jw>%;h%bmfCz|y2#A0Ph(MYU!2c5i1}i3S1V)#>6kXll6yESpKIAJoh^7f=RU!f+ zAOa#F0wMr`-<{DvJEHe`3UBzQULqg@A|L`HAOa#F0wN#+A|L`HAOa$gwFux5%F+pc zy>GHs`_)ThgJmZ|T@(QJd!L2J|sKvfJbL z%N6CMW=bj=4?~J+SRCNVd4Dt9Zg{zysXS2#ELa(taZ!14I+*k^rYcWuiC#`$h=2%) zfCz{{<|7b%?(FJ5-8YXKwrRv*-!gK@hQa-JPoI+cTCEm|fCz|y2#7!yCa`7f$aRDI zt{*yJ!>~cC`}R1ncmbW^$<%boV}-bI=-`o!>rU+0x_R{Qb%XnHe9Jqpk9+IilRtXL(?@f#x0o&r?DOmVIe)BQduY{iM`T2bS`E_U+qWLy zzUApz6JdD;wcTAaZYWI#m*RKgYeac)kdDbCo5NYbFKHV8yZ%4du(r-{ALqh)C zu=eEc9sB0bS<}Ba7xG>-6>pAgT7PWIrc--%r3knV76B0u0TIYl1lpG>)bK&SCOPkG zmixi4{rtxL_ci7zmJ%>xJMA{?;X8kvIImfQ1 z^?AHHhK1P;zhU~IW>de%P9CG)q>hW%bk8zHWF*yYn>cpj2k*>o@_oA!`5R?Rpux@a zJk+LGp4LTjw@I)R&C|MY&iEaq3k~k~8~N}5o89R9sb73__0k2d<#ISM^;^A2y7?^b zEbrO@j5ELg0^m)PhtaxdkD3+M^zAXX@%MjjSi@DgV$#<#$GBYf@Nil_DC8PwNN|9;{7d;I7{{HrJblLf6B zFKORu?Vvv9y2;bEl4zm65&;nq0TH+*1p3ym*`ajd&J{~`tz5cQ!AE9(_oYuWeqXhM z`Dp8y5xwhG>sYo3M|Q4IBBiBErAL|lN4@sK&MD(p_Uv-`$e%t}NyC3)+?d_>kv2thw<(qvts`E^+oouqw#Dh+;cTwBs9ZDDKl01y&qK_6F^88;nj~ueBQ`_U)HgnzN=o{YVEpFecMgHtv ztCUW#N9{@$81c$KH;)>+v{Rcidv=@3Ez_3w{1m>i^o^jiXV9!RjU4jhC+`E3Uc|q8 z@;_PGqZ8`Zma!vDTcmHKa71*t2#A0PWD)|s>Q-S!U<&S7wpgpeIhlR-FPgW1;XDix zEGta^>XVVLJU{U7j}LzCsZQmKV+=t#NlhtJq}`(hyH_ta^!dLI_-j3^DAYXV&8NYrA6RMn zKV6r{`5E7QHsia`eap9>&-&r3A3uGcS-wN*BG>h_Oc6fpRktcN_j|I=luzE9_Qi*s zzGKS7t>Z==T)vd{TTM!^Bj_7z`}bbkzt@6RP1+XEOG~b+JQ1oL%N9ld8T8B(n}!eK z8UNVUP39^|+BYz^aLnPgtH!|7PoJC`e(CXkv96q znbRmR8;1{?{K4C;3gzTN$?0rj$Dq2b>eY4g=wSw|^bJEnFA)#{5y*N3;^-SidE{p@ zUDd10s@~m4y!>3lhx~XnX1-v`!ysU$12an&Ve(38;apB(zBa2E#qzc+kb{~VXTKZu zU}di^OFOl-hlMg(Cox~gCu^o%x7+{dktv`4Z+@$0L;vsZjk5iPYFQ0ohQ)Bv5tO(%-iX?zd_9;N{&q(A17)ipEaU*K`A{G}MgJ(js5BX1O1r zJF^;oH|?vB*AD7OW30J8epC6x=oIO*RiQ^XJ+>FViemce8=c#395HzEhwrp5oD1w;f$@ltZ%eMz zG~!7Y!?CJ&x6NaQ8?e$h5)?0eC;}oN0-2t`b^1opJZ5SeK4{a3Ars$!lZmx+g_6ul zX0j+-lqneVJ0;#4MEq5W>po%1v(7~UuxeuhqGsmq`OO>i6wEB_j&i0BRp6P^xN0o# z(PiA*ucKyMYjB)-oU2<6Xj>v*^L*LpBU3-#6f3%S@-5vuuIkkd69lFn^dc(sw%nQ% zz4NAL4lUZPYT3md+RSUw2t!TM?ML5O-KPguBODuA7JL{J2bEhqef6T!g{{x|OM}s% z`afL_shnu|Kb8d+k>hS31i&%SZ`)Z%t6)(`1F;hi_|3!)cZ znW0nGa9pQjc+ET5!8{sW+|{n79b2#H-VyD^bWQq(HNg5S0wN#+S&e{K-{AM3iH}8- zp0z4cx>PD1r+xYH+-8kNzwvV0 zqIsC+tht8EF<gj|-+7%0#hCPym{vSrIl{wN_UgvohdIp}bS__l z8oE?`)OX_cs2nH;Grs?F`Zu31?a~3|B;eGEkPGM8KoJoflt>8<4-5!6d4iU+6=lk& zAIxjfWY~+(7(+q1Vm`AZe7aXJk59|sXP;U(xc{OKtq!kQg$N{I=y1Cuf`cj7Dqp(_ z7f`%ehQIU-o~vFgTw+1X#*5mvU|$IhCis}u;PAjeXJlkz@@1~*cAx$A7shVTGf(!c zU749ZX=6fq=o?n^@KX&B3IuYf|0UXQdU58IB@9cuw4ZKPvc6$V}zdKRr*%#xW9%b4M#-*|~G#ML)e zbnCFXcefZ1$#^Fw@xiH|cQwlXmv$u#)ufdTMj`$5jU-yQe%K&}V?pa?3FsRYN;JuF z&(5ink~m#oiGT=*fCyw!0@vvq*f+`*>sGZ)*UF`^7%+#%ma08!Rpd#0py1EI5<~yL*5mO%^vY#h z=+#7d#_Ah$8h_8sHTmOr+u;uxYcru*D#tj3&7o(lN<8NGd8|6B&Y}*jH;o!bW7zD= zUt>Q>vY;?<*u}%YW87HPx7Wn~y@e@;9Xi0FW;R@SXLC#(OzwQOpl$OXzxa><9ke`Q zeIxdYR^{go>|4^VC979#+wsvi*7WVZesI6-lg7~oT70d+i9q3i(98ayJG^#v%K{H$ z@bNYey&|!azWRozv!?xS(|+?m5BaqN`_5_d!@TB=64o~!xp(`-u^jAl*gYqiKi5Vo zk?!kb5fA|p5P{53z^iXC`&e5cHjfy*)N)NUzx&QK`L)Nu&U|xj|F10TV<8#!>i_x7 zu--YbQ~46OSP(S=bet6*pqYPNuCObY%_*^V66>c?NcVqYV_UW_N~#Hd=@O2<%z1XtaCfANZ@qCEs>Yir1QV+XUhqWpx5ae zo*sn<1ejA3ufba}z8q*TVVC`Hs9>NMS;dPwef14*6Jy^n61>H+7F!dFVxs!Sq;VXE zyG!hO`o9Q>fCz}d?Lfds-(c(O`hk5Gv}jCFN4l3B*Tm#g@IUg$imn~DjUP4UKQFVe z!hGkQ`@C;Dl`Ymh&x1+m8`kAmPcf&&*Efph8S~~V3tBgy_SL6W6w^d!{p7dXb0nEh z`2Uu1qo#iO$-L%`yH+g|U*8~x6%MF3tT+wz4eMG_HoHM#_V6aUVVQL?Yo*MKTKdKf zM@k2XfCz|y2&5H(xcUY*hv6?hyKmmCtz$=?JMb%)NE71#*|-8u94BkZp_R*~fAJ9k zuZH~dX>2J8>l@{Y8`M86;EL%&GOPs2 zfyvqshyAvE$=X5vw~QUd0+WxA1n!P#N^Cy~ICb*k;X}62P*1f9=sRhsZ@}Ti&TW6J zT^*l>SFhj=J}s;(5qPBE6ScgS5a}Dq8Fw8c0wN#+B9JBo`qZz%e8e_V_D;4em}ACw zUnI9$?BkwjU0F3J+q)?lhwVuPkR3?W@MhSeJlfUXGU7W4$$de zenK;R*Hb*2!{Ux@r+@qT^shgSdzN`$rU-5otZ4kUY*BK%a1+N7gA0cf76rV`VES%b zEYF~4pPb*S>7)gXePi9=0qg`>*tSL76R8j# zhC+&yUuOSgbs;^7dE6dNrgeg)x5)bt+iJYcVES%TB-ikNJ-51lFZRxy-Deqy(na6! zc5U!;PZK>1(~7ql*S+z?Q^jmWbTaa`EbrcNVVh>sH@x)pMg&Aa1VkXi2(0PfYe}cJ z%Sa{GtrL^c&oicSY3l(z={B&1gru=&_w8ksge0?UrifoioyLb7h7FwX?i*7-{ok+` z{+>iA@Ajn%vh`!^o39X$i^gzup5m`-gGb*WdIL$*M!ojpwTacEZ1k*MY1FGPuup^p zte$fd@HM@zw$%Q^(!_|Jjwxg4^MCU;!?RH(A9~1y|GmXme{NjI6%urSvGAtOU(`C6 zC?A_g4cjq!JiSKW;L_e^Tzli$I5Y5XkB@uvmEkWwvuDOMa<(2^wiw9l;pH&dH&QDC zI!^>dKm9-Dw(RruHp9FznvV%5@&jg;IWsuS*F@uKMymA>utYWPtyf9r zOX$w_i3IgB%P18}U~ifA{Z~6CjU$4qEiBw(z`~hX&&pVRgO<~5Bx=ooK5QMr{*&1L zlx-8naG1junVju8R*&>o1VlgtL?H7MFisb7bO~RRLgF1D-8or1cT5>S{mYM0B$CPj zTD}A-0r}t(ehg=tE?t;7LCcmi?wED3pdrdr?djt245aJE5nNLYXK zST{W z!FnSCA|L`Ha2pe_W<#Q1?wvF9@ah#SdUT%E;On`~8q96_gH?#v#G9YK`IK!YCK>DF zHGFnz_)ftdjUwp}Nw>;^3)NmYbnx81y#&EFggur7FKWxaK}I>Wi@2(bXI&r{S=iPN z>@&YbW1@VRQ`0EyhWF~%-gsKIe(1oZo!gOCHGaRyOUuUCU+2%}l(e#MSb88!S5rU# zaDIzM{hq9y*vb@S@G2Sj_s2+dJMrB&ewjVv(&0mAf8Fcw#6ovOMr5$QVGYFb9ox1~ z9=~_)EY{2VKV5I&Gf%`FL5m?8NQ(jwqr&Z-KWE#daYQgP<9NLcTpIj$97@@vN^Xm|g-@9GStuc}L&8tlNvIjIv8OzC z4@@6L*YxYLVQ~K)Qzj$2O-A^Jf0Ey zhTDy{K#x}T?E00T9}z@h9)G^}&e{yh*tcHUF=_0|9$hXUI~o^hM(Z1HH`X%-Zu{g3 zlRtisWt6U!O0j3TP4R1fwqAgU0lTC}{OfsQx)P?IVDd&D6EYCR?UCM#fCz|y2xMsj zBw1V0ts}9yhW_8*SnkKkkbMo;m2$;nw1otn6_ZppsL)E$Lb7{i9|}P^$VyK}QD#+q zESYEG)4PGb@!AU}X?y!t8KZBI@O@RUuB`rer%Ugf^ssMOG&YYKZnC~sNi^##8+@=e zwaAx!*h~LdH?a5o=8Xu@0aEX*ozeP6>?r=aU@l=rm-p!0t4>vXPU2_2gC639rbM3K z6}`HVhA;U1x!AMye-RJ?5fFi_Przd|h`f4r%a{?nr%fh2Cfh?s{OdUajrQ^+A0Z$H zvzT`>y~#IbPAQUm?0;Ta+PUrQM&BISxSkv(7k)o<_0mOhiCPi55@UJ?>Kiy&LgU1a zZGE4pHR6@$*?ogLk)UOR56L5gGc90QN!c@Ndf1gKL|FAnDVt&XhP426dhecP-8ya> zJ$&q&|0bzTuew!PH1UZFdrhLs6hYF^rpVgEqR)ah%{B}j#2OhcvPLAdu#(t~q0dD? z1VkX~5Qqo~Ch-SP#KiwJ+ewP##(`Aaq1Tz zF6!83z+WH3ie>iU`sl70Wa0=(`$s()cuN)_-2J4F-ksmFDb7NU@R*%7@w=l>L_h>Y zKm@W1fhdRB+=_1=vp*YAXMFQnn__ubH!%;<9xsb)kDo~_kzD^3r<1&l!n3MRAT zPW$Ww!bh-P6Lk8NvG#kCu`)whlT>2ptZx(b-+1kXjl%~mZr3t{)>B3eC1LLJF74v; zNvrh~$k;+dc)CBhd@O33hR(wu7E|k`=W0%P82pd?W<1v1~O{KKOMVe zVOO!|Usr6AxIQv>Fcq>D*Q;O{w~e?Z3IC11KaNJk6}|1`J)WyWU- z7=;7_iKorzcnte1dv~APyb({|-e!2;pcpjCdEd?KPhn{Z8f?;`Ypg7w!1$U4yb2y_ zp;?0{v$}WJWnJ3s{Ba^+36R3+33fKU^$kmPymI3Btj6Ch>(+VPe_zKYL;K@vN+_kR zi{=^r^0SDCBO;u?M3CbzqDavDE)^d|maIZD+4-%Tt?t(gX)!{gg_Q({Rv(Ih2#7%D zCSdf9fqnRqZ(AaN`%=CcSG{v6Z>;4NrVk=_C01G&&Pgz?xlO-k?*<7|uw0~J@2!cZ z-&3_)70hAcT*c10mcB9UrDvA+>@u^#*Jt+b;iBoSZ!rBa36dz*+YIXsO9srXjk4Xf zciv2z5#Pe#X`4|7l87%#Y!eQ^=+vrkF4PGt9H`HQtbZ~ntb7r-gdiJBI<`jN;KU?c z9nxFhFjtR`4mx{wX2Wlmb?b!NhUr2=9>uKLHOX-=fmp3m_-na*ENaKD{XChVLtF)G=c887|u`}uRomcD`8 zWVfni*rn^8f6+GxH%c6^*-gG5|Lz-jSDI7PRMoj|SUs&GfynBC553K>CP(6) z^{ro%x$?l$g`AZ-edGAHEui>g-5Qj@_?CfdSM&@@@48j-j@U7I+?KH;2v_dud&0&I zzDiep1LH%`*)t*M&l7EfjCHdbeK-82=ZFQz09|V{;#8_o$1+6`A(Fq${NYP)gDq*< zGI}^(D5GC}kx@2^R+%D%9GUvX$7I2y=AbjD!vg|1#YZ;GCwhs12#A0PWMTr{Ym{$U z@Db*<>t=*l(*Ykc-?7NTW9IU19XAdgK)mrZ?2R#xdrId@CE4joOIjDsP0qDRAN-fA z_)gZIiGJX@7!m4vR6((%o@Q}x~vSooB7?FJX=>4b9prC1ZTbT5lbkaB2!i;qyG9-k+ zr*oS&obbQ@;_!*>#j;U&o6Q@uKc!5O9@Q%(-A=xp^x@lVk41l@5{x0NQc?5NFFx8l zW`r5vG)*aZ!^Y?U5fA|p5P_Q{(7Rq$<^|s;P_MoblVCJAngGE+mvwHts&_XNA0zQ% zR`5NG>?vAj@AG(drj?F3npSv}d3^d;N#vt%L&~=4U&YHuU%GG?948*RH)HbAV@@%S zwQ-)@Ei(%X1oOy8|H0cQQkRe3L!PQ|txVaVfZOv*S{~9#-|${^NyoO!yLbNSyD#t# zHE^z9NkL5_Q*DzR_n=7F!a^-k@t$kFp%YHK4fE9Sm!2Un564pp$|Q<0H4_T#=ULNz zPSHO_Km|+H6{IwpdBxEP~dB!x%^+Y&Nn@)L*6<3ZQ z#SXxeevg_JQF~|xt_bYKnD)g-TqQyK#(|}aex5mf`=s%4pPH@rxF9yq^AHgm&g}i= z`1Y+aaU0U6x!CW`)>Qwaf3jGBOKP9`HOz*KIP)n_?&LJ#seIqUd1S>6IC+BO6AoN< zBl|}Du3h`&<_0C5^o?`-_nq9m^XTS{mDtEwYhjy44w?1C*9%%UF(!@@`T0xDXuEm*Oe>t{wvlS4`8kfYX(&r)| z0wN#+nS=n&2FwNI61_H~#TqwwzQ+G^PNQ$Pjv2nDUr&>=Gqo@4NtUGuZ*Dl&J9xi! z?8x~o8!he7nqW}Yf=E*OMx3ih+3dy$aQ%*5K51Jt4^z^dCJm;1@_xXn6I=qrJ6HEK zAjQtB%w^WOXg+3Jjl;2F#NbIEy*I1Dx9s9U>B{(tu`S-_=@ zF~p+^-k=tJEdnAS0wQor3E-H~@IjN=+-HK|7v4wTNaBGs)jc?{WZ}9&eFz!Rt%}Dv z&`eB;+c!LyaYva6F4W(jHGR~fxKo>_!MP@X{O;<$y%w}?mL3h>JAXEgiz|9|>t4N_ zaZZTUH&B*%25<0y9|1sUo=JC-_#~J*eFJ3!OB5>+IJ!*v=-rh)IxT3`B<#v%R3etQ zl0O7#sBd^Lx_;Oof@~~m*U~6~9z8Iwro<-%c|#fd?ruNgs~aUS8QwK$G8{>1U#g%H z(L4`!E?=A&s)L?+Vom?vbDK3fzGJJm0eT|>A|L`HkjV*n)+WZSA3DIePsGliF_VQc z-RB?lk0-{w@zRKwpW8WYGAjkYEnAZO9$9lPaTSPIb!6kZ-P5KlBu`4`c1t?7UDB}) ze*{9~U zXv9^x9LYQO&YMjLELxs~8W6W%)?pzRF2Luv4F2a|$y5vApXjAL(0 z|EKDr-Y_(~XG~+5JXM+nFTF%S1VlgtGBW{tSSYhL&yUOwOl{0WF;DJgim;!tRbi7= zZOW(b|McCLIPCHKp3K5l4vq{ych*Dz>(y=ie_v(q3AU7`Iqz$l^M3x4uZ{2#*vTzr zgV`#X`UVjymUL>jqDL2+#8ZDK!jxIcl4S%S9(%DoTnP73JUXU-^ZC>-KVH_o6OFqzkqY4mXo9%&LKec_lYGIhiu4Ki3!)ijSBDp4i@ZX)2$FpQZVwCvx zU-t=0hNq8Qh&31fZX7;%QJdymk*Z=eB}?CU;qSCzQM(qWc5OEYlg>33&UF>?kJvh~ zs9>Nlb&ecLBG=gszr(wg-86_w{FbAbHO_I*p_NO$wORFh|C!hut`_&m$lzc^1xlzK zT&P9fY-l(P&BPDiVVFEEk6Ae5eM}cpqSYkU41F#FA|L`HkR}8yll7HjM;qt3m%O6v z4dKU}$6hQO)(lRl1Zygsi@BgvyH$OAru4c_Tjc7#J+_Y@J=5q0d0EHzL_23IN(q!4 zJ~0lfu~Thw^^MTbncsgkr|}Qt-+L1sfJ&$;w!ubUqA;;iTi42^7I$c~ux(5BQKq!z zfoD#W)s!w1x5{!^w6={{K&&=n;b*GtQKQ1VmW@gI@ync9T!ks`hSv%>d3;6J4%;V; z9`m1<**zM!PA?7X4KpmuM$Pg*h-R|3e@~n@F8+RyDb?jjuJZ(>U*8O zQ8?G|e?3PVNOXJY_d_>qv(Et-H<hrElE)rXg02kW6EO!>PD@ zaU6BV{O4Z`&FrQP7$%>F>7ODX0wN#+nUer!`IEbLoZhp0|Dt)MP+8or1q_r;wA ziT6c*Qv6HDzV+`EmC>)g$XWfLuG_O#C1c6=7$T?{H3L5cqK(aI@*U2W=Bwn`H#`LK zSh#ZhSiq^1M>cPq@cx@KzW-|23(uJOD87}TOc9z*X3~C7)fxBpYa?HMVNR3piP5p^ z$BDb9P4+EQC;j}>RKi(|dE@1=Z@r4$9`8gN9}{~jRw;^614X_xlI zC}a0ZV$rBD2~hLTKmEwIi_x#YIPSl%LYQ5^1D>v%VCB{&EK2>Jtj&l_|LS9!9dhA( zz=`Adha@IQ=plS{>F^duC4CHFXk-qIDIk&fv4Bw~ie}orC}#@$ctNog@(^3fyDWji%v~h%J_tXC){f zNr&k&l0f%?01AL4-G$#*E#E$AENgHqRI!9a!@M>n8jrNVjiF(H7^Z6i`Q|Ge&sm&H z4P3%%d}7zq=OQ2iA|L{{gh0sovt;|)I&S2Ici&)lr&l*;=QRGdS?>E`Lgm!V>I_Lyv3^irI!l+Wbt{i4$#=q)H=nQS z(|uXj_Kt`!t7fZC|3442JC!;|{rmaGIqtUVwD@?1ByQuq?@>AE1zo1&bRP(yNMdJ= zb-5jr$KzG9qI<`7B?=IQgVVhgT5o7M&87jg#3PVK*f^5oIg4|tf%Z$^h$|j?F9ISU z0=JxiS-6jiVoq7op*0SK6W)0p`v!(<%Yx0{YXu*V6qVSGt5ywY8m!S6lX&rba~glg z{I#lg*Hq{m_+&DbTt0qm#t&aD>D-3DZX1on(QX)PB zOt0$(^dU9g!ZyuNFibmRvBYhv&y_d@Wwgz2d@xU4|2!c`*w+@=lKX$uz8s99oZ)p_~opG!NorA~BFR1{C0 zUOt86R~z>eI!l-7INb*VC~l~4Ux2ok#3*%d^N*kH9#^RblmMOyVoW;4+ zK>Mx6-}3uQ4G;kl5CIX0O8{3u!en7cw}pm=2V98=4#KX!xNVD7y}II}z|KU^EJ@&t zlojSplmSw>t{d2UL950`Hmsv&>c{Pqr2&Fa^&-qE8)V8B?OeWOi~QNyg+Z&5o>;AB zGn?4M!)P(>HNCP`mgpQChV&ow>=VuMJd|LMu3av6G(COHh9fTX^@{GDeDn?fBY!Mx-HbZN zy#7+t-1jH5PVZIdG99P;R_@>%>Kp8zUDByFd2c(GF2ah5x1OZma3sf@Y`L9cvgJzO z@R1PxQv^gn1Tq%^W4MoE3*^BSOE(M|Kr~CDnh*F}y+O}BNx-F)7NTL`^!Vea?_(_? z-uU?g`>f5C-Y(-p+5c%%`H<(HCd4{BH~A_#yF5HKcmgk&_L>G0@SJ@#YX|ik_3sx5 z#(rIc|6y8A`cX^=SU-B!su;fzS-n@C%BF*!gS|ba3!F%9bZW+31VakfiuO2XdV7(? z8+N5`8$X)DRvlbt2j2kWlb{AT*n!UwP;)ZpP3tfSvm0gCv`H|BJdO8uB#Ad>n4YSG zrm=nESn{+wBO|OHS#<`UIn@lUb+ta&(!F(|wBrKoY}cU2gxP`5T81 zB4h`iz&NIQ>q+_zM{+!8aV|9^pIc&$(dQx{0wN#+B9J-)Jg4I($}Ws`1N-`xLH*XS zb$6nP*`=2Vh=2%)fCz{{#u4Bt-cvAm-2BU`Dt_ayui3>v;~$gUPds&Tq4+NrX!wwj z+Vh(?THdwevd-;%OPBUb+P7RkxW73!Hp{I~Jyy-hZA{$bQcf}kSL$fo#Hb}UOxEW< zKvMM26!a+NxV$Y%!Byf8klu@c2#A0Ph(KBpU_PRnz|$v*|FCbtynXZM_?888aF+Oe zrHR{M<}AHLKmYKmYKmYKmYKmYKmYKmYKmYKmYKmY zKmYKmYKmYKmYKmYKmYKmYKmYKmYKmYKmYKmYKmY zKmYKmYKmYKmYKmYKmYKmYKmYKmYKm;({1R6vSi!v=^-QxQ}^L;wzjrTANrJT(|EPDt527wuY^cP%q#1h5-t0bcS#pwiMqS2 zg{To?%vKppxWKlJjk>k!`x{NKr#w{lizzzLDm*$PfB*srAb>z?6VUTU)6a`OUG@)) z>cAYJ=^;(4*mQ#q{krYcvs1TTowrY`X*7+gku`oaOAff=O9+vUnB(P5iN-aow%yT% zSfcUELb}@_YJ?cGRo1K)*r)4`x)17kL+^*ZZ^jj6zZq5sS_SE6=jhd?8KaLcJooEA z-}}Nx%fFXa(`Xt~BWvN&EPe`<9aV^Q#2hbgN;Ixvwe5~B#1bw08dCDW5H&)Kxnv^Z z9jq1@ohf?Wh>y@}wzEIYSPSj+o=+O^L=e zthU|Jg;=8Qu52M{gc!3`2CWttohf?W(C;%}r`=kW{7Q4HApPtd(MhB7ck8V3HXptB zM`K3MbUL~J7f*f3?c6(uNJq@^x}`+p z8dlrx=t3+}t4pp`=MXhQjM-gM+?^>_F?-T^Wo<0~{+l;H^xNAWORH(LkC%VHRlJ@O z4qb@p4l!oV?y?0)cbqOnjSypw%!_|DzM)a^w=uT0+qP3T-P)4;(BsOV-)LxTI?yzD z)6|U$BVGe}+Ky^t`pB_=fB1*Ly!FwymOhzQ(`Xt~Ba17VB~Nb6iwcV_#B_%kvnQn< zB3+0vyGwV78X?A9Mh11|Px7YD==~|teXxvKa&|~#eeti?oizBcKi=}#tCuhN*@C;$ zY8p*rYGjQc%>rFQTX%FJraQ!#Jt_4N=|YUzUAjZm2r=e{y5e7rAK7ofqi4^%{lpn} zo;=IYmQ03+apHl) z-??Gg4==g-$CurfR?}!2QzL6#(JYxP(A}gV(h+mKyeZMRhSjz^x)4j0i%eV~#0*9; zPa87oZ%dx~#e%zjbM-xjrVi>B-P+;{H*BkO@{tvWhKfQmj2Yst6}2&N#Jh_geEHJF zKbd!XT1}&A%o7KWfX2-9RBtV%U-(V=2tJf z&Ct|A-E?cyA4X~0(75uCF|FxO5fwYs)v0sxkrf6vO@D5h?#^zjk;6T$RQv%wUWVvw zRY>kShe#J<%w#Yw5Ml#x<i) zA8va1`2B~ju^4jj#Ykhy0mFWO&3!+(=!RD=zB#R?(KMz;mQplJ4!Gh=2$7DM z#x<xf|HGVWpCJS^oX^3>h94~K5G_GN_?T#+Q66GQj z7YH$fRxw)@ztzY(2VXetl2^`I@Wur;F}lT_}uilFP=F+ zt)|g5rbd=bG)tgFErlH-9Wlqtn-Yy{SZ%wb3$a97x-66)D`FR}$5F%ZO zF}q85h#I+%+3MDoqK3ONtJ=sZYOM00VwIGttvAJqLZl<+c$HG3aSf|&cXT0^Xo^>r zRfY;tBlj^|6@Q8vtJFq_|4dP1mFtyNQlN|LxuXj)-66*8Nj-;17h=rr(jB5k?qjyP zKBuVRuFR@7@=A>hZg_6mB`=X2RaOgrzcZe}p?ff-Q6e3-SF`Khc z$=(n(av!tRt<75FjCn6i&-u@99KYwFUtV<6^QT|--Lo!Ft7$ZisgZTMMdp>9cOD)a zEh;QJVvd(LB^uYT+IB}5Vu`xDI)$i_`(x^(dE(f!pPqPLT1}&AOpUCQF_(W@H$*yOj+Zwj8rQJec1IUtiMo5<2vH;VF%Qv*`uFR@7a-=bKm;OJTJp0k3PkVCg8EG|*rZF{g zzMnV3q6;zIA;w&_^Vd94h;$*wY|cU@dqdR7eau$3HY*K{{PN`4M|SU9NzM3t>#vI#Y4=q2M#b<{yVhfRunB(P5iN-aow%yT%SfXWIJrW)g zqDJmxwkm!rjcDX?J@?e#Olec!(EOKEqK$+#<8wDF4NtB}o_K~xN6hgWwz_V3Qgv2g zknYgaO$MuzK`Upg>xR3Ltu6(gbhgrnr@rL2RZ=|BunHqYI%1C3EhQS)u-bM<7h;K8 zT{o;chp3VJn5~N6O2cYot3vXmvz3M?S0w1l76>ujA;w&Gg3>)OM7j`TE+cETH8uJs zdC3p`wJ-G<7u4(BA!g7jW~--yGDcRqmGmg}@d_!U%zQg!g+|Xke>C-?$H$)j)cCW~ zY8p*rj_tXpmK@FE+uAFPCqz18j+Zwj8rQJec1IUtiB@YT>{xju)O zL93Xpir;EvrC5npx=WTspdBKOV|L#C2NP#LeB{ZGkC~QM(`Xt~BTFWlB~YT4!VZy+ znB(P5iN-aow%yT%SfVXmBG&kIeP=@-8?{?|#|=7e*SfH`LWB@==|4`PQM6zJ9<__YXWK zt)|g5rbgEI(JX-ywG?)Ubi^DlZ%Q<-VYTg!F2oXT=@PNVuSW|U->vsgMxFkRLymuD z*kn^1I!SvU9WvqG1CO>!P|40@FrFQ&sEYX%O5o`Q2`O0cDF!J zVzvq+MGdPm^Rsh`8mm;hRZ{%KF-H|59WlqNloE|=SZ%wb3$aAa7m8K(x?3O_T!lLM zKdq8tRs2>Xn=_bvIo|e6QDYS=tE71AV+brnI%1AjDJ2@$u-bM<7h;JTt`e*7a<@P- zxVm=2uUI9;s`#x&HfJ#5T72%dQe)`kdk#GM0sRO^N=>7EYv|-LU3xau*0rl|&}VaN ztgX`<(tWT}7z)N5ZS$hEKrJ(Mx@U(@cJWe_({zUzGbLKy`L2QwG2M=0wz_J$I|qxY z96av6LB$^k(LFK#(*Nq)`q2^n0EvE#M8QWPS*^m*+1&zNS6#v%s)^`yeb#NFg}{J75QX^MZvU>?e@s5VA#*Ymj%Q|}!-ZrPAy(`p*+g^?!>@4Ry;6y?RK1!|e8 z(L%zP-u&Z|2e^$5MFX*ExF?$RA%%#>)^MH^ze-NkHmdOAG^AKYW)37vZu ze|y9F9pk^cVfAhO>JR+_5d9hu1)uJ>m7Olo(S_0Km!fRH{>Gxy^;x%xnO%1?-zL;S z-PBo!=)lzzk^C!GW#(t+s5VAy()q!@hc51M;O#vJrPY@79CTZcfp_hC(0zRlxwp?D z`fO--_a5?e|HDUZmi`^qiapX$7z#!q83JxzloqIEYO!g#X&fa&=}=M>d=!$^Dh!?7 zr8~r!DbccvHpFzhi`j6-t-j0YIrvcDp@(d|?dp?O^D9ml=;*>&hL5h#Np2I-tu4Bk zmoZDu4p~tfn|67q->_SH4qVb}aJudGUW0G%HK=4;-1ETY{e}+Tw2OG7kTP+OrdAjV zMj@39yQxFUV)9oal#US&G~A^-#F(Q}r$oy*qCaX=SFdggBgt(dy0xiu@y7xaBxQ}6ioTeP-|JrP zYQyRxmitSACmQb3?Jk4vV)i5{Ru_oeYq(pWyAt&zgDlW05oLF_Dp608QubogJiTTe*^{K?Uc=o2-DS{S%#^5=K)iE^>2?>h)iv2&J+nZoM3mjxDubRRrR>F~d!Q9v z{DPD2wkJu+y@tC5y33%un5}Bq-2$!7=-g|#TVU=p$O5fSrLsFmC7SSM_vY7A^kR+P z7^}}^x3UBF=fD+b_h#EYyxZ_wdktE;>p__`O|1Y%Y_^?bqL4Bn%DslW1-i?iyO^y? z-Q5DMNpCEQHdseTfvH-7j3$=l|5r_4vgrAckHyR*N~gK?|17? z`)ATLwE|EWf{jATL^$^v?iT1SgYIIsDs^`Yv?}%7Yq(or?lZ^&txlz~J6rwQgqcmh z>Or@*E^XKC+-BWv+pJS|D?4C+4s2-p3FRSQ+4PPr`!3wH$F-aF%%o{*1)wk_6NQus zQSLR|Ezn&C-NkHG>h2b3RqDCdaJRtRXOIP2ol4d0tXtb7o%XtQ%f5GPy<6F>ngKhS zD>}OmUT?EIx7q!wEq1+b%iftZO|1YFhL#zHL-VRNtHZh`JH=q_ffQg^pNb4{+Y zH}@Lu7MS}CvcOeN7N`F#zP~lepS`H7S2x|-Zr`fk6`S?EYV%%YH>b;~&fqK0?yYx| z!*zP($f9ZLJGb7=qvwsBYPd_cy9~OE*{amtEzs&r&%K7b1?E13EYRvys!rz=>$y4s zJDnv(4Xdm7DxGtGrmV7F^FQ5bxJ!44F`Kin%3gO1v^v4vWpI`Cn*Zre!`%Yi#q3E2 zS)f%Ss?#~edah2uPG?C`!+e1<@6G+0VqX3#d);ZcOLvGduflHrr@IAOo#5^=XkPv* zd);ZcTcEp`J;@*ov`R#EI;U9A)d|??ERn`R>us9+)un5;>~sA#yI;TcZYj2_x9WFS zr@ande@iVk3d!lJTN->tZLGhgf>B5*F0eS%HoJ>X*MyQyFY_rKN=oV)?iT1SgOq5z zT-{}m5{)~Tv0bNE>KocNHneH_tc^9dwHn)L*U$~NxijsHjJtEtO2b`=da}SWG_3Bh zE!`lj=Jm64R2w7PZ_)JAv;E9JI=ghMVuzbH>AtZ2)>p5;O^WTx_FFI6u**SftuLi0 zq)fP?sTGETQAjB+P(uk#bOMYR4b-=8*-zM(i0$>03y>-V1Z{Rhr{IjwfjncsW%;-8P+YqElAsBdfvDuYka)CxnvD5SJjr*Xt3 zG|>q#Vl+@I5lV-WB7!JEX<4{ipt}rGqVepz%OE8hcedKDZ#q>6_n&a{te56Zd*+JM zUof;QoA%yv*7qJd_eb}iliDRz7a4cwpp}NZ67^((RvK29FT+hiyR7ETL+AQ>tzz_{ z7yjU$!o%17>+u^4X*G@Z{d)?>44tF#8yebVWfe`WFceJc3ly5@ic4!^%w&yD7wAI< zBU?(ej1yA@Pl=XyRz|1Qu|vQ5+I@wmuK)M5Hx~@;TTOePx~cG3de_e=-L2s&>cvH- zyei?SF9q}rmZa&WNp(AV$jtBF{>6h=eDLU1AE(tcn#Mf(pqYv&^XCnP;c9_HW(qK3 zOalI8ep37Yk*&i8I?G@Zu4Y?Gw2TvT#W_fc+MjLFX?4^=Grx2D7t5~r;Nh!2F4-PQ z@8a2<>(+7=b#{@l&wSD&5?;Q{-I7k0mwqemRzuGJ?vlcTSAO{D)t{u*G@8adddT^r z%KmwS1=?qp3|8kX=Nv5in&YlS-6h3pvF;XVRom_~JXxTX2A#_m$bBKPK&$Ipyt5~l z0x}p+iq$q5^zgz+2IB&rlxW#?!hu!-T+HLeZ?)~onL-AwvKH@52Cc3YWp@s-MBT+4 zufUSqlxW#i$AKOSM5om;2haN6(!xUv{`%N8|46H8G>xf|wd!b=OqS0A%T6d6tWL#J zq8^s0yQEkxmUFN==OD9GM<6<_#tfeE!s7qjf7zcOyyBy@nnu%@8d(d8W~t7KR+)tb zmYq;CxJoTK`X?poVTrm+iq&E{2OXVs44a8SLw)g`sw4J3{ozYLyXEZPEIIG@X*G?e zF*UNrk7i+kE(FM6*%eEPx+uui#|*JV-NkHGu9WEN<-}LQ6^Kr&k^7wS=)8a3cHUce zoc~T*O`~Z{jVzpKmQ0jbVA%;JgVm{6O4P#=b(a*Y#c~c-=Nx2~>IkentuFi5ZRfsq z$IN%qY8vg)%Y1s?V1bs&C4-!UsR)F4k#QHZ)diMwFqH~q5Kjc$omQMF)k!fKw7P)D zJ5!>RXiEa_POEqYmfWU9TS^dL4^hC~X~mgRoq8aHB`?}7b)ZBk(Ut_zf>B6mtxn^J z>(RNNdGrG+sb?_v3#3G=a?Nshk+Cn)y4w1t3sIx_a^&v1v2@1UdbC(_-hbLgxeaMj@WcQ^u3Assg0%*W^d-;x=>yKB~aX|>yD{MQqg ze{skjQ+>ct7z#!qrL{VZBQBwdP7BQZQs5$kxnCe9TAg##-9^TAiMqIM=+dDd8NF}L zhYw%+&ysD~SO50n^@XDjyrAhK)3!SKT78yqGr0O%_)3NX4Ryu8kbX$tlkYz3&sR@* z?fR46NUcr%`Aw(%`r@(QI%D|VXN>q-@pC4vX=;U`V6LC~^VC*%(i`Fun&<==F=moS zcNxt60#y%`XcdaqlM=13YtUl*Z-3YYqo0^IY-x$hk+bW@H7EXb>FIwMd%z`KHs7_| zmi_eE&^mA4Yx}Ks+u$pkDe~G{{q3)8K0L`_Hj8K0^aP?p8nWw&OQ!wd%85U^`h?d~ zY*!uslN+YIx%lM&y7}a{^f{9jO|38#Oo~g>P~sAr=#-6!F}<`{jN~qZxnH1?NQqjM zTDe_4DbXm5q5V#~|C~>5nEFfe<;dxEW9hU%9@t}Ixttjs=Sc=LSUFRsDzKuEdQV+? z+8-Aj|H?I!ewuE(dXgSsbfeF@O?oZeb!jwl32jL4;tNI*W2%`+I+(i*=6-=uNl>Cm zORd~~o|I@5#zDRH-&XHkIq~I07bR!cjf4A~R9jouSl?Ek&8@E3A+zsnL^<~)gXI<= z$N3`Qu8>l{zxy^|?r+DrU!ZRlm3ln6&!E);J-OCd#q7y_!W~_R8lEI2#4y|yQtB5^ z-v;#LOmUaN+%M3#ib_46+-J~gf$q)}tHfEw?8!aF9bJeTo+Ks2Fx(ZA)j1eqXHU)) zcNxt60z<4itC(}2L8}G2J5!>hH2rv3=@*XmQjT8G(aSozUqm7Kf8%gRXO%(!p@`5d zu%eLqoOH+ZKP^1r)oUmJjFwP9TtXYt=OhVdc-?T9!Q3w}VWPwBmir7^EzsSWq6)cY z@=q77_!-m^KO3(fRn-ry>c>{Iy>6KA3#;sPM`xA6Rifgb!3ji#G`QE4TTgoD^6@V% zobW0wp@6uACORcOV$3A_?lPGB1tv^%xZQG}L8}G2J5v@+c;)JeKfP$oQ%ToPtO_t zJT0MsxO9>6=y@aU4Ca1;2@@S|x7=sYYJu*qbyi_mU7tPa44o&52t5pUg%s{pI$`9V zTx8s3F!u{gnCNi3nUkxF!u{gnCNi3 zetfel1;y*Je3Q0bp~-t=fhRBI*iN`71I7Y9C!6m zZ(KC|TNjV~HZ7rmxP&G;RZ+y4NjbU8VD1-~Fwx<5%Y6o|7U=Fwxp4S1*Bt%k-d&H% zWeTSP^|i&n(Y)t2M_n}V#nbm*e%63TXbA9aQ0+(zwu$#J{hu=6Gd z>WmKMT`KPAtTNcrHIT1|A`lf)|1FO^f53C6?0)ZQ{g=@a3W!T+qEoIT#!Qm#E`zyW zV8TR)+b#DQv|6CMGes3LZTAPx-1E_M_x?u7cGg~xU3}ondu=l|+v|qa#mXI>RR*nM zrn83vD++0=(X;k_{?z{WP2XcVEunz8gw}tn(MoH?m`Q%!Wia;(Oql3!yX8KERtt1@ zrhHi;%TC*)bUUTL{yXK_{##}I-zioXD|d8O8MKO-&K?T5E2J;a!Q4K;cygw=%V6#o zNQqYGisVU&x(maqkUTl9tWxieE<_D0Iy%P%+!d15IT&JRPtFu~8O;3xL##Thm~)>& zs|C6{Q$kEi{4P*(+Z~-%21~|C2hRoE6;gB#Ciw*80COQ>Q#F$AH zxyxYg7f6X#r(!)RQFmcjT~$u%^YwG~_{RQQPu{p)=S|vm)n`NN(6-YiYjs__VS}bj zW%gYTcXXayWU6x_FiTz2@89UT!O#=C-ZyUB8^(9KIjuH!+Z(2KeW3e#1ARbN7z#!q zrL{VZBQBwdP790}Gg+y-4Ca1;lxTG-){_!-7lzeU<=9S($8CGl3ESNQ?AV7P9Un`UK+Qd+CiIN}nT=zO>oxXEDd7f6Y^yR@tv+2uvXqD0+= zVS80MZo6BL?Q-+D&Nq(le4{=a+SpFlP3iXao*N#@MP_9^u@$Vq%5zY+?wrexzvO{d3v^em?&v&OpgTH7jtk_zkXT^J zYg$VkJh>E*!IlzK^6O-Wy!`Nu z7NpfQn#R<~8b6vP69E=jc0$Qubt;w;tyYN^e}9F3mxX?#g?_Jv;kRCBSI2hS>2u$& zj5&Ivn-1IPin1fD@IcPN>YRhjQXPTlTDL=+14pm7Xy{ii9sZShX*G?eF*ULllKJxn z3oIk8WRP<(6@hRsGF=<@9kbqz>0TJE&P2|^R4R}`JP}xNDQG)zO#2&$tv7eXdh^q2 z8ck#F(6;#dzOsMbV1f3TC4<#DNjV40zUGuwqNV>{iTK8_<#g?_e z^vgE)C7M1NBd$px_l3j)t*&qJ&Rpx(bjGCrHA*yIbynN%O4MCaJXxSs9lO(TmqDuq z(z!YUxi2IZXmx#yclP8`KnCMUvDzksWnV?zRUH|O3wTnZW!DJ@S_yo4S{*pL{i31k zT{?Wdc_rJ3_VY)!zkEcgHmv<+N3DO;4(Z7v?#MxR@3hqSrq zh&I=BtKVO-MYEJ0WF-eiQ!5MwqmT>%H|@GuOVa{NBB+D7geJP67T99GR+sTAgOuo( z38F+-*08%0b$4O>GLI`)Vff0yZ7v+u_L|N$dsK1_to&HZt7xL7MXPp~!OB<72&oIy z=~C|7J4Q;DVeLHpS-+qHFbls@c zPsOJ9k^75GdQ^;*o>vv9>-pD(Kob=kIdpD znp$Bfm?SZ4X9v2kY|-Bh?UHN%qHYHsTD*5hiyqpJaR9qQB2w^tVeF{k3HK>a~Bq z?rWbNaOe!3GU;A&TggQx@kN)8)ewlPZs4$4H{M^EyXd3&i$66qbx=2TPQCc8mKtKr z?iOgs*Xp}G$)Gz8PZmgtu3mcyzY<~w6E3ZcZtgU!O4KTHcQIRCH|Xr4fK}CbQb-}j zY?XSe1?K)zV5LEcT2)%vovo4*Vu`w2peGvc7U;=2Saxl5pgRGps`I3fLX6oegH{Xl z;K&#GH8kDG&ZP}fzk`iKxx?7+p8txY8$vIedZF8VI0jsKu3Tg0&3mY2Rwr#hr zJ{wz`hQ_vabrwIPsm?m2p`nd&*cDSNjDTJPvdW-UQarhQSuN12vy}!VYGqq?XRD-y zSfcJ0=!u5A1@gR6_Gy*-1FfoV?xMfmw5%{-@N^$o6o!IPNapi5#NxL~ih22~?9IIf zC0dcscmL)Cty`|^KSmfmA8F1bN+8np7HHdX1u7+ zhBo!=XV1CxrG9%Kr{L@A8_i3II;gV_(Se3xo2OP73PvGib;6ogRLNeeq?nh#%H9w! z1y&lAXeEW0{8+1`tWt#Le|l1)?iOfX{wjOjX}DXUyO@*LCq4ZXu&p{>&lfED;+ne( zCELO!|5^HYVaVYZYvIu>27#!9I_nS}SaNW6P#7g2HgxiaSp2q0S>+mK_-AX-phOKP zT3WkuU!v|7XgEDr-{tOvb+8C9q2`MjGyDcLT);loAueR1H>M8B*f z3PYWBhz=|{cvFWG-`R*x-VlqwjHIl7rCQ@xT8RcF>iT+;`x14xz%`zjEq&453F~fw z?qYUb)r{|2z>});Bn;Qu3CBkx4&{l4Ct<{8GThF+hPwr}^k}ihue-ZZKf$gabie$Tf24K&jK;CLidq#w?lWkmLFeiSL{+!{Av5)kkBhGU%f;9KJ*}qE zG^R$@LZVp=EAk`^Lxk1bg+^T46Ae$oh|6TSoqLTk-l2c)+~3T-@w1Ds`#7yjsK&9n zidxk}?lWkmLFeiS)YljPto&{R&N_E~;iQ>wpE~PLX*G?eF*UNrk7hBf$dfP(5ms{- z8gXq;G&~6-E|cLl8mr^?+!J+-@ZrN&mt^+u|R0 z*kk|mW?reQ=(}lMLN$)nRn)2;T1f`2Oz7-dptdt?O={Xm}EaYwd*NqY;M+Q6t2d)LG8t~85yuZvBgB~F=4^*3&|G!; zNvD&~e`nh4_tR<`O=H@=o|0`Co@CIIq@WQOASr0X1>)Nw)<%di$IaOeQ6Q?i{`;MC z!BvH6v)?`atN)W$(`Xt~Ba0=P#o*&f7={R|xeJZBwkH~%gb|m?a2t&{eux?&#vC_i zJ4AuHy5e7o@6m7iq_aOc>cn3ibJBmM)ij#M)W{k?n#JJbNf?F*tGNq}xV9%6o`eyX z$#5HuIDUv4A;ugxXFEiJsOq}!I&Iu3A00m7jUy)hI<2PBG^R!tOEinY$CEG&5ms{- z8gXq;G&~6-E|cLl8gcv(HA0LzZq9ay0#ViN)O*^o)BbkE#9thF!f(=Q8ckzrWU)lE z7<@bl!w_LLccBs2_C&*zFyb;9Zle*$4^bn;nB(SbhbZ7l)p-(zCmBQ|o(NAgJP9K% zli@ZRar_W9LX0_X&UT0bo>ZMDVR({3G~$WyM8lIX;xZX-qY=jsQ6t2dgHm$eiGOec3G^R!tOEinY$CEG&5ms{-8gXq;G&~6-E|cLl8gcv(HA0LzZq9ay0<}%Q ze`BjIllL9^-+LVRgFOeml2+4b8dD>SC7Q+H<4G8X2&=gZjkvZa8lHp^m&tG&jW~XY z8X?9UH)lIUfvD=X-fqf)Bj4WppqKVJ_|>$UM$?!YSuD{k1|LttFhp3*U1-F$J<;$a zjJQmO+i1k`L(~W{=D0cAAqq5C-2o%s-fQqndk=Xvt)|g5rtR}awqbaZK~Iu`MqGfT zpb-~{Z--bLA;ugxXFEgzPpZz7Fg(d18u3JUqTxvxahVLa(TL-Rs1ah!adWmq6!4_# zJPE^-45ATFgeMxFgb|m?a2t&{eux?&#vC_iJ4Auzs@s3~+j|arX|ID`O{-}%jcNOO zO15Eml0i?Bf<|0`q@WQOh;N5j8zIIVH)lIUfvD=X>3ZUz!{6Cw$PWh``s1{kM$?!Y zSuD{k1|LttFhp3*U1-F$J<;$ajJQmO+i1k`L(~W{=D0cAAqv#i7XKdo#+y&vrT;Is z@BQo!eZG@c(`Xt~BWwI<7K4u`VHhH;<}Nhi+MZ~55=LAm!)-L;_#tY97<1g5?GOc` zs@tIBgs#1Qwr%%scG~H=w3O9u(JTfZPr@)nSj}B%#I-%q@Fa}5OorQN#PLJa z2r=fkIolx$L{+!pCKI;r{d(t}pYF2D^Jz7WrZF|LSfW`BKAwbOh_ITw(1>e$qTxvx zahVLa(TL-Rs1ah!adWmq6!4_#JPE^-45ATFgeMxFgb|m?a2t&{eux?&#vC_iJ469b zs?L)zJjoy$@kDr{;Yk>AnGCnlh~tN-5n{}7bGAbia9?%D>Cd&**0#}SLyJ0WxXE$Z zzO3U(2Hhtm(TiNIMuQTyPBkSOCks&{#F*peY=_53K}bloDwa&!YR=>U5FYX#vC_iJ4At~ z>e_c0-)X1Uw(9nct+)SHT5YRtPj%YqmGwKGQP4Zf`fHf5){*bqM4B?XOG zby1?_pA3{}+%80o5Mz#;vmK&9vFaMvI%?gGUtDLS?vjE= zhNalj)FdS?gGO~UxX6TfzYaZScU2cZYckyC@)gHNBd+1eHc5#m0*&fuxV!R)n8DER zgyZYw5@L}+162?cI%A`>V$0- z8T9FtAr=V~tFCeFF?zam4wJ)^PRPWs$;)D@>c@!_PU|1;(84>M_+ zS^+4G=8z1(*`sM!cP+3sV|09Dd#zPkcOS>H8@nYc!3iku`oai~kxb zPX$SddX=f%muOu>qriKQoOIeFFCBl|cPA}<$=H6Vy_4_!?Ub*5Jmv1c1aZRVK7(GJ zF9cJDKz-8_@qwqzUi6p3rLTW6@0W#4nx<9&3PVeXLMme|J|9xwSbW|Xc7GjS?*bt&Br*U!q?waQ=;dEzJFSVg9d5w|T!x|9a@|g#B`X zTx7~9e-5coK>rD;zi$$KZt)MD=ru}p+i&um1^@k@3%>u^ML+saCQVZ-0EMAoqL7+` zZz=5NrBz5&y~CqR!M+ZhBRY+&#YD4IZ&j7f)SSnb5?%Z{C0Z$Svg31KqF*lXq6Po` z#RcF0=S4sIB0)?4dg$(i{c?fnU(DUboUAtKl@o!eME9FAXW`q0*)RQT&Z~t?nx<9& z3PY?>NICKSavAQNp{q{C;#{_~Cv@)4K`R+|8txY8F6J*Uko^BvA>gh=Jvj$G$)Y>w z++PaZ(NUuDv%{UUCnf4`fu0nSy9IiZ!Fai{9io7{67}R9^du?noO6FEa7Rap#?KCS z&YqO0y9IhuNbVNsNe1KP%65nXQHkz<;+(7ADO~u&e|`1Gg-n{JRsae^hEYf%Vj5z0 z=L}tSDi-Imojsv*cMe*~xYKaAKzA`4u9@u0pFmWi114QG|E7SQk7Q-{7|XP@=M!sJIk znfm1CnKVtU02GFTi9#}m9o$}b&d^n-VsS3p*%LZ<=b)90I}LXWbQg1QS8@WbL?9~B ze&c4J`$}Qz6Q7*&&CfGwnpy!U46P*!sggx`c&s~T=&Dn(IG64037xxh&`QRghPws2 zi`m0#H6ghZXfDxnepEQ|@lQ^E>hnyRrd9y0;dvuJvj$+ z@0|Nf0VP_U8g}RGNr}2!peNTlcMJ3+gVi|^n8lqybBUh)a$(A2pPclK&ogP7S^>0% z*Hcn=hORmli*wn|uIXy^H|87L>aUg6HRyATt+Cy@+PmAab94^s23q!VDm>7ghP#Wo zyO`bG+8EhGfv7}x8$bKJR|_XS`N^qIf1XLx)Cxdhh$srlL#s+ca_0wV;zGk%iKYaJJvN-ohHTLppWPZ;kqYSsx)7slNEw`1=8XC_TkD*%O|B}XAuVeQqN z!ksg8)u~vV%XW50r$6SWv$*qq#~r-zrTs5>_JE7NZDB_EBt>(fk{rd9w7Lm)YR-f-az zU3DrJ=dzvM(M8va9%C+^^g`jN`~P#ygN2f9%)MV6apynEUQ6W%y4K(#llfhh09q1= zPS~9epLOgLg(H@JbmZNiX3{jZ0#F$Fe%^553|)097U!~^-O;VMd>wZF_{Y9De94ES z?)s!;JMyl7l)aEt4s@>J;9~AB=9X?ud_9)}Ja1Gdt?rz2e<^TBXLb9)*@`RP*&UrH zwGm%z$?Xs|+{Ij-%P+HdBH+mhoBMip=L}uRD|{*)a4wtC9i6+=s_eyKof>_MMKnAobU+R?r=BfyR$!$#9u9wY90&ZEGpf)Zr`# zbm#1@MBSZMB_A8s(BUrqSV-v?bo9E9Uj5nWu=ACl$lNkfEp~UF!Ti47-J&TwQWc0w zbmt>xO?a{}>W+^_f9=yunx<9&3PX!a_Z&=BtJ1-`4?p|3Z=~!jI*qB3D-F)q<0;YV zWX7Gd>k@TwT3KEO|2g{ZeIC9p} z4;O~t`qz<5{*g)3)Cxdhq<#)Y|Ha*Q{ms|!+<(2T`>wZ5zf9Wto%htdy(TOgv;5y9 zZv7}lWR0dVHL}K!X31oMvX!u$i)T}+-{r`EiTZH?a_8)>MBSZMmS^ZEhu`(t!B_uQ z@3)QKb!&KAuHLt+ckk*wyh?lYe%`e5?=FK5ug_^Mo^e7DsH-pjJ^F11&m44XVeiX7 z7_i{uOq!-v0189FL?NYxS6AOwLvG0)+fj1Wh-{xPy)XaY!M7E*7%;8E6jXS)y9~O!K3BM8 z4i8HpD$#8ZnmJ@iVc!KG?0@ygnKVtU02GGwqL9*JTyYK#I(N|G&-R}8#{pM-kYU?* z!C#BKSEY*FG@3@va9x^Owi4cE(7BE>nBx*ntJEtT$Kj>Gafv!Pt!%D@x_ljUd!f_8 z7wGq;H?%GO)^uZQqu;)+AGWG6U#lPPE`#o_&#SM3ujE*uxkPoo47l=x{jT~rlcuQ^ zfV<}njhyWQGf}PPq`A+ay9Ii3dGX{@P|c!EYc5Y}!(9eFS)eCp3SpEj;I2fi&SiJ? z?8ySHG(zm0`wY5UVA&^cx(9NmlzrZLQXB3v=*a@pEqF$&zJR+DwK{p-)w3rHw9*K% zbM7(@9VXG+=UohP;7E`y#daE*1#7XuP#E>Zow(>_;xuu;0QD z4!GvyOq!-v01873i9#xSMXMa>$pSM`t>&b;&!D>nu2QjC{gX4L?DNHw+HjXaPZpTf zslmKy3Dh>dA9j;{&+D_G&|}vB^t|w|nKVtU02GGS6@`?u1!kgJ%}H~gL3ayGtJEtT z$CFDzHH$W_xjd;2cNz3#ffZIbhi5Jjm1u{(&)fO3!Vc%YzvIjgGijPy0VoWCxOm>k ze1Vy$R&&zaXVBdOGrtH#0eEsLsAkcoHJ2x~;Vy%oEYOoPg)qt%h)Q(hea`DKudw5J z?{`1{!%Ui{Rsae^3vuzhk@*5MQLW~rxzC`x1(tpCrhA|#mx5{*ZCZ1AQXB3v=*a@p zEqF$&zJR+DwK|vG)w3rHw9*K%bM7(@9VXG+=UohP;7E`y#daE*1#7XuP- zSE5!Yue*BoWPw&1A$HDv2Hh>tlgkBXO4;X~C$-@&gPttVlQV@d$`)`}qE;ubyL$Fy zfmRwJcFuhU-7T=}lQ-Q1IaAhf-p%|=_n9A*Y&)L&#~zn`vGLx;U*;b%rkk3Cqq)mq z?u$R6Fx@H?h)T5Mfb)9JFLa;r{!X(#%%o{*1)wmroODlEPZpSoYBeX#eFohvu)${Vz=Y@@17=cNxrm@mo35 zxom-`L^s;&yd5ttY$pSM`t>&b;&!D>nu2QjC z{gX50|36ebIWbp@lS4d@=NRY8n4{d)-~oYgSjvMtWwt6 z=B=$O{yqA&d!MuMw8DlH-`nVfKWEZ3wE|EW3ML9EtweaTz)V!DIce@Q=x%{&m3oEa zaHho1mklSryYXp-b~~S3p=vb`cbCE37k@R=)SBmtN_3q*=WKdLDe?2AnC|I?b^FcGw|(jw*VX3|t-;Bk zn77KQyA0;O_^q7jT(&@SiEc8z(BXvlHlF|a95)7legryyL$Fyfh7e(?~wZpx?5oCCv|xPa;C)3 z!4T8!E`uRzly??zlv9BfCEEMUj;DUM(Q&`)aQu6v+X;W_F!_HwO!{-_rf%w-U`$P| z0M_Y!rWPB8l-8=7&%utT6*f{NNy4U&y?|^b?C=$_{FZ21rC#AUZZ8G)73Jhq_27zB zVVVqwySvu8JG%|bVORbHYU|o+QS0`fv)Rl-$5a2MA966Y)0+04@{diXyuZnb|GUYF ze>S%NEp}69jTs%-^5B|U0VoUw6NQu(b#xA{+xMK!&M0)8{GKsj^K#g05|FKg<=m9P z;+vk*`pA8WrUg~uI4+${l~cu2(u*rng=sPz?(SOW?(8-!hh2FTsMVtC*4eyq)BX(| zdpCCMV``iBFYeuKVdJ>Z8%Mpx^*#9&f@wO>o^K#g06e!vr`yV+M6W3&(S_W(KUZUwqRW_0{XJh45@09f9id0#W zOh-Gr*10^pO$%Zl0ySMvtvRYtGyK16M*h*%)Ir_UIopru-nYY9HAnrYX87+-0h^b@ zUbBE~B`jxsr2M>LUqE4%sQvnUIU=F6xpJzu*OM!fyX3jM)_HYyy8~q8Dhbr;WsK6T zzFo0T_p@t`{!h(_-`5=WM^jS=byH^@5*=7_il+aPO?k!9Ik@9liDEXdh`k1ZDBW__ zhm+@x{FZ3S6<^_S4x9~TQ_WqTT#+iwkKu54*E;8Cw_#Q6YOMlR_3TNBTE$$=t6$FM z3NhWD#2n(~B*fDy_vv<*l-$#Wcn;=1W~+Mkq(rS^&e=0SHJ1}&x;=?G#Op?gr&aFL z?Jg;~rwj2M%zex&>iNu?qyAkp{C71Y-!nCJP`4e6Z*g_=4fbT*Rxz7b#9o6yi0Squ z=46HJSFaFHtK6sCT~cyS=hxXqG))3gJ@0gW&9Q}=Q6JWf{>0SOLEY3@AJKuCC|bpA zUJ-i@0wJc`lbAC(FDjfg#M3JG>2{Zt+|yNfI&ioPf#^>yZ+lG5;FoF!JY2Ky6Q-sP z>ZZ>6$nI}6ub4Vv%;pub*B}sLx;=^6#i{CgOsh+Qp=_$TEBEPkmz3PoxjtVQ9{~gq zKmY**5J13Nf!g{S{Z>+a@2+%fTcgfCd|1SsWL@-Gqd6LAqTf zr4`WG)<69bKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmdXC1nTSR+B7z{ zX~?uSHY$wt*5u%B8B zUp8w&CQVZ-0EMAoqLBO{N+lAUQ(-JQ2+k#m=zstM2xKDA*wCPP&lxqL@YL(?-u2A; z_dK6T)6@z;VJMg=q)as2O^UNS+xW;h$2HhS009L25s0qO(}o}Y(X#Koar1+}zU|RW znx<9&3PUnEe%`>@b>&mfu7w#N0R#{zPawKJpElx{k01QOn~NX*?d^|e(loUKP#9W8 zj-NMhF0V?HA4NSUx1uKk2p~{R0j|&0(Z(6)>Ig6k0tg`Br+`=Y!RaH$*45UwZEV!% zQce47{UlvuR9-oU_lp4}W>f zBX2EvB9r#!EsuQi@DHaB9i5ef>v=tKR*IGA(?*WfdZUnBFFcd+RY)o)6;&q1tVvsm zb0*1UQUnkPR3N(PoI32NzuxzqpWpDnuWo)QllI1Mm3l*AG#8HwN#&%X%A}YzX^75& zUcm?(0R%!3Xsj>3A9l)t!{51n*$*$i>Bn<#&8od}$>LuwxcluJmcM=dvf}5K+gsP% z``O*kopDIUtQ0HJN_TK{O1F}()Ef$;xp-7aDyOU}S@VYI?Egtbga{xI zv_NzpJaOQNcW->?<+-=~Wd4$D+PvFeo4@20U8pZv{PHD>_1VzAH)qj*U3=f81BOXH ztmlo)ot0uGT44l7r*tdnO1+^lnu|w;q;mSnyxX%W=J`uPbPoDDM(_wA;J?7i=Z!@V zzI^H8;w9Sqra0eS^k9fL&EoS$rq0k+r@TXS_Wxo!t72slCoz#2c9O8Y@6FQzZs&l3=3jzq_Rbb`C{D$Q(Uvl$LF1yYD zra0fdVR@*pr)263U3JPkMCZI-;#d~~2zVk8J#S1MH1fTh9{$l~x4w4yQvaLcRJ4j& zhEe>UU>d^k#2LEkly`{EhU#S(0tg^bxjf|!4qfbs#D$}I=emv7#{%yTDd@UADr0#z+YT&!?V*a`OfK=`QH?$qE*bw zU0BZ>nL9&Qo$?ORxs_iDSv~>?xE5IPys^i?H)k(;?zBr^JY$~!O>rvPiF*tbPGHX) zSvx~lo$?OR+4ZG{@ex3vl?(8^QJn(t#5u(KpeJ-z4=N!#SLZ}v76cGzwE|qstCM<9 zoI|`1dP2wZMs>~Mm3sf{QxSUNoKdkeEdmH2um*vKx_W)}m|gn+aMA^j9yRUBV@?mE zJ%04`=O>)|(&X7MO}e1?x#jlV<7d8g`W2IU5708B#jZiY{g*s(R*IEqrP~J$B}J)G zf(+?vPO;Lhqz6%)3epp2_jSz-2q1t!Qi13`IJUu_fD8~^e($gB=hHu%$=2DC0b$lprNEFHA+y)B&vhbt)zcr+?fH? z=lHWcaZY*_pdSJVAmCnL<@3gr3m-dXdhvRmuck%4Jmo@9?y$w@jZB@fIw0Ko;Q+8Ro2fFXHV{fo@lsx_VC2HvYO>+1Q0+VO#!a_X==7SmM6}h+y_0; z;CZ9vf@Kc^2q2KMKy>A|dL=!{tL@Ew9zW*v;#Ga@8CkW*jy~<>$+JCrJ!SH2g@lIc zxcKT)rW(a8j5|{$+FY(_ZFuriLn&V@7!Cmh5U4;PdfrI-PJx!+2C{~?7)&a@ZRCZC zGoBoO);Etm`>BlDYPjN&ebJbDuW#_1YfYrRTH5rra~|mN_#8I7g7F6cX8wx|gD5Mk@Xf;%8&`=4fkW_3@Q5mXEWvSv+iK;fDa`pCXA}|CH zKmdUh1qOH6`k_8UZ{FpA+j|U5t1aH;fCu{=I((DPinF0MyWhXjG_}G|FbXNH)!B}d zdkqzjN=Sv2Vp%d20tg_0fd2w|Utwciy}q%~Xl(838`R;j&AL9+Z`dup1})k3ptPDs zduX@eBR1_KtIVG_6o!IHcY#(=xz{Kzu-`BhlFBJ6DnsElm1Xf=+y0+NM2G+a2q2J( zK=dR~ydCR#qvyaSy#}Y%G@8cr=y@aU1zJJnUc-|GrgBm+2m%NofI#X3Ja1S%Hk94j zliP9b)1CSW!hi@MfB*ui2;}|-3AOsCcW@XJfmi$AJ&_9eUWNT^ed@+vz7sYHLfjx|;M~&|mqy(RZjqGRN$0 zucm&e?@)KIE{U!rZ*wA)6s0DSMz6t2cgd1a2NjP>NQI;mAus#D=PoG1U^d53Y?;%T#?bclfKf3$KgEuYSfHM4u7C3UV z?H=BJghDdM>~627Rsae^6q(q=r(gL@V9Jl4wf3p*B=JDj^k;4-3q&-k2Hz z1Q0-AjRMg(6gFsV*KOSmIhYs^E|-{Nas_PTbPzJ`FE?$Xo> zKw&7DD5N!}ql_;`T%r@87!AnHiBM9M8YRfQWTjY%R=Sn+DD{T&Q1PgQR7hGv`roB0 z!-Yc-KmY**0v8y#ZpS;f>bG#Sp4V>P%h0adyw^3G^}KP5-nVYmw`99%%RbAt-D6n$ z^l!(}&Hdo7Y=H9A zDG)#a0R+MoSaEA>zxkcp^uKD0-q&r}C#|N@H0HtWHy2JcOIk|qVzyd)hzoQVb6Uw| z90U+R0D)WzMEC9?Yj3o)WA_Ccb-kuTYE7eQOpPoz7tb3mVzyd-hzoQVb1u&g7KH!; z2q2J_K=fzjhi=j1zCDj$)aRJReaEHMG@8cL$O<*xKVI)HW~;S_xIlL?r&W-Qg8%{u zAdpLehK4p;*Vti~{NRDYBR3YFxFxlw(KMz;*7(sZX#u*6*=qSAF3?@fX(g9&5I_I{ z1ac`5-Mfz-eBO(cCaV}5I_Kdv;;!DwYiHq{y0%`o9B(RijZ*-KmY**axbv* z-hF%F!7Dy|^r}zNY8vgkw>y44CGD84)*j*l-Nl^yGlc~rfB*srR3Z>PZya;*tnc4Z zczEGQk6-&~T1}&AOpUDYqFE}5Gk&bQn61_x;sV{p98VD22q1s}0tl=k&`@7|KkVWA zp7rFFpWiX-_g}m4k7+fHrZF|L#*b!MW$Lp3=`LogwTHMscQKcpO%6l=0R#|e4Fb`< zd&J(SKQi}Ux1RIcr8C}6t7$ZisgcF#;(5bG%vNg;ae?k)ZVe|3YeWD61P~}&AbJuQ zxz8DoUiPos&VB2SneU|4G@8cL$coLy^M;F+@%ser?UMImb%<`qhwXD_ZEam+Lpyyg-D+x+_=o$vQCm}68sSSW(ItP8 ztLZ0CO6N`~R-#?}P)(A=(FXwp5I~^S3PktrBln;2>{W%Y&;FkW=6qym_s{vO_Nv<* z=f893`R|(B?dSd1!-ucNLw>AUBTTRwZjqlR|j zgvYdZ;Ylyuao)SPo&8_8pZz;STYToPAGqkFV+UWhO~+ljY}#9&O>N_y)o1;6Hc>G8 zCV-hYy15VEYx;v<{m0@ne`Scl=`KyJ02GFzE&03=ElLY4Qf$1liQ-Ex(FstD=2a*W zN{5o7)IS*@7+G_U41sR#i#u4p&9=kv3t|^3Ys2)46AEs>TuAmC*FSQdnLm#L|EZ2 zO|1YFhC+=(DjBmDsAX!g28w1b(FstD<~S9G(xIdnW@i@y2q1s}0zL@T)zvpPwAFv4 zn_Iiab=2XIzNaib?T-sjc=ejeKQ*;UKfQMH&#pS*#|tL@Xu-r+nm%h|&29dKAKZG% z?+5QXSsDrN-9vg$T{`_w3r={&6oWa!%Jyn%1)wmJ$E*cvnOba14qtw~$R#=fUNgyv zJo%?egwmm;C^b=n%t=(Dm2MxZju;R?009ILSffDnBv8E3pZ3QE$G=j%6{gfQn#Q!c zce@C~YB`?7Y!${D)5;eSKmY**5b#QX=Z*LSiPeqX6FRTTiC_>w009ILSfhX^H%)h8 z#2+V0Zu7jc#v(^7#4#R3Wp2Tbw zMui2y;Rqmr00Ib9K_GhGIJnPAcb@+K!bv~AZp!OvHI1e*HL_L_&0<)NyD+Sl<4Md` zVHi}|g#ZEwAb@};0?}`5IAF(#*N%O2&SB48a>R>iHI1e*HL_M(^7lfx3&UzTp2Tbw zh9`wY7ziMM00IaY1fm=Le%+2;aOBS}IP{wr4SO!FrqMK}M%L^JpEq2DVYM7jVzvsy zkX&{lfB*srAmE9>isy~(CoCNO`s|@k&l&!FT1}&A%>A~Xpp_D0tg_GOMw;78#^3#)tH}OIP96Pj(8!h zrqML!emfi|w`djvpt~@vmg7mxR$&-a*@XZC2q1ufCj!xpen8jpmml_%nM0nu;NWM{ zY8p*rYGkc6;q!)zFszp2Nz7JZcv47&fdB#sAb@~DpuV<2dw1XR$eH^*d-87gOxyi| zw3OB*N3&!ShShRBiPRLt_f6k(d0I`Q zX-ti*l_q@Na1n;pay*IIDhy8wi7*gA009ILFbJ%C-q`o~Q~TdHeUIg7HH|iF-{-BL zH_{HnYB`?7Y!!wfx$Hs!0R#|0z!L$UH{uT@RyTT2=sYPT!ax841Q0;LAmGVO(_I+x z$BB~LJZ~6EgoK$U|Ms*!A2?&Lhtg^qO=D_gttFbpuqbz7SS`nsn61Jv zsIm(I1Q0*~0Z#<#n%)oFyTgcSJ3n;X_O~3r!;-X`M$?!YSu2fZF)Z0#7*@;iBxb8H z465ux009ILK)@4$=tkdbgP~Kq-9N6=qGLNRPOE7&jj55f(uB_&F2b-{jwdl&h2cpd z5e5PXAb4As z3jqWWKmY+x1bE(vKag16=sltHq>u;$0R#|000D!5CpS%ZVZrCkeH=kNcQQ^U7a|P&#^TnCM4e z%1%88B7gt_2p~{3f#`Xo&qjw&-|>kPwp%*6>)j>W@m-fr*zT6&w!78bj_q>O$vZ6T zwb5{`C7Q*ss1=Vr8x7YXI?z0_yS+|h7Mkcv@~VRpp>!xIN$3o!>_Pwm1Q0;L6M?$g zdPUN0y}b|LdhWqnoO8$)GYsv}EoN%(5nIh0zs=&YTQ3^7^^Jyh%+}XU?tD*=^$*qf z37IA!>~?wxr5}|Y`DNS_61o43Y0tg_0Kx-4|(y;gFuiSX( zx|a-F_cB9Mha)v009IL zXcnlgsjIJT)OR8Ddp-@Vp|-8|?$~bdnDuWQ*8Z{)?dKcXu=aDutbfxEZ3k+WgwGr5 ztV495VOXcT+{G*|p@~j_5u?GmDG`lIN^^qPKmY**5I~^y2tKm2In$4U<;5%U#S?Bd>zPKM_Cx0R#|eRRYmdLD!mn535-)q;}RJwHF$i zI;fjEizwmqM#7N|lUBIPUCdS^x2mFIu?Qf500IcCB2Zu7sILqdFn#{K_h-)d^#!wj zXK3o6ZtAQeqm_ppl<4{L!tu>Tvj6+CarLnyO^y;HbAip0R#|00D;^KL{9|+ht67b-+$)b z@Yne_|HIJKLEY3@ED4`C5{_(`w8CBPVzwGN_l3j)5kLR|1Q0L?ta#oSHtWXw3v(BJ zG=K4@hNcecHgK5D^G33f4U<;5%U#S?BO6k{E(8!j009JYFTnFgJjL!b;#aCe8b8o9!6Vi*p$`Ywc3%vK|}wz^`y2q1s}0tmzf+}&ZVMm9V!RJhCPslX~` ztC8d8Y$JdG0tg_`+63I)VXa24@S(zRxYbjERm@f+x3;=sy$B$H00Ica1>D_XtwuIH zFjTn9>Z!mgW~-6o=4>N?00Iag(Aost-C?apuJED4aJbb|fmO^_Be%A?V!a3;fB*sr z#0A{lVXa0sJTO$a%j&7XDrT#ZloUBY*$`2q4hf1e))#i|#92dc#Na zZvNEJ)Ir^Bf4^vwkqwhpxXWG4RwK8zx?;TuAb#b1$f?wr`VlFd=|D5 zKmY**5NK@z?(VQwBUkuM48!48--WP>*=pq0R#&VS0R#|00D-uGyF0Aa$c6`o3U^sO z6|S4U<;5 z%U#S?BO9RDg#ZEwAb>#b1)`^dzI&f})}{ZRa?XFBG~*A3rVi?+&SFXUypeEZ!=x4N zau>7J$hj{h7Ki`>2q1ufL7=X#QG2`Zdg|DdKRRr}8%G@XYeQ29byH^@5*?V<$c9NP z+~qE2tC0;*>_Pwm1Q0+V_X5#l!%n@YO*rjuqmKW@=t;jZG<8rnbrws)=Z%CT8z!xA zm%Es)M$Ua9u|Nb6KmY**3hG6dh>bvKrYiX@$Go#cVaQ0g7D+Ab7J$Ob5OA%Fk^ z2q2Jqf#|7Vt1eUa8}|D>2mWBs!LOLwz#piaI*TRY^G4E<&GS~W*ImpuBj>)5SReuj zAb=Z%CT8z!xAm%Es)MmD5?T?in6 z00Ic)UV!I~c#7R=#Ajg}0R#|00D;yf;O-7MW(`Km(W6$c9NP+~qE2tC0;*>_Pwm1Q0+V_X5#V!4{n+?S1g?cH8fJyC3kf zp{awqsk2xTK5rx(*)VB^yWGWWHFE9?i3K8n00IagU=XOSE&e_F4LTmXUC*Cw+x?rJ zx<6-V>Y#4wtV5y$(;C?@X@$Go#cVaQ0g7D+Ab~V3U|4S*=pq67ZM9Z009ILK)@i-{JgP!@7Fu;{B)OHo;Ngg zP&eD>jU*!*CarLnyO^y;Hl%=E2q1s}0tn<@fai^Pirs0%XJH!w1Q0*~fz~GA?hb1; za)sZ-FdT06T?ng~twwHbb;WuSKmY**5Qqyj-(kD$`g*6Gp6Sp_TN|KQc zlUBIPUCdS^$IaPB009ILK%lh=M9&)=ZF*eyes65omIYg7T<5b>BH?eecad{RyTESVksVI{ID9? zJZ~j?-NkG*vXP3N2q1s}0tn<>p!ihK(C(o04!{=@(@4(0R#{*3KSn38rM2%oenRqz2Wk;H+;m{maCgOHw~ERc_Z=2 z=6NgG>n>)ik&Q`UCjtl{fB*tH7vOm#o?v$x@mbhL009ILK%lh=xVytzjap!if!TR*zK-ShQr@2zjU%-HT#H+60zN%Xvtcx3au zmF#sFv(?BsFC&(R00IagfPg`uwzl}#u;Eq{x8MJ@E_*(=-Co}@G<8rnb=D!#foY9w zn6$!O?qaqY*#N~Z1Q0*~0R(a{P~X@_YaBfN(#4+?=Krd2Q9n?*obx3re!N+Q3 z^SqVpbr-YM$Ob5OA%Fk^2q2Jqf#|7Vz@&?=c`o&-3)=`FfB*srv^D{EcUY^DEBq#g;c%<( zLRiIYHF9gKE7pqu0tg_0KwO~t4!hv@g$sW0uZvzO7@9h$o9*iQn!i{_Ou5nmVYPI_r?=K!cCf$c9NP+~qE2 ztC0;*>_Pwm1Q0+V_X5#VLEo{n&wjZu<*`pr`o`ymrVi?+&SFXUypeEZ!=x4Nau>7J z$hj{h7Ki`>2q1ufK_Gf;=r?ZmIX^0#`1mI$KlQnxse`(yvj$A~ypeEZ!=x4Nau>7J z$c7ZK3jqWWKmdW<3-G)VPq90V_$+KAfB*srAkf+b+}&ZVMy~Li7>2{Gz6)U$v(?D0 zt*%%v0tg_000MCVcXwE;kqr+F74EWnDzJ*#YUH>%+Xx_l00IcKHi764yW9BL=e|;y z`ot%veDiZdQwMcZXDLMo8n~=RHcVRKE_X3ojckBo7Xk<%fB*uy7l@t;`W!R+^zRo= zc=+#=AODx3se`(yvse;7ZzLSqFlmLm+{J7)a_$R>1tNd|0tg^r5U6YV{Ttm6n>FsS z!eO_6bi|#X8k#z&n>uU2=)kl_HcVRKE_X3ojckBo7Xk<%fB*uy7l_Pwm1Q0+V_X0d`#8d1}BR&h;2q1s}0tmD= z0e5#;tC1`GCWhf~tM5Ws#cVZlYpW~PivR)$Ab>zzp!p6v{_(=$OFkNP*QbW24(ew6 zdP5I~@{2}I8uJ0CIYxNj7Wyz`?mU;ot5)Ir_USxV7? z1}>|S4U<;5%U#S?BO9RDg#ZEwAb>#b1?uXHe~-TN!83>6RXFhKzYMzm?}nxh>ZZ;* zBs$RGV>Pm2(h7IEi`i;q0~EUuKmY**5Xiki^i;6T;F*JOE9`T{2m3Dk*wEBL-PBnu z37oSwi-G2g~S38KmY**5HJWtj}6-%H1nX_3j?nFV85$AHZ*lmH+9y4 z37oSwi?-x0(K#Q00Iagkb421H{vOFrxBlpZ3GZN009JAn}EAJtkuXB zeiOrRxYc(dtYWqrxwX|5>qP(o1Q0+VF5vDCYc;arfuX`(R!;?1F@n|u_qyV5hNcecrp{tX_`H#DWW%Ht?s6Bi)yTOoBo>GO0tg_0 zfI*

0&HP{`8nK!fz_&_Y%F_qt6G&j@E#uKEScVl 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 z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd 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 zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) 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 z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j xD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jC@>)c{~voSd)WX0 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA DK 4x3 Black.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA DK 4x3 Black.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b998d2c516f0b84370a661ef0ec39f12399e9bec GIT binary patch literal 1555254 zcmeF)2Yejmoj?9()g@b9vih#JuO!=)U~C}C-S6&~_RA&z``_;_xim~dLJ|^EAP2S~ ziAe|{5UQ!66M8UUaFf;CCAoKOuyMDsRd-j_l03i9GqXE8+Fdm_Z20K)cs*Lp&OY;= z_MNBAzkKcTsyrcoF2_F){%wlU{+UF+d|L?oePx!u?00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo 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 z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ 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 z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq 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

a1x_ReZ~FjMHR$aOvCJ60=k z(})82QbCc{T&>0-y3|WBUkXuLkrm^ddBN?b_8Vkr+>Nt%6(&&wG|bL$#=oZ=_n`Vx zFU2ong?T4_?8QcNh~` zWPUl}?9ChW;B=wSb{;SHVqxAL23TVSH7~OXDqD8TN7!4cPZ+k6@_LX zjeFnzt!U)Lm}mF79?XN9mLEo^jE^Qjz1=TU$s#{bd1e7kSTsy~*)DLarqy<{k(6I_ z?(3}m#&}xQ=4J1!mIsNkc1llqGs%qOSxQ!|!k%0M`eeOj*PAeS`ryVKTp_y z_q*T43p@&Ns;4P{208JC7hXW89s(t*-ft{L*Td+Paeh|zYlh9Va+;r)*fL=WPBJ{< zO139r$^6)$UZ%!01#Z=}YFgN2}$oaGNoQTE7-uL*HceDMJqjAI5!`ZwKU|1 z*AtK&^+Xu=)|7$H`YV})c@HdoB=oB=SX1hF&TW^H`Q?PONlQCMH4H2}JeX-u7y4}H z@p3OVre-X;dmx<0J}uXQgr{_XAN-3)%ujVn0L`I+0y@zgc$cCsT2W{Q(ngb}Vxn;i z&u=`8PU+?6;~t#m=NvFw%6Oa%AK^;oCsfqSG-jFtw`y87E$mfdIbS{O`wgDnMfmBN z=@j&0!6iB8EYyn)g(&h5n!fTkKY^X}TeKyiaUnXD&ph)C!g{)WZayeWGuO$`oSSl^ zih#`ewWjc|QmdMCr!ooi(2S|{lDnX+HDw1nC3BVux(jG3P|38)eO*pC59i7rtU2rd z+HhR9>JsH%Y{=aMGnU*v5YA(tmV0xM8{-og9N>V6vm7~)raC2nW}+H9(UZ??i1|{~ zWj8egX`@L~G11U|qn_R8dN2=aWBK87N-sYj_uw=?Z{(T9a5^zbwx^QJPpGJuY0NYQ zZq>AETG*?^a=y|sq4OKf1*q4&SwEgub(8Fu)v^)`&q;4?sFwB{O$~YiJH6C~Df9Q9 zbl=pLD=()x_o4?nH`l@4==iT&HWe?w{BrI{Wh(g!fxvY+;pl>bl1yz6H8;*V+j+b^ zj=HnlJ&uhg=U(Mt4h~|Yr!Cj-(_DvWcFG`-a@V`d*sT3VFK?XX!91v?^26nndUl`X z!CLbY#-{Kco>ogULUZu(#~)|0fb&w@rtoxH$ct$y8UR-Wn zoHrQgL=t&5)Vs9l3G8}KS<##(bj|b7kuSQ=dg}7!H0Qq5iyqhBJC`3aux z0-6d`@)ZKX>T<%-g$md7;1cJ;&VwI&QFpGp2eFaIJ}r;uU^6zRIwi0}b1y^-kJN#* z(WI%EY`%^Mi$QJw_^>!-kVOxAaG-fR#-`+*oL1AY&jNW4vis_--MPuMJf2o{^QLPy zRo2D{deP(Bo5t@(H*Q!A>T<&MpkmZT zp)e^oJm|sbXuvslcS?C+^T3R;BMQUD!ZGSCg+g=wc(9kOswj^&58^?3wv20^jPzf@ zg9VW7AIIpXqaJiL*1X#(&4yDuw+J*f4+c2>YD{2@Ng*@n>tHXJ(;UWA5L@1JO+>y%lFX`(2 za>99ZwLR3_63*GqYwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj tFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkryIJ`jl}2G{@q literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo BW.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo BW.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c938eca01a72ca289976664a3b01802f89deb756 GIT binary patch literal 1555254 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ΩfD$uGftV5^My(V>53Rn60`N$8-!Fb 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%0AZ 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 z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj oFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|xE`0Zz5Vo&W#< literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Pixel 2.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Pixel 2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f443d1223485cbdc5c665bd5e615db50b4e10ea4 GIT binary patch literal 1555254 zcmeF)2YlOP`Uh}RxY|iKU335~r5qgV&mDX3ad&XX-g}iY4k&a$_a5n_lu@A20^OyB zwzSZ_(sb{=vtv8Uu@lGR{r{xbR)kk<#|a%je;$mY%CBC1B}rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP 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 z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC 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

tRRS|M`OMXQdtVU7%gd1-xX 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 zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t`!Rf&UMJ CG*OHI literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Pixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Pixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7d5ef61895072582b7720af82713fddd76b2c864 GIT binary patch literal 1555254 zcmeF)2Y3|K+6V9@$(C$rUOz=aiWC*;y{H$#g7sc2R=f%}R76oxL3)+mLVBTuB1J%Y z4e242(0lJKy|?-PvuAg+B)gm4%_b!9&-0RJn9Q6x^P4j>@17~!8h9e^nF@$)gnt{5_(&LibOMP$;DHDh358KmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF 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 AwEzGB literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Saturated.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Logo Saturated.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8787f2c0c7249fd635292d20b87bde8d244f8e45 GIT binary patch literal 1555254 zcmeF)2YeJo-v{u!+r0obtaJ#yClnP>v6lx>AM2wch)ArPCh0q1WUXe$i*RE(D zdqGh^Kx(L=*HqHW<>vj(PIB2?zsn^M`Q2xX%az&L@9gdTcV>3)vTOT%+t?x>eehpr z{P&kl{b#i_kxyGJc>UK?EXIH835!MSj$)z!1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/MinUI Next.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/MinUI Next.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6369dcb17cc8871ac0a546a3195250f53b2d6be0 GIT binary patch literal 1555254 zcmeI*3$$EiVJ~pb$;ml+C*(;Il9PlWga83~4u%egEv4+552L_rGVxcEA6#fB4_7;eQWxSN_+v-44Isyxn$T|92;B_s0J! z8~k4a1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C+78uhr`K?pmv1-T54xfF= z;_Z(g**$u2MUEXgZQrS9tlsg8BW7<{H0hWTUA==VXTY;2_3pUev@?&GeaVrtKiHE0 z4%*>@{&7pU+pcTCst0vI*ZlD-4x4rHadZFTuvzb)JMMr%6|!AVci$e9PYk@FoE0+nD3$ek^QkcfHCdK!5;&;VTgCMbu6l zmF0b={;#Hb)Z0DgxVay#FK4eQr!`g1fCq6aoFPB<*1uA%P=->=Bo>zs$}H|+GMg@I!GzW(fQQ?xd3WM`YSzU1HD><38$ z4u*vj4#}u}$&|I(C4`#^;R~W^C9GX=^XL(ivP)?B-tg_>wDyecncDK|6i9#o0RkN$ zFvPsk(>?0wIajC6K9%jmC~urR|E38eXSVjThL0GIZS>8SKcL;5eS;$8pFbS=|G&^% z-4cEc)Y{hODNWwUqvRL@1PBnQ6&PaPSUUaP)wwTiVYuXtKkEO>HvQaVa^L(@=6@>9 z=Y;-Gq}`*~aqL^u&I;R)ne*Y0_iC?ZoMm|F~pmw<5a%=e}dh3&g-e{600ySlo=H&-)` z-+AI;wa3R?mN#N*tBU{u0-Yf+xV#Y_bb0igt1@Q8+FkNSWvGNFaE8Za)XLN@haZzp z9ksAJsKRqZYxgFW!_!dP@m#WM?b!?RMz)W=1PBlyP%kjJym7$vKTgbm8LRR}m3@cN zi^DHU(yYQGI(tWq3kQcsgsolB-~ktv6T@NQS>n|)<1fe?@y*ppfB=EvE-;9^k@4)Q zhBK+WQ9DS&t410sRW=^9!@5x;CS=_PS#b08(Yw|b7=Kybh;Ob&0t5&QcY$W}M)tF( z8qTEhM(rR8Pf-gm#cK#v*_e1QN#e-ewm-hMv_h8UjY8N}N`L@?VJ*;9-U!d03a?;G z%zy)~${UFh66Wi{y#l7;&sY+LM_83NA|R`R009CWCeT#g2(N%2FkRFiAaB%k~6zb+z^p+`}$!%pboZk59Xg$-Z~=2KCLe z#w=-fGny)2-e`);!2}2pAP@vH@)T+fEZGa$ zubZ!eXS}dJyZkool{eZ1t5^aA2z0POM&8K&r}sfStgn4#*f7c)A#6*lLrqq0zvCw*1W63uM8_ZZ-kow;n^D5|Ap^t z%p1SF40kr(c-{QPwWI?s@3#GMB^h1vMoBJ&W)L7iU>FGuB5#B@oYucGtnj?CYRAil z5qro*0|t!50S(y;>9V|02)jxN5FjwD1qP8f7EL;~zRU7Py-C`Zkk&HZN}q@swX4+^ z)~A&mXS=)+$5|}|2oUHbfoAi@Av6DX*LL0Y0`f+^Ny9DSIb&=3KVF+6YL~-Lepbx* z)7mYG3%=Z)|Yz>Lwmr8&qOX)?9j7fm{*HeDo^ zt3N^s6MDu^S5BG#$?f~*))pIiS>A{Yt~vq)2y}oz{=BjK_G>cwD{o}rRCa|Q;f5F6 zB{D{JHSv&*>_>APGv~tv{>nz)81PyO)SY?L=5Agh7^0RkN+kSA~a{-54Gld?Nrc-{zaA=!88 z8H4*T%hrMhLwl(qGRzwyHQ%c{rJFZ7RFR)1EDwsg%N zyVu@R-qz4_>GXHkH>R>ByzQmoDSJrdP*~=;}Rq=7kvz9`vqIY$$x_ zo=PA~^yaCf7Ut=1{$s+Y4=2yRF>Q_xufrQRa(YH- z3&tOmc5c{y=&Xw}&K=yYa9bmz#v$$sH#!E_DrXTOK!Cuo7Rb&UhtIyGyK6+A4t7f3 zxaEN9XXoi}{$s*VTr=kAx#JEPu&8C3pT&fGAOn_=|A6po+>_?rkkQ~F?h5y0a*n9{ zZFVF90t5(@Um*NwB5ei__T^zwLR?-E_o;%Lx2DQ0>e}w%rD`4 z3yr3dTwmL$_Bu==r!Kg;zMSyO&FV2NS(rIy&-z+gxFvkCvnB1U77~6(+^~5^&AGCt ztFL-k_Cm&QX(#p0$v(HKz3y)`#pPfE1PBnwFVOII{a#Z}&0j+0$OCs+S3j}tGHG?Q z!hO&nEuDhW}MrC|E8Z48XRIwZ56Fu4&Q{?ZTsWHcR3bszh-RD)Ik>> zRKxv;(DCpVm7earAICIbU03*8NZRu^8a`nodt)dnJkZ1QH=4f?&LBX5009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z0D(8VKv!4S)TvW<*=3g%D^{#pwQB7fe@;F1)XKt9yCQJyq;=J?DyXmHzzW(*EKla#T zue|cg|K$7g^2;y(`@jGDU3cAe!woltNp;z>Wnq#nvNPqVd%=PQU--fo0!}`~)*Q8M z+qV1eyYJ9L4=sm*RuCXSfB=E*!mWw7zy0ku-gx7~4?q0+>#w(F!h55Xty{PL;0Hgr z{`%{~&5+5HC%*};*Q{Cd;)^e~khH0yLh88Ynrp%xsyCs$E)yU?fIvwE7B60W`Q?}Y z%fI|fYcodLgc!2NKmYSTZ`iOQeE3olfp$0JzylB5vSmveNVM(2yxl!jJ^=y*2oOjJ z%$YOi(n~M>w}1P$X!BitMGrmn(8U*D+}YnT=;`SRpDxw+J^q%E^mf~Ax5O~8N`L?X z0tDJ2(B0h~?(N@k#~oqzi9h8vtnsziUc2qK+m1TwsE)khf7)rMHSBdE8~^IB{;C~= zN|^)*5FkLHDlmHV=yT6KH+=K6keMz|r9b}hkIy>mtlr+H+}*1PGK|zkYpRUtc*fn{Cwt4?HkLkk+0) ze*E}myWn^N1PBlyFrYyA$w`>OTRUe(DD9^|{ppD(o;YCd%6~vfzPwSrWc~g9i7f;O5FpSQ0%OLEx#Ef| z@;{-g%uyu#lJuh={phGsqlW3FkvE3vh0|;T1PBnw7C8FoqksPMpO-m845Dq1KmPbI zeMqLfkv&}PB|v}xfng^QZUTf`0dXGNHHgeG#8bjUGB}~kA^s>m;dz5n>Wv!H!s7XY`f%*vRx7FAwYltfk6u#cieH$KmUCB(?UyH z_}p{Pg*TrL+A8vi@<@vth~`$ zPo)tcK!8Aef$#wEYp=a_xP*k3w=;a5qx_FRmp9`7y-*_o0t5)OP#`=t^wwK%ZTTcV zybAo>=ROx+h}J^YmKP;&w479d1PBly5KUn0*s*urb=UC925oBXSHAL<@Vt>|^37Hx zZ!|0Bcmf0n5GaX22pjj`e}9{%@8MYNx4!kQ(moJO-YCi68qFX;fB=D}1V)Y=dFP#X z4#!l`);8aM`|aiYU`5_&YIr-C009C7${-NF9{JaQ{nu@sxQB1yn>KAK!!=5@LEcD! zSS3J!0D`r009C7h9YptA%|?;x^=jRfe7t??X}ldtXMG=>eiksZ?x7^X#@xmAkaR6 z88c=)_0&@lChN|q;)y4om@;Kb`z}XQCCeL4aXFX(0RjYy66o&kzWeUGJ0l51>&4f; z_O+5cdQ{#h>MxFZ2@oJapecdNFTXt6G~G!Rz4yKEZOXY#2g@66f>kU50t5)OP~hN$ z5B9Zhxctc9rW~;$X{Y9Pi!yo>z@P~kv z?F#ny_eUGRDk4CD0D)m4uwlc7qGsxjsdwGFb;Vw5d81f=wG$vffIzmu+_`gKdg-N( znfHt8$O|vLFl*MVZ0fe|l{ebTt8fAY2oM;eKzQwGQFC;M)%&-9`?o{97DG8*-WZCW za|sY2K%lJx#~*)uhfVqgc4ynRZQ*HYZM|L@h07ZmICc>rK!8Aj0wYF@c;t~s3Y?%j zujT5E!&T zxViBk|M4G%&(59KfCnFZu#j6E^2VV5E;x|@0RjZtC$M(y+RmHnOVXp&t5>)0!ljig zZ=}iCPJjRb0tE`(fB*d@nVmbY8R0cF@vp4B5#L;m1PBlykS(xm*|N@?Wsz3q+2oM;ez-K@E*;38Uo!6KfZn$BH*QnXk<&9>=98Z7%0Rn9mm^g9b z?|%2Y&YR*()uZ41<~L);jA`q2OcX9}BtWbZAV7dXu>$9wdv2+w=1y(Q>8GC_^FqrT zF}2l2fB*pk0}6ceo8RozDZW(wy6v{x2D}z6JV4%PA*P}T5FkKchypWa%-FhhYpLet zPHoI9ue=gIx*Fp3%741Nk>ARZ1PBly&~AbA&O5JD=l2r!E9OTk@rX7RH`4_(7BcYaDz5xr7HwGkf009C72t*K=J9lnr!$t@~haZ0Upb^6R-=BZ}`O@}o z%9JUC?ppp6<&FGSjwC>U0D<-i9CzGt<(!d2R9LiV(GWYn*Is+Q_~MJ@>|pqs?ht#I z=X7}^kCI~u5FkLH-2&lrhZ0W5;iHhFjykF(eLwNU6Sr;KR>D4>fByL`>0ovt@dzWeU7 z&BYHt{BZcfXA2R=jvf2UU;eUe-Ta4t_=gtuF|8SLpk6_Kl)Lr`aARos1B$h zZwyG}00IOE5NNl+0S6pVs`>X@-}+WtyBzXNsrtL;o_n^nzoBq>qus*FCqRGzfdK`U zE?rux`S+XO{N{jd9?Ajt-+zCp`nzPwlA&}b&$;qO9wo;RAV7dXTLt8eV&jLr(bnOu zZ~_Df5GaX&ydiHy7U=KqFUjE73<3lQ5QruqZ$zGL6VD1c1n^@c_VVbNK_|pL>uZVB0zuu zfdU2OjYI&5yee-LIQUgffB*pk(FEj;$N?i!oxBlksH=zo0RjXH6p%L(0U+|Kyiwrb zS2Y0w1PDYEkT)U+j6`+vMzo=>A_4>m5GYVU-be(1$gA>3frDSw1PBly5KTbdh#W8y z)yW&thPsLf5FkLHKmmCp5db2u${Pg^epM47K!89r0eK^Gz(`alZ$umFDk4CD0D%Gp z>M9~YfB=C41>}uH z0EoOQZxlHARZV~Z0RqtkD1c1n^@c_VVbNK_|pL>uZVB0zuufdU2OjYI&5yee-L zIQUgffB*pk(FEj;$N?i!oxBlksH=zo0RjXH6p%L(0U+|KyiwrbS2Y0w1PDYEkT)U+ zj6`+vMzo=>A_4>m5GYVU-be(1$gA>3frDSw1PBly5KTbdh#W8y)yW&thPsLf5FkLH zKmmCp5db2u${Pg^epM47K!89r0eK^Gz(`alZ$umFDk4CD0D%Gp>M9~YfB=C41>}uH0EoOQZxlHARZV~Z z0RqtkD1c1n^@c_VVbNK_|pL>uZVB0zuufdU2OjYI&5yee-LIQUgffB*pk(FEj; z$N?i!oxBlksH=zo0RjXH6p%L(0U+|KyiwrbS2Y0w1PDYEkT)U+j6`+vMzo=>A_4>m z5GYVU-be(1$gA>3frDSw1PBly5KTbdh#W8y)yW&thPsLf5FkLHKmmCp5db2u${Pg^ zepM47K!89r0eK^Gz(`alZ$umFDk4CD0D%Gp)AEn7y78r9bRhQhz}r7vYSBj(;0UU;G1{Z&2z0t5(@Q{cPb{cg+| zC%dj=jya~SN~fH1N_GQc?!Ei&yW85?O5yK*_q$_uD!Z<~`@6r3&}CH+AV7dX2?f@! zU7I~eMBDr5qmTCV^t6?zx3~B4#~+W@qwI>>9j+>piWu8z7lQ5Nvr79S6^MZa%BXi)vH%;-MTfc8PT?X@rz%K(Ai2AAyRJJ zwk=xM(kj}tX;ZW=tB3#r0t8AZFn;{_d+)tBZJLO%{pFWme%ssL7ER{NGtUh1CPKf` zs<`vcJI9O}6Rp3Yq6;p#pxBfZK1m5TmtuBVT?7aaAW%Yqkt0W5bkRl6J@;JN6xqJ* z;Ws0D?X_2All}MK|2yCLPWw8QR`N5?JhOiN`Vk{WMDA~>F5Eu){`bG1*0A<%|K%@# zdCocKgxhHGyR1e61PBl)r$G1@=#fVr8U8JN_0?B@w9S7uY}oLwcfD)={P_h^EL^zo zth3I#^wLY)+}Dp@b=6ht)~!42u){*GE3m(z>P3qdoqhJ%mtA&QySsell~xWZ%9JVRo_p?x z-}tk7_3G~K?g39Z(*Uz$t9~+t?KIPDqHiK zZO>cY@|FuOxFB4PLk~T)*>h`;U%Ytng%@73yBr_}Ea zq3dHG``ET^+p6V!?Q37l7z6bs*g}8+0RnF-fsrFeKKkgR)mfvm@an6t?y<)n4ISpr zotp?7l~Xot+SKs)u<`Ss|9qnSuzJ>6XQdrqs_iG9cw&9y!`xb`M&@tKJKy=v`tIC% z>#g}qs2mw?Yt)zXna_Nt*>W6DfB*pkZxVsyk3YVC;s{$l^{G!a6u9Mj|% zgOc#+Ot_&@f6BuTKishVvTgkKx4&KA_^@T?op&x7|C<3E!?6@Z8D)lO|32+0TB~ zu#m8E<;s;g%W)V10t5)WsRY881{=;D-}~P8>K$&n>86GUS2l)Q9QFU|KltE-8=eyW zOfrD1oDJo3l^&#fHrzx?vc8FNk8_32N4Iw2r$BtVK?9b(=%|NQf_2Y|d$?DbVU0RjX{ zE08~LY}~jpd#(w4!xv5G&!1o0S$U&YqwwXSe)qfVxu&xBlb`%#ZBONmT8+Y&2c0*yiuhn!@{8RM#CR9*AD=BqYPJB8wd~}P(pz`c_Tbc zG&}^XesW3Ma{cw!S9>aNR4K}^Fu1%Co+X=htrOejjWS$iZ6H8^KnVr%PD38bg2pf$|6pm^Z@n7M_3p`RssE zzxTT9uB-G>-YCzt4lQXmZ;Tx~_K`;(slUEyTjY&WU2csbK!8Ab1P06-S6p#L+T`-p zuYNV{7qa2GQq!hQ3*D4A%5$wlOPb9apZnbB(yo5P?ea#cF1N-IAV8oz0@-;ZylU;& zzy5W@nWge{uN!Z?vEkmZ@gpDkNa&`#QJ!lZTGCYB2=BN_ySQoF<&9EZZjB*8fIxW! zvhzlGLw(xJ68_~IdNF6toU|vLhp(81_o&Jn<+;|OCHeD4cx&))fBW0CtDm-A-YC`O z)))c=2$V-4BX5My?w@()nT9h*F1u8Ek@g0+aN?C$UMX*s=URuBZ!D-u*V*I)OPK& zpZ#pZBg4jf?zyMoE_tICFxqmSym9KOr#8G~m5o3D`Oha$o-A)fyJRXNK!8AJ2&CnW zj2Y)kU;0v_@8Prl@Ci%CDfPSLjf7#G)dBOy!i5W8c;SWm>s8qj-jB0v*|N}7c_YsC zQVRhB1Ug1w5P4&tefFvEe)xnXZIWuZUEZiSjIbp;Z}j!`h5K3!uUBQ`g%@5}X{5Xn z;bN(R009D>B+zW$xc&Cq8+L!uqD5(QP{a94-e}0!?v2@bw&Q@bywUI)RW{yx@4emK-HFD?8wn7r1PBlykS&luZ-gg>W*1f2d*_{ZW=vky zUGhdA%$6V1Y~J{<|N5^TcG#i58S+NGi7f;O5Fn5tkTY+5?|a|ND5Q4R(xpqQp(0~J z-l#>3w%k5-6Cvh zDsNnN*=1=>k~h+1Y$rf~0D*=AdGf{s4?NKD+_a6$moKl477dr>jWoTsZqJ`LzWwcQ zj~Fo`tugXOnvCrP2oNC9P#{mPC4ZL$7_ia^{U+{pwe< zX3ffIhP;u1V;2De1PIg%445~<1Fox2m8?HKZA}JRt**^9XAV7dXLSVqW5nd>tI3?%mefQnhFlkga${RTuTYFfZym9r_R}WaJyfGk= z0|*cxK%iD2J8%5>$3L!r_CoFH8Oui>eYCuh;Zw-20rSRpzVn@)o}K~QCT|Q#azZ(b009C7Dgxov7-^B<9q)L@ z5S79gO&@&l!G`4z_xl?sopjO=aSAy-BX3-L?X~%vl$JLRIpmQ1g*cJ`0RjZxJObgx zpbhiDV~;(S@%V-OJ|~}ia>Me&t^53i6nNyLk3QP4{VP|lEU;CBuKKB`o@&^g`|rPh zUaQ#u;a{1R;DP({RfE%x6B+ zlJeVK$aU9USC11OPtn)c*Y2v@QT~lL-dNwAU;p~oIls11ZBn>=_2vBZr#~Iy2XNK$ zEf63;fI#O7Tyn`JiMivBJML)7&5epxc+p$pHvSV&JTY_T%wZupdGh2$UfQ~K>oEN= zC4f(zI`wBi`&sSfe)ZK?k3II-X0Jtf8d$i9wdI6M+|)zwo2}9D1PBly&;bIcop##h z&6{6(>7}3inG@<9t;qA@DcoZ8r$f*6fZMWysY3zc%tI!w;w&8&H+voGsi&+Pqc zqOSeSTF_b)BdhbfpIN*mI)v^gC~2h;H}ir7Mc z009C72+S{mcJ0(e}Qo@urC7)lKx+Oq>009C7 z{!d`hqD2>7bkUkMYqoFSK9esk#yOixq(Z4&D*Au*{VxFm1PBlyFlPl8E?k&?Q8Gb>HU6omo_cEAwr%NKNvl_{p7XF8BtU=wfoKA6 zeB&E8Zru3nv(Jt{xw_ezu9Pm8t`|*gR_?Q8$&#CIzWLChL)~CDt0dTU>((80)KRn2 zh$I9E5FkKcw7}cn{`ULtzrQ(&Vy@FA-}bh*jqYW#9!Tg5!%7;C61nPGk-L-kbavqwKJhl(Au?YXO1vi8Lqwd+6iTJZ2|-c5C|xce(Q3_ zjvcc#q$1==?Obrd1p%oKd!-Iu(q#N6XzSLkhrO^31PBlyK;WCX_-Ut9+K^ONys zV%yHtRQkW?ix)3GEJCOa2M-=>>!|y9dac(`I4(ng009D%D3E?Szh%po?x$Fn6;p$g z^-Bm{;*3*k5)FK!CtF0wW)3WA~p2oNAJp#rC# zdg{XuKRlDUGndZ(@sEEz<&;xmK9$j&V=B270RjXF1Qa;wq>~suPRQf;H48zA`11yMH35!<1z#Y5FijxAidngh7B8{&97+pNkpMumm``_z)x&f zB0zuuflvbJ-9w@cubB4<^)9HjH z1s7c4*EXg-vJ+hbtoxi!`|^bj*40p*009C70tzfyvLwB1W}&$=Ptxw#vE!(tj;i?N zMsu!6p)>&k1PH_w`26QTA8lGq;(e~V>Z*#*Z#1!r6iO2yK!89%fmgiZ6$cL`|i7IJH*$`c*UtqOvo1PBly5Kv&jf(4s5Z;m#nCjCD5-+zCC?f&VG=GMJ{ ziUbG{AP`gFo$q{Sv>`P&?(>d!yrcVPJQ`j10xA+9K!89@fd?LVAli_c8~6F`Z-3kU zGaikudjS;*5FkJxpg?+ks%R5xF5Rd5m;Z{U7w~i5l?V_ZK%jep^p_OTCe&QI&xQ>f zI(|;0>2=(`as&tvAP`XCw9`)W>g7cTbmC3OT|V_i+nGl4E_+vt009C7VhW^J!koqg zab!vYS6+E#m(Tu`?$*KPE_+vt009C70ty^?o+V`##rPb4@p&3DFq4=~@*61PBm_DX@L} z_Gp7?Zr>+?ck`JLjj@}qRUtrt0D*u4C!Tm>w5il~pS^qcu3x|Y!yo?e`RAX1+;PXH zUpq*<-S|qWL?qyaUjn?(7G$jcE0t5(5qQKgZ8LjJSH{u`x0t5(5y1*}g`O9cisehmJor=|~ zS5Hs)Rj+zg)t3yin9}8KCP07yfjJ|vV8Mbtd-enwMg!M);DHBT z_Oh4FggPDHym|9L+8`f3@x&7|X>H82L7MGfW6W#YMt}eT0&`5@)KgFG&w@~k^sR|y z%a+YtJ0%JGU5QO0?iQo@urTBiwroXgK-Pqdb2(u=bM2oNAJ zxdPw)?sub&qz`=H10_7u>vBZvG~t)%w3#zn%gwu46Cgl!)~#DZjimIN6V`W0RmwKqRpf9R%_*~(wo;u>$hC9z0C8i-_oA) z6Cgl+dR^5U4iL+mO4d%009D%E>L&+qhijT0njR1PBm_AW(PO=G9A^qhij zT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_ zAW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^ zqhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR z1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO z=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhij zT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_ zAW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^ zqhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR z1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO z=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhij zT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_ zAW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^ zqhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR z1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO z=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^qhij zT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_ zAW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^ zqhijT0njR1PBm_AW(PO=G9A^qhijT0njR1PBm_AW(PO=G9A^@1Y!zYcinXz51kR^)~s1mT50XtwIeRj@k8^i-)pbEw)FEW zKLG*+2*eaP`|PuydFGjp=j_mO=^E)WrIl8#TBYBi{-uM7edWrPrJrB<2@oJaAgsW; zb?ZvcnsM@f=}TYghA2qC*I$2qH~rptaSZ@A%x&c4{_wOp~^XP zzv;Go`SQE&x@+IQef#(C-?(w(%9SgdkB+~7(*9Khx*T8E2d^{#iQ- z5FkKc9txxZv}@O{-WLzO|4tvKU>n6JKJkg>=H5C5+xAa2e_Nhf@kzgb(=G2MeT|vE za%k=uXMNsz=k4CTyZLGG*kg~KeDcZToVAAl0RjZ(r$G8Yr_I69Tc_YqjhDRSB?E(| zw?75bLqm^DDgV$6b%T?B|EAvUx8I&W*Xg?)%{_-*A9Ktx4?p~Hp6AwEZ$0c;8wd~} zKw#bq4E_3H@7}#bK|cH0&*p=s7fBBdJu;>ILo?J3PWt_udQUv@ME>-ppRF|a9CkhQ zi5cr@78|#*8%Y++4@J z?dV%I@84XHKGl5m^2;x89voOVcUlu5K!5;&roh0+=zrMU(_4S$GoR@{I&_gX9-%*dqQzo|OIUd}!D+^3#;sx8R`J*Q0*YXSra5a>prZF~$=f58i0@Q;7|qiu69 zp8ixJZ5ue)c4S~%*bgWD{!Q4K^zxz?y=cdd9c>wU@n$V+0t5&UAkY+On;^|SY5l2B zeX4C|Gk(PtR}36%KH6LlYzzBg^Ulq6*b9%iSo8kP^@t<=ht{uO-#jvO-QR3MfB*pk z1O^0#4vrLTZd09=x3-^-nK1|54;vfzM&TxxJK9yC;k3S*y;6h z&N=6#*Y#>U+l)7BSrZ^YfB=D}KyzL+*Zn<59d*(m&peH`o0Q z!57UtH`l?hJ@k6b`#0A^H}`_y{N^{CJ4dfaQ|cwXmD`g~KG}9;XuMg=ng9U;1PC+*h7OJt zOnZ(z^2nj@l#w1y@AH-3i9Y>Hi=i3P!E`(&8Tx21fAbn)*OPw#ChYjVq(3tH{qKL@ zw!bajtYuAr009C7ngSzc$B1vIUv<@0y(DSTmLVNad)gjt-XZdO((m829lw{aeeG*) zn@7Z(wX6vcAV7dXQ=n~pr0-6&y`E%xhp%PJmi3aPMfz}Pl5{*J8TwEPHt!I5J?Zyv z+K$=Fd*A!sww)>dm9KoI?a^i}YXSra5FpSLXqz4HdCz;=9=hh5YnmC-hiyAYBxz=d zyl!hP@}1l6Hcl_gmoHE64&1hL>(;I5M=foSw$&9UK!5-N0&TOS?Nt}jOFtcd{P9h< zm%sewZLbH_mLwHzW{A9Q^ND=tw!0m+m-IriTefUz+m^nOwPMAJl)P<2TU~Ji1PBly z&^9~T;y2uILyq>vFMhFYe_K3H5;HRC_iw5mwwEt|`O9s4Qv7}IdtWbG+n#1EYXSra z5FpSLXqz2F<4-^R^hqb3)I8o>pLpVlqu;4K&z2{N8Od+ni^RO`=v$5M<{ss#I1PBlyFd)!2JBG$@y6L8Yj^!qn?+j?2Nc=6`Vo7)~uulluW)v9swH1}8&AV7csfu=y)l*!{?{pwen z2lI8>ke_OcNr6*=5ZnY2CJYV4DvK5FkK+KwqG3b_~S- z{qKLDe){SCQ$rVNL)tcQuT+aNyi?&ut#>uZQkW z!Ttsd0t5&UATS`%HanW}Z-4vS1E)rOm^L@hwyj5G2=&mU-@l33*2~cNM?UhA=Go?Y z=>8OJ?y)97fB*pkO@X%A(T}I^R}B1lLi2dOPMgR17Ds+CW~A>hu!wov(YG3CVZ?{u z`ObGnq-r}j;)sU`5FkKco(r_ij(+_1+i#yLQ99B;-nN)(&RY8?{r*k2wq6F}4?XnI zF~=O!JUFl(*x&zfV4DvK5FkK+KwqFgEQT(gefHVat5^3okGV)k(!rq#`@u0&Ro~XX z@W7(_#intAffj~-m|jHXyz|Z*oqXuQ6dZlZqXY;LATXZ=+Ga;DzG1_L>EWb%$(jfdByl1m>+kb6(`@SHJqz)00UD^K8w? z^wM^Js(I(;y8D~VykhhIL)YK`{`VIwSa8@vL(it*VGr6sfB*pk^H!j3cBJ?{_uMlR zmUMhX@|k4r@@!iRUEX1~YPI#!i~s3Qe|qtYUp!8&wmjpUwTA!!0tDu#K-=s{@z=fX zbu%$}?Q35f1+Vamlc{dp*{r*j*wq8>Flb`%#bLZ%FTb|LUJW7B70Rr<`V9%aCL&wJ( z-tdN*v%LQGuOFH`6`gtVZZZsgm-fAT_jXf#cB|~%xpU~#ao1gUjq__8{mcC8U;oPU z?Ay1mzrlh40RjXF3<#uO5zJ@D&wlo^fo;?N@TWihX`Vk7op!>G58iRd9r^uJu;XjY zO1bsx*XOml>fHdZp-uBdFP!|N@6ns0t5)mD}nTmCyzh=cyoL_@x&7= zSFW5bgp?{JZ06s!YuA|X#xh%Xm`R>=)pX&>y??X!GtWG8;JJA6$tTDEwT*tN(@s0> zvBw@8Fj>BQd4Gci0RjXF5Xc46`^cyFbxo5f{p=up=V2DV*yz<-v0_C^o06vzsnB8H z*FL{t-AEeK=^Gm9{^?&@qz~)fXC~FpKKtw+{_uzU_wP@yIiJ4u^qSYaW_sDulbF8C zk-kz*|GxLV?@hGH^aPwDK!5-N0t7}2JnwnWTexuH=sg}KK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly MK!5-N0v!wd52Y$BUH||9 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NeoGeo Pocket Color BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NeoGeo Pocket Color BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..29ae63bf68884c1625f20a377f44910d0788396c GIT binary patch literal 1555254 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 @a`Y`0ye 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 z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z 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 Sn{k}zC~8RGSO$DW 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 zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P fh=2%)fCz|y2#A0Ph=2%)fCz|y2#CNxHv<0)k{t}T literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NextUI.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NextUI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..03dfa0377ab0d7f151ab11511ef2eda2f31a46b6 GIT binary patch literal 1555254 zcmeI*3#?sroiFg7o=1Dm>1kCwBltL+>cSIR*p-H)|SJ!kbpv&Q}PpVi^tW#QkSjvxHDZQSg??jAQT zJpb_Iac})QxWj)55FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly fK!5-N0t5&UAV7cs0RjXF5FkK+009C71_k~LDN@Gv literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NintendoPixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NintendoPixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..da3f62afdb11cbfe4d291b77201303307aca7097 GIT binary patch literal 1555254 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 BU_Af; literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NintendoPixelTilted.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/NintendoPixelTilted.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d3a7dd6d927c6bf690bbe4734e323ce5844b1562 GIT binary patch literal 1555254 zcmeI*OUyM#eJ5Zp@o-5nK|z{v9BeO8G#hV_Wx(LgM2ZxYk&qD*iBS@nowwewKqd}r zmfi({6$p}LlpW53C?Q^$$mV8}m?Sel{EtgDeL1K5+`e<(_i5?t zuTH;xs;i!=(_MY5`XB%E?*H{)-|&m+?)>}j`S*X`RR7-ihX3}9#cy~+{{Gy}Z+Pur zEiflQfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF K5Fl`d0{;&HQ#tnl literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Sony CE Pixel.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Sony CE Pixel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3e520d3f304c7e8db43337d9b2f2d74302962b74 GIT binary patch literal 1555254 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
)whIz5Qr-T zEZ^Av#hS?-4!Uu8e?0c)4!&oQfODHO_mmzTZW}+6qpa`TH1qXolc=;sKI-Cv0@7SZ z;YRGlW?=b^M9Q5LFj*?aMWi(6m;>p}Nfc(z?be=e{Qvgu1y+jc4#4=WO`52oTEL=3 zq$ZZwNAMY~Xlhf7Z7QUx()4B9)JKDwEAmF(&w_A~mx2NU3N{!8r2;Bq5fCiYYBi0i zT1ibG+SIhERzk78>38Pbot-;-ciFvrg-iRH%{uIzne#utIlFV_%$ak@GCM!G|2>9} zUK*YhIHCBYK;~@Dd7R(;V$Z$C!Ef*T9g)!Nz2I-8Ce zgh4Q+^$k8Dc(Oo7$WF*q)uUm@$gAlun$~T~EpSy%7}ZQMUky|^KuH;(9|akt*(6Q3 z*b}t_pHHFGwPT8T9`)_hi|-5Hno-@4f8)75JbS|9uGyzis>y7+6?!Gz%jU3&!|>8#eA)R zhoiociK*Ht=97+{d{g+o@U7vy!#9ZC#BWn(e^o7(`woT@=;ZZP5xSBB3LFgr$!%-8 zLp(8aYBKNq+?C%QG={+eGUxI197p>G*RV6r>a*(VZ!&$xk^%j<%$~u-+)U5SB;8Ea zU1x?5yz>qXCa>?>$*=eG53b$XG;`ac+ZjzF^J-%31#W^cJw21uhx^@`Q*cf9Q~q-> zObD`W#E|)yUBbj$O9oz^>%|c=+xz2lE;@(X>ohMc`pOqKPn$p_KVQ%U6j|<&X~YZX znmzPlWrysRorfeA%q2MzC20a641yt~^jL(2GkOv>!IK3tLUv-NsyqrER^O;)iuua1 z#U`>pz4YtXwr|_Fd*|yrw}<1Ksrr5p?HlcwVxDgY-x0nkp=2(c%Xf!wP{>;HZK|Bd zHvU@fJ4lm}lh?Q5hB9M{0eQLRpG>18#8BA$No=pJEKdIr0g|D}FR z%uU}mCh4xHdqX_Y&?9c$u$wkcVs_f;i!T4djSUUMPWT9ykl7cP()8r#(vkpj=il1u z8_C4q&n&xyYH3 z97cA_BfT*dk{f$!SCS?G!pLPd);9>7;K>3RVLx$iRTjjKsc%pjsAY=z%CW_eo>{i| zkx@fqN1bp`KCt>m+E1p|Ddzch@EzfsQaL;A{%gy3kV%=77DXqoZ?~iyDxg4T6X1uJ zrg+Azrt<)oY$LlJJH2loPT!OJoW`YGd=;x73^EYz*Y{=$2`;Xgm^%!@+&K8J`(6t- zqYoV5z1COUih0>KO&EV>%6M z+%RtRBe#y=+L^2ANuLVuX=eGsPd*HzD};1oFrPl1F`&pb57j<>=K?Z&@V)ow$C6B0 zo^(EmT~I2%vof2oA)B+4bZ9BgWrh6qPLs}7Hj)pMP?^pA))53x7RU&Ns&ajUvw6!a z>8@~a|9+Bwb^B9~jvpCXw-z+bx#(;<3}n+v9ZDAnBNT%gr_hU#c8c9fd zR9_a3jg5qbe(i7%5Cf?Q_U3f z(SZZRv)Ehb%w$@b{eS=4fp_1@9{NIRRsFvh&%uN2C+zK?@3QCctambwYq1Qpn!LWH z)RBwyMRB44q&uuCc~??E0R@hPz`qZM=RG;~T-VSrvitFjWih%(mw0{6C3fzN!_QzC zDB#K~n3#LhRJu1b{wtZ%tDeB=ZntIDR4NrlH_$l7*@LV{e^ba zH@3`~b>Fq$f1q*jTAp^H7e~*oG@Fd=)%Fvz#YkGF5udnz^zhxQ?x`osaa(r6u3%)i z^3rCOV!Fva6v89O5bCMj2%F%^0vTafmFpXA#`)*py!6D(DckRu_w350Jb6TKkeq6( z)C&>@+A4WD{ zd;_N9T66smxTCTBTi*zm`I$YZNu:u1JI&N}~dO_!WcmKjCi&aYkev+<)|cxdgO zd+*u1W>tk3E3g_Xvk4orIXhuj?2z52Nt7-S5`hsOK@utf$6*=B!av@6Gvuy9|AFRa zLfUiRieIf=LxXpB||K4X;EPXl7 zubK?E5>w=n7Z&)Ozp@T%vVPd=ssWT+N-y}8r^3I*PU;&(!o#pTmn>vPdoHeN z(oatWHMMV)it^OqhVeXnI`OABT*vvea(#m=#}}cJ<GxW7?07A4OXY32|p3)riY{&R%qXiAl3&`l79={b8g`E-0XY0*6t6 za{&)ca6g)NuGhjDYW9pRGp9~S8ZYn&dH@Ytn^y zPa(~9(!qnNTe$JG;yYLFShA4w4z~j;yjX$NSeZ@OFrXFo79$c6CWcy zf+SP|ChS5E4mG((b93ww@$`ZwCg;W&fr14L;|utizh2yG~*ASb+2RZDv37 zVcZ->Fd+pt9{QT<8)XklCZS@HD3p^l^7I>5R~U!!=f$KHP(Xp4K>V$azt3Ce&Z5du z{CzI`=+*lBT>RN=^S8A0!$LwWzplwSg-Ga7O6SJ)BZkyp-$--K8F0hck(|M4G~hl3 z*ZXnIC6cb@WCRYE{9&H-JLYZq$rR2z6<(~sYOKsAY*>kYHLdMwr$&Ht{S{(ml8;ja($ze^MJfqh~zb z)3Ow9YP4D3ShK2JPt+O&vgyXwo>NYQ6j*r4PEGZVjyWiGhEb{9_%{Uc`dvZT6kW5@^Ly#@H7fNIm=Eao6TUMhES}fl=~#RRc<-y9zb#=O40;C7-^$Z zA;j?i8VW&u^^MYl(!MF?W56+T+Bd9kSl_6j47;iV3jCi5Fz@{4DdTAL$lny`i2EtD z4`=U9kP2z#X1b4OE5=}F01zISO`DWi=93EZ!`5`5IKQ(#V{oOD*VCVnUL~A)(-iXy zR4sBfhw}d{Z4xi;txqo!BDr*mdBPx=7*b8SD6U-YeoA#mt@NO@Z;JUCPg>t-`+iDw zAr-lj8&VvXcHd8FwW}Iauj@ueeFr5Qc3oi@X+uB5 zGMO#(y`(E+(gU;XJH11@vvRrpkOT>lT&+{gSITc2{Y7gyYKJ^1m69&`TgMlqI{J&2 zJql%xa&G;)I%?K;P_mKK6-LPc@&g4FP~gZ4#M4B%#~9;tdG)_%pDpD^JdaG0A{o!s zH~#Xv4F~h2-DYDEbd>&TLJPX-AwD<&N%jETo7c$%X>TAAt*Vn%qo}(;%>^FI` zGCo@x9^~wIPK6gM@E|8Ehy5fQ=65(~APJFNm|}kMLgr5)3~~`eYF~EX12g+PEKgA8 z(=E+c;gdril$xUI_<~f&^RU$;w7F(o52Dt0P_psV6-G@5&y^KWKmi4gv_Kp?i>E~C z*;3)f3JkHu%11h0(^o(N1r$)A6AP3KL!FMO+))dy#|D3&Yx7bLu93sk@R{+PS>}_p z8KiWRc6>rRNf;wK3={o+GE;nU_~>lXacuC{c5Gwv7aq3^57Cr=u>z~HGJA*{W_J~r z69HzuPm->BiuuYJ%QI3yuNEkg%>NZ8Y`2Bj%|(UTqs7PfC36Apnw7jD4>7> z3Mim}0!N_$jTOb)@o8s?G7GkB9EC^NkQGos0R ./log.txt 2>&1 diff --git a/workspace/all/bootlogo/bootlogo.c b/workspace/all/bootlogo/bootlogo.c index c9c2913a3..2eceae66a 100644 --- a/workspace/all/bootlogo/bootlogo.c +++ b/workspace/all/bootlogo/bootlogo.c @@ -25,25 +25,39 @@ static void sigHandler(int sig) } } +// the stock OS reads bootlogo.bmp from this vfat partition at power-on +#ifndef BOOTLOGO_PARTITION +#define BOOTLOGO_PARTITION "/dev/mmcblk0p1" +#endif + static SDL_Surface *screen; SDL_Surface** images; char **image_paths; +static char basepath[MAX_PATH]; static int selected = 0; static int count = 0; int loadImages() { char* device = getenv("DEVICE"); +#ifdef BOOTLOGO_RESOLUTION_DIRS + // presets are shared between devices with the same panel resolution + char* folder = "640x480"; // rg35xx, rg40xx + if (exactMatch("rg28xx", device)) folder = "480x640"; + else if (exactMatch("rg34xx", device)) folder = "720x480"; + else if (exactMatch("cube", device)) folder = "720x720"; + snprintf(basepath, sizeof(basepath), "%s/Bootlogo.pak/%s/", TOOLS_PATH, folder); +#else // This needs to get a bit more flexible down the line, but for now we either expect the files // in the pak root directory or in the "brick" subfolder. - char basepath[MAX_PATH]; if(exactMatch("brick", device) || exactMatch("brickpro", device)) { snprintf(basepath, sizeof(basepath), "%s/Bootlogo.pak/brick/", TOOLS_PATH); } else { snprintf(basepath, sizeof(basepath), "%s/Bootlogo.pak/smartpro/", TOOLS_PATH); } +#endif // grab all bmp files in the directory and load them with IMG_Load, // keep them in an array of SDL_Surface pointers @@ -142,8 +156,13 @@ int main(int argc, char *argv[]) // reboot char* boot_path = "/mnt/boot/"; char* logo_path = image_paths[selected]; - char cmd[256]; - snprintf(cmd, sizeof(cmd), "mkdir -p %s && mount -t vfat /dev/mmcblk0p1 %s && cp \"%s\" %s/bootlogo.bmp && sync && umount %s && reboot", boot_path, boot_path, logo_path, boot_path, boot_path); + char cmd[1024]; +#ifdef BOOTLOGO_RESOLUTION_DIRS + // back up the stock logo as a restorable preset before the first overwrite + snprintf(cmd, sizeof(cmd), "mkdir -p %s && mount -t vfat " BOOTLOGO_PARTITION " %s && ([ -f \"%soriginal.bmp\" ] || cp %sbootlogo.bmp \"%soriginal.bmp\"; cp \"%s\" %sbootlogo.bmp && sync && umount %s && reboot)", boot_path, boot_path, basepath, boot_path, basepath, logo_path, boot_path, boot_path); +#else + snprintf(cmd, sizeof(cmd), "mkdir -p %s && mount -t vfat " BOOTLOGO_PARTITION " %s && cp \"%s\" %s/bootlogo.bmp && sync && umount %s && reboot", boot_path, boot_path, logo_path, boot_path, boot_path); +#endif system(cmd); } else if (PAD_justPressed(BTN_B)) @@ -171,12 +190,29 @@ int main(int argc, char *argv[]) if(count > 0) { // render the selected image, centered on screen SDL_Surface *image = images[selected]; - SDL_Rect image_rect = { - screen->w /2 - image->w /2, - screen->h /2 - image->h / 2, - image->w, - image->h}; - SDL_BlitSurface(image, NULL, screen, &image_rect); + if (image->w > screen->w || image->h > screen->h) { + // aspect-fit oversized presets (e.g. rg28xx portrait logos on a landscape UI) + int fit_w = screen->w; + int fit_h = image->h * screen->w / image->w; + if (fit_h > screen->h) { + fit_h = screen->h; + fit_w = image->w * screen->h / image->h; + } + SDL_Rect image_rect = { + screen->w / 2 - fit_w / 2, + screen->h / 2 - fit_h / 2, + fit_w, + fit_h}; + SDL_BlitScaled(image, NULL, screen, &image_rect); + } + else { + SDL_Rect image_rect = { + screen->w /2 - image->w /2, + screen->h /2 - image->h / 2, + image->w, + image->h}; + SDL_BlitSurface(image, NULL, screen, &image_rect); + } } GFX_blitButtonGroup((char *[]){"L/R", "SCROLL", NULL}, 0, screen, 0); @@ -197,4 +233,4 @@ int main(int argc, char *argv[]) GFX_quit(); return EXIT_SUCCESS; -} \ No newline at end of file +} diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 9716cede8..87bc7d21d 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -144,6 +144,11 @@ extern int is_cube; #define SCREEN_FPS 60.0 #define MAX_LIGHTS 0 +// stock Anbernic boot logo: bootlogo.bmp on the vfat boot-resource partition +#define BOOTLOGO_PARTITION "/dev/mmcblk0p2" +// presets are keyed by panel resolution, not device name +#define BOOTLOGO_RESOLUTION_DIRS 1 + /////////////////////////////// #endif diff --git a/workspace/makefile b/workspace/makefile index 485595e03..4dd24af0d 100644 --- a/workspace/makefile +++ b/workspace/makefile @@ -56,6 +56,8 @@ endif cd ./all/settings/ && make ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) cd ./all/ledcontrol/ && make +endif +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) cd ./all/bootlogo/ && make endif cd ./all/audiomon && make all @@ -83,6 +85,8 @@ ifneq ($(PLATFORM), desktop) cd ./all/syncsettings/ && make clean ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) cd ./all/ledcontrol/ && make clean +endif +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) cd ./all/bootlogo/ && make clean endif cd ./all/show2/ && make clean From 1e9f30d79df197e3457cbb7a247ceca8aeb9af98 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 20:39:01 +0200 Subject: [PATCH 33/76] =?UTF-8?q?fix(h700):=20Input=20pak=20=E2=80=94=20pe?= =?UTF-8?q?r-device=20analog=20stick=20layout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CODE_L3/R3 were unconditional in platform.h, so the Input pak drew L3/R3 pills on every device, and is_rg34xx wrongly stripped L3/R3 from the RG34XXSP (which has two clickable sticks). detect_device() now sets dev_has_lstick/dev_has_rstick per model and those flags gate CODE_L3/R3, JOY_L3/R3, and AXIS_LX/LY/RX/RY. Verified stick matrix (specs + RG40XXV on hardware; every stick clicks): dual on RG35xxH/RG35xxPro/RG34xxSP/RG40xxH/RGcubexx, left-only on RG40xxV, none on RG28xx/RG34xx/RG35xx Plus/2024/SP. Unknown RG35xx variants default to stickless; anything else unknown keeps the previous dual-stick layout. No H700 Anbernic device has an Fn switch. No shared-code changes; minput adapts via its existing has_* derivation. Exact RGXX_MODEL strings for the RG35xx family and RG40xxH still need on-device confirmation. --- docs/h700-port/03-platform-layer.md | 29 ++++++++++++++++++++++++++--- docs/h700-port/08-testing-status.md | 1 + docs/h700-port/09-roadmap.md | 12 +++++++++--- workspace/h700/platform/platform.c | 25 +++++++++++++++++++++++++ workspace/h700/platform/platform.h | 18 ++++++++++-------- 5 files changed, 71 insertions(+), 14 deletions(-) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 59e8b4371..c6afaead3 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -7,12 +7,31 @@ constants from the old rg35xxplus port (`git show 8cd78866:...`). One platform serves all devices: `DEVICE`/`RGXX_MODEL` env (set by launch.sh, see 02) → `detect_device()` sets `is_rg28xx / is_rg34xx / is_cube` globals that drive -resolution, rotation, and stick availability — the tg5040 `is_brick` pattern. +resolution and rotation, plus `dev_has_lstick / dev_has_rstick` capability flags +that drive stick availability — the tg5040 `is_brick` pattern. + +Analog stick matrix (verified against Retro Catalog/Anbernic specs 2026-07, RG40XXV +confirmed on hardware; every stick present clicks, so L3 ⇔ left stick, R3 ⇔ right): + +| Device | Sticks | Detection key | +|---|---|---| +| RG28XX, RG34XX, RG35XX Plus/2024/SP | none | `RG28xx` / `RG34xx` exact; `RG35xx` prefix default | +| RG35XX H, RG35XX Pro | dual | `RG35xx` prefix + `H`/`Pro` suffix | +| RG34XXSP | dual | `RG34xxSP` exact | +| RG40XX H, RG CubeXX, unknown | dual | `RG40xxH`, `RGcube*`; dual is the fallback | +| RG40XX V | left only | `RG40xxV` exact | + +Unknown `RG35xx` variants default to stickless (most of that family is); anything +else unknown defaults to dual (today's behavior, covers `DEVICE=rg40xx` without a +model string). No H700 Anbernic device has an Fn switch. Exact `RGXX_MODEL` strings +still unconfirmed for the RG35xx family and RG40xxH (same caveat as msettings' +displaycal presets). ## platform.h (as shipped) ```c extern int is_rg28xx, is_rg34xx, is_cube; +extern int dev_has_lstick, dev_has_rstick; #define FIXED_SCALE 2 #define FIXED_WIDTH (is_cube?720:(is_rg34xx?720:640)) @@ -67,8 +86,12 @@ Verified mappings (also recorded in 00): shortcuts overlay into brightness mode. Fix: `button_from_code()` no longer maps `CODE_MENU_ALT` to `BTN_MENU` (keymon likewise ignores it); tap-vs-hold is derived from the clean 312 timing. The SDL path was never affected (`JOY_MENU_ALT = JOY_NA`). -- Analog sticks: ABS_Z/RX/RY/RZ, raw 0..4096, scaled ×32767/4096. Sticks exist on - RG40XXV and cube only; `is_*` conditionals set JOY_L3/R3 = NA elsewhere. +- Analog sticks: ABS_Z/RX/RY/RZ, raw 0..4096, scaled ×32767/4096. Presence varies + per model (see the stick matrix above); `dev_has_lstick`/`dev_has_rstick` gate + CODE_L3/R3, JOY_L3/R3, and AXIS_LX/LY/RX/RY to NA where the stick is absent, so + the Input pak and shared input code adapt without platform-independent changes. + (Previously CODE_L3/R3 were unconditional, so the Input pak drew L3/R3 pills on + every device, and `is_rg34xx` wrongly stripped L3/R3 from the RG34XXSP.) - SDL indices (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 MENU=8, L3=9 L2=10 R2=11 R3=12, MINUS=15 PLUS=16; axes LX=0 LY=1 RX=2 RY=3. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index d2877b78a..f46aa4019 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -39,6 +39,7 @@ | WiFi survives sleep; NTP sync | ✅ | | Deep sleep (auto/manual) + wake | ✅ fixed & user-tested on RG34XXSP 2026-07-09 (4 stacked bugs — see 06); in-game (minarch) path shares the code but untested; RG40XXV re-test pending | | Files app (NextCommander): input, scaling, first-frame render | ✅ fixed & user-tested on RG40XXV 2026-07-09 (SDL joystick classification patch, button index remap, square-window + oversize-window fixes, startup warmup render, PPU 2 — see 01/03) | +| Input pak: per-device stick layout (L3/R3 pills only where sticks exist; RG40XXV shows L3 only) | ⬜ (code-gated 2026-07-10 via `dev_has_lstick/rstick` — see 03; needs on-device check + `RGXX_MODEL` string capture on RG35xx family / RG40xxH) | | Screenshots, Recently Played, game switcher, box art | ⬜ | | Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | | Battery % accuracy vs stock; charging indicator; charge-while-sleeping | ⬜ | diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 72a56c119..7b54cc9a7 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -49,9 +49,15 @@ Ordered by impact within each section. 8. **Audit Brick-era feature assumptions in shared UI** — NextUI only ever targeted the Brick / Smart Pro, and several UI pieces hardcode that hardware. Known cases on RG XX: - - **Input tester pak** shows the Brick's button layout: no analog sticks - rendered, R3 assumed always present. Needs device-aware layout (RG40XXV has - dual sticks + L3/R3; 34XX/28XX have none). + - **~~Input tester pak~~ Done (2026-07-10)** — L3/R3 pills were drawn on every + device because `CODE_L3/R3` were unconditional in platform.h, and `is_rg34xx` + wrongly stripped L3/R3 from the RG34XXSP. Now `detect_device()` sets + `dev_has_lstick`/`dev_has_rstick` per model (verified matrix in 03: 35XXH/ + 35XXPro/34XXSP/40XXH/cube dual, 40XXV left-only, 28XX/34XX/35XX+/2024/SP + none — note the RG40XXV has *one* stick, clickable as L3) and those flags + gate CODE_L3/R3, JOY_L3/R3, and the AXIS_* macros. Zero shared-code changes; + the Input pak adapts via its existing `has_*` derivation. Remaining: confirm + exact `RGXX_MODEL` strings for the RG35xx family / RG40xxH on hardware. - **Fn switch option** in the settings app — the sliding Fn button doesn't exist on any RG XX device; hide/gate it for h700. - **~~Display settings~~ Done (2026-07-09, `0e60efd`)** — the dead enhance diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 383132e72..cb9d3d470 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -29,6 +29,8 @@ int is_rg28xx = 0; int is_rg34xx = 0; int is_cube = 0; +int dev_has_lstick = 0; +int dev_has_rstick = 0; static int wake_fd = -1; #define H700_INPUT_COUNT 12 @@ -185,6 +187,29 @@ static void detect_device(void) { is_rg28xx = exactMatch("rg28xx", device) || exactMatch("RG28xx", model); is_rg34xx = exactMatch("rg34xx", device) || exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model); is_cube = exactMatch("cube", device) || exactMatch("RGcubexx", model); + + // Analog sticks per model; every stick on these devices clicks (L3 = left, + // R3 = right). Exact RGXX_MODEL strings confirmed so far: RG28xx, RG34xx, + // RG34xxSP, RG40xxV, RGcubexx. The RG35xx family and RG40xxH are matched by + // prefix/suffix until their exact strings are confirmed (same as msettings). + dev_has_lstick = 1; // unknown models keep the previous dual-stick layout + dev_has_rstick = 1; + if (is_rg28xx) { + dev_has_lstick = dev_has_rstick = 0; + } + else if (is_rg34xx) { + // the RG34xx has no sticks, the RG34xxSP has two + dev_has_lstick = dev_has_rstick = exactMatch("RG34xxSP", model); + } + else if (exactMatch("RG40xxV", model)) { + dev_has_rstick = 0; // single left stick + } + else if ((model && prefixMatch("RG35xx", model)) || exactMatch("rg35xx", device)) { + // only the H and Pro have sticks; Plus/2024/SP (and unknown variants, + // since most of the family is stickless) don't + char *suffix = (model && prefixMatch("RG35xx", model)) ? model + strlen("RG35xx") : ""; + dev_has_lstick = dev_has_rstick = prefixMatch("H", suffix) || prefixMatch("Pro", suffix); + } } void PLAT_initPlatform(void) { diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 87bc7d21d..8b14a7eee 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -14,6 +14,8 @@ extern int is_rg28xx; extern int is_rg34xx; extern int is_cube; +extern int dev_has_lstick; +extern int dev_has_rstick; /////////////////////////////// @@ -62,8 +64,8 @@ extern int is_cube; #define CODE_R1 309 #define CODE_L2 314 #define CODE_R2 315 -#define CODE_L3 313 -#define CODE_R3 316 +#define CODE_L3 (dev_has_lstick ? 313 : CODE_NA) +#define CODE_R3 (dev_has_rstick ? 316 : CODE_NA) #define CODE_MENU 312 #define CODE_MENU_ALT 354 @@ -91,8 +93,8 @@ extern int is_cube; #define JOY_R1 5 #define JOY_L2 10 #define JOY_R2 11 -#define JOY_L3 (is_rg34xx || is_rg28xx ? JOY_NA : 9) -#define JOY_R3 (is_rg34xx || is_rg28xx ? JOY_NA : 12) +#define JOY_L3 (dev_has_lstick ? 9 : JOY_NA) +#define JOY_R3 (dev_has_rstick ? 12 : JOY_NA) #define JOY_MENU 8 #define JOY_POWER JOY_NA @@ -104,10 +106,10 @@ extern int is_cube; #define AXIS_L2 AXIS_NA #define AXIS_R2 AXIS_NA -#define AXIS_LX 0 -#define AXIS_LY 1 -#define AXIS_RX 2 -#define AXIS_RY 3 +#define AXIS_LX (dev_has_lstick ? 0 : AXIS_NA) +#define AXIS_LY (dev_has_lstick ? 1 : AXIS_NA) +#define AXIS_RX (dev_has_rstick ? 2 : AXIS_NA) +#define AXIS_RY (dev_has_rstick ? 3 : AXIS_NA) /////////////////////////////// From 836c9095835c1637f0231c4283c733e46609a834 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 20:41:38 +0200 Subject: [PATCH 34/76] docs(h700): Bootlogo pak user-tested on RG40XXV Apply + first-apply original.bmp backup verified on hardware; the post-apply reboot is a bit slow but acceptable. 08 matrix row ticked, roadmap 13a marked done. Other panel sizes (34xx/28xx/cube) remain unexercised. --- docs/h700-port/08-testing-status.md | 2 +- docs/h700-port/09-roadmap.md | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index f46aa4019..477e35470 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -48,7 +48,7 @@ | Pak Store install | ⬜ | | OTA update flow | ⬜ | | BT controller pairing + input | ⬜ | -| Bootlogo pak: preset carousel, apply (writes `mmcblk0p2`), first-apply `original.bmp` backup, restore | ⬜ (ported 2026-07-09; needs one apply/restore cycle on hardware) | +| Bootlogo pak: preset carousel, apply (writes `mmcblk0p2`), first-apply `original.bmp` backup, restore | ✅ user-tested on RG40XXV 2026-07-09: apply works, `original.bmp` backup captured; reboot after apply is a bit slow but acceptable | | BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | | Headphone jack detection | ✖ not wired (05) | | RG34XXSP: general H700 port + 720×480 UI | ✅ user-tested; works like RG40XXV | diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 7b54cc9a7..0e45e094d 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -90,12 +90,13 @@ Ordered by impact within each section. displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH while at it). -13a. **~~Bootlogo pak~~ Ported (2026-07-09)** — `Bootlogo.pak` now builds and ships - for h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel +13a. **~~Bootlogo pak~~ Done (2026-07-09)** — `Bootlogo.pak` builds and ships for + h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel resolution (`640x480`, `720x480`, `480x640` rotated for RG28XX, `720x720`), folder picked via `$DEVICE`; writes `bootlogo.bmp` to `mmcblk0p2` and backs up - the stock logo as `original.bmp` on first apply (02, 03). **Untested on - hardware** — needs one apply/restore cycle on a real device before release. + the stock logo as `original.bmp` on first apply (02, 03). User-tested on + RG40XXV: apply + `original.bmp` backup verified; the post-apply reboot is a + bit slow but acceptable. Other panel sizes (34xx/28xx/cube) still unexercised. ## P2 — Cleanup / refactors / simplifications From a7874c164b56978b987bfb4b60335e7a7d09fa66 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 9 Jul 2026 22:16:53 +0200 Subject: [PATCH 35/76] fix(h700): hide unavailable Fn switch settings Exclude H700 from the Settings app's physical mute-toggle capability so devices without the slider no longer show its configuration. Keep the option available on tg5040 and tg5050, and record the completed H700 roadmap item. --- docs/h700-port/09-roadmap.md | 5 +++-- workspace/all/settings/settings.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 0e45e094d..28bb3d5cc 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -58,8 +58,9 @@ Ordered by impact within each section. gate CODE_L3/R3, JOY_L3/R3, and the AXIS_* macros. Zero shared-code changes; the Input pak adapts via its existing `has_*` derivation. Remaining: confirm exact `RGXX_MODEL` strings for the RG35xx family / RG40xxH on hardware. - - **Fn switch option** in the settings app — the sliding Fn button doesn't exist - on any RG XX device; hide/gate it for h700. + - **~~Fn switch option~~ Done (2026-07-09)** — the sliding Fn button doesn't + exist on any RG XX device, so the settings capability predicate now excludes + h700 while retaining the option on tg5040/tg5050. - **~~Display settings~~ Done (2026-07-09, `0e60efd`)** — the dead enhance controls (contrast/saturation/exposure) are now hidden on h700; displaycal reboot persistence fixed (was clobbered to defaults every boot); per-model diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index eb8563d7f..058b64289 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -361,7 +361,7 @@ namespace { } bool hasMuteToggle() const { - return m_platform == tg5050 || m_platform == tg5040 || m_platform == h700; + return m_platform == tg5050 || m_platform == tg5040; } bool hasAnalogSticks() const { From 8290d7f966d969d156ca8e5c32838782c755c175 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 10 Jul 2026 00:15:15 +0200 Subject: [PATCH 36/76] docs(h700): record RG34XXSP alpha testing Update the H700 validation status and roadmap with the latest RG34XXSP results, known runtime issues, and remaining device checks. Add a core and game compatibility matrix and expose the relevant alpha limitations in the release README. --- docs/h700-port/00-device-facts.md | 22 +++--- docs/h700-port/03-platform-layer.md | 17 +++-- docs/h700-port/04-video-display.md | 37 +++++---- docs/h700-port/06-power-sleep-battery.md | 39 +++++++--- docs/h700-port/07-wifi-bluetooth.md | 7 +- docs/h700-port/08-testing-status.md | 78 ++++++++++++++----- docs/h700-port/09-roadmap.md | 95 ++++++++++++++++-------- docs/h700-port/10-core-game-matrix.md | 75 +++++++++++++++++++ docs/h700-port/README.md | 57 ++++++++------ skeleton/BASE/README.txt | 6 +- 10 files changed, 312 insertions(+), 121 deletions(-) create mode 100644 docs/h700-port/10-core-game-matrix.md diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 51e8c9230..ea2258189 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -2,7 +2,7 @@ Ground truth for the H700 platform. Everything here was verified live on hardware over SSH (probed 2026-07-08, corrections folded in from the implementation/review -cycle 2026-07-09) or recovered from git history. Re-run the probes after any +cycle through 2026-07-10) or recovered from git history. Re-run the probes after any Anbernic stock-firmware update — paths have historically been stable, but the `dmenu_ln`/muOS hooks are stockmod-version-dependent. @@ -12,7 +12,7 @@ Anbernic stock-firmware update — paths have historically been stable, but the |---|---|---| | TrimUI Brick (TG5040, A133P) | Probed live | Reference — NextUI runs perfectly | | Anbernic RG40XXV (H700) | Probed live | Port target #1 (was running stockmod) — **primary tested device** | -| Anbernic RG34XXSP (H700) | User-tested | Port target #2 (clamshell, lid sensor) — general parity with RG40XXV, lid wake/sleep broken | +| Anbernic RG34XXSP (H700) | User-tested | Port target #2 (clamshell, lid sensor) — strong 720×480/UI parity; core and lid edge cases tracked in 08 | | Anbernic RG28XX (H700) | Not yet tested | Port target #3 (rotated 480×640 panel) | ## RG40XXV (H700) — probed live @@ -98,8 +98,10 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `/sys/power/state`: **`freeze mem`** — real suspend-to-RAM (same as TG5040) - `echo mem` suspend works; wake source is the **power button** (AXP2202 PEK). **RTC alarm wake does NOT fire** — no timed wake; don't build features on it. - ⚠️ In the shipped port, wake is **unreliable — the device sometimes hangs entering or - leaving suspend** (open issue, see 06 and 09-roadmap). + The shipped sleep/wake path is reliable in repeated RG40XXV/RG34XXSP testing, + including in-game resume and power-off auto-resume. RG34XXSP exception: the power + button currently wakes light sleep while the lid is closed despite the software + lid gate (see 06). Charging intentionally prevents deep sleep in shared code. - PMIC: **AXP2202** — `/sys/class/power_supply/axp2202-battery/` and `axp2202-usb/` - Battery: `capacity`, `status`, `voltage_now`, `temp`, `time_to_empty_now`, `time_to_full_now`, `charge_counter`, `health` @@ -108,8 +110,9 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `work_led` — power LED (0=on, 1=off) — used by the port around backlight off/on - `workled_sleep` — LED behavior during sleep - `lowpwr_led`, `led_test` - - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — wired, but lid - wake/sleep is broken on RG34XXSP (screen stays on); polarity/values still need probing + - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — polarity verified + (`1` = open); lid close sleeps and lid open wakes screen-off. Deep suspend still + requires power, but power also wakes light sleep while closed (unexpected; open). - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` - `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) @@ -208,10 +211,9 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf clone base. ## Facts still unverified (need hardware/testing) -1. `hallkey` semantics on RG34XXSP: polarity/values, whether `has_lid` is set, and why - lid close does not sleep/blank the screen. +1. Why RG34XXSP power-key release wakes light sleep while `hallkey=0` even though + `PLAT_shouldWake()` contains a closed-lid gate. 2. RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path end-to-end. 3. Headphone jack detection on 2026 firmware (old note: `jack_state` never changes). 4. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. -5. Whether device glib (2.72) is ≥ what settings.elf links against — it loads and runs, - so empirically fine, but never explicitly checked. +5. Exact stock `RGXX_MODEL` strings for the RG35XX family and RG40XXH. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index c6afaead3..979db6414 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -11,7 +11,8 @@ resolution and rotation, plus `dev_has_lstick / dev_has_rstick` capability flags that drive stick availability — the tg5040 `is_brick` pattern. Analog stick matrix (verified against Retro Catalog/Anbernic specs 2026-07, RG40XXV -confirmed on hardware; every stick present clicks, so L3 ⇔ left stick, R3 ⇔ right): +and RG34XXSP confirmed on hardware; every stick present clicks, so L3 ⇔ left stick, +R3 ⇔ right): | Device | Sticks | Detection key | |---|---|---| @@ -27,6 +28,11 @@ model string). No H700 Anbernic device has an Fn switch. Exact `RGXX_MODEL` stri still unconfirmed for the RG35xx family and RG40xxH (same caveat as msettings' displaycal presets). +The Input pak intentionally visualizes digital button/click state only. It detects +stick availability and draws L3/R3, but `minput.c` has no rendering path for analog +axis movement; RG34XXSP showing working L3/R3 without moving-stick graphics is expected +and is not an H700 regression. + ## platform.h (as shipped) ```c @@ -109,14 +115,14 @@ open/closed per poll and could drop the wake press between polls. |---|---| | Video | `#include "generic_video.c"` — custom SDL2 mali driver does the rest (04) | | Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, coarse bucketing in shared code — identical to tg5040 | -| CPU speed | `governor.sh` via `system()`: auto=schedutil, performance=max 1512000, powersave=conservative capped mid-range. Single A53 cluster → `PLAT_pinToCores` no-op | +| CPU speed | `governor.sh` via `system()`: auto=schedutil, performance=max 1512000, powersave=conservative capped mid-range. Manual changes work. RG34XXSP MD testing exposed render-setting-sensitive auto frequencies (often 480 MHz when slow; ~720 MHz when smooth), still under investigation. Single A53 cluster → `PLAT_pinToCores` no-op | | CPU temp | thermal_zone0 | | GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | | GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | | Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | | LEDs | `MAX_LIGHTS 0`, all `PLAT_setLed*` stubs — hardware has no RGB LEDs. `work_led` used only as sleep/backlight indicator | | Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | -| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); intended behavior is lid-close → sleep and power-key swallowed while closed. **Tested on RG34XXSP: not working yet; the screen stays on when the lid closes.** | +| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP issue: power also wakes light sleep while the lid is closed despite the intended gate. | | Model | `PLAT_getModel` → "Anbernic " + `RGXX_MODEL` (copied into a static buffer, not a raw getenv pointer) | | Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezones via `timedatectl set-timezone`/`list-timezones`, NTP via `set-ntp` (systemd-timesyncd) — much cleaner than tg5040's uci | | Turbo | `PLAT_canTurbo()=false`, no-ops (tg5040's turbo rides trimui_inputd; no H700 equivalent wired) | @@ -135,11 +141,12 @@ open/closed per poll and could drop the wake press between polls. Tested on RG40XXV and RG34XXSP: UI and audible levels are correct from mute through 100%, with no current volume-control issues. - **Mute**: `SPK` switch off + store/restore volume (no `/sys/class/speaker/mute` on - H700). h700 is included in `hasMuteToggle()` in settings.cpp. + H700). The physical volume UI still supports mute; Fn-switch settings are gated off + because RG XX devices have no Fn switch. - **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — works (tested ✅). The sibling `enhance_contrast` / `enhance_saturation` / `enhance_bright` attrs are also written, **but have no visible effect on RG XX - panels** — those settings need gating off for h700 (09-roadmap #8). All + panels** — those settings are gated off for h700 (09-roadmap #8). All `scale*()` switches carry `default:` cases (a draft could hit uninitialized values on out-of-range input). - **DisplayCal**: same gamma-LUT ioctls as tg5040 (0x10b/0x10c/0x10d) — worked 1:1 as diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index 12b68abc2..f13e643ac 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -18,27 +18,27 @@ The stack: - GLES linked directly (`-lGLESv2 -lEGL`), **not** via the SDK's pkg-config (libUMP trap, see 01). `generic_video.c` gained hard error checks: SDL init / window / renderer / GL-context failures now `exit(1)` instead of limping on — on a device - with no display fallback, failing loudly into the crash-restart loop (which brings - up SSH) beats a black screen. + with no display fallback, failing loudly into the bounded crash-restart loop beats + a black screen; the release path powers off after the crash limit. ## Per-device geometry | Device | Panel | FIXED_W×H | Status | |---|---|---|---| | RG40XXV | 640×480 4:3 | 640×480 | ✅ shipped, tested | -| RG34XXSP | 720×480 3:2 | 720×480 | ✅ user-tested; works like RG40XXV | +| RG34XXSP | 720×480 3:2 | 720×480 | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus tested-good; resolution-specific overlays untested | | RG28XX | 480×640 portrait | 640×480 logical | rotation plumbed, untested (below) | | RGcubexx | 720×720 | 720×720 | wired (`is_cube`), untested | ### 480p UI — mostly fine, polish pass pending These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't rendered at 480p for ~2 years. Real-use verdict on RG40XXV and RG34XXSP: **no systemic -breakage — OK for alpha**. Known concrete issue: in some paks (e.g. the Battery pak) the -button-hint pills are large enough to overlap each other. A full audit of every -shipped-by-default UI surface at 640×480/720×480 is still owed before release -(09-roadmap). Related but distinct: several shared UI pieces hardcode Brick-era -hardware assumptions (Input tester layout, Fn switch, dead display controls) — see -09-roadmap #8. +breakage — OK for alpha**. The broad 720×480 surface sweep is now clean, including the +keyboard used for RetroAchievements credentials. Screenshots and resolution-specific +overlays remain untested; no suitable 720×480 overlay asset was available. Related but +distinct: the Input tester is now device-aware, the dead +display controls are hidden/verified, and Fn-switch settings are gated off on h700. +The broader capability sweep remains a useful regression check (09-roadmap #8). ## RG28XX rotation — implemented, unvalidated @@ -95,7 +95,8 @@ displaycal.h only. Default brightness on h700 is 4 (tg5040 Brick keeps 2). white-point correction (displaycal), RGB tuning. The `enhance_*` display controls (contrast/saturation/exposure) **do nothing on RG XX** — the sysfs attrs exist (00) yet have no visible effect — so since 2026-07-09 they are hidden on h700 via the -`DeviceInfo` capability gates in settings.cpp (including the mute-toggle variants). +`DeviceInfo` capability gates in settings.cpp (including the mute-toggle variants), +visually verified on RG40XXV. The libmsettings plumbing remains (harmless no-ops; the shared API keeps the symbols), and syncsettings still "restores" them on resume — a cosmetic cleanup at most. @@ -110,10 +111,18 @@ pre-alpha graphics stack. **The real root cause turned out to be the missing 64- and the silent dlopen failure corrupted image loading (fixed in `510d3bb1`, see pitfall #2 in 01). The alpha-blending code on main was never at fault. -Consequence: the h700 branch has been **rebased onto current main, alpha-blending -work included** (done 2026-07-09). `workspace/all/` carried zero net change from the -reverted experiment, so the rebase was clean on that front. Closing check still open: -verify rendering on device with the rebased build (09-roadmap #7). +Consequence: the h700 branch was **rebased onto main with the alpha-blending work +included** (done 2026-07-09). `workspace/all/` carried zero net change from the +reverted experiment, so the rebase was clean on that front. Game switcher and box-art +rendering are clean at 720×480; screenshots and resolution-specific overlays remain to +be checked. Upstream main has since advanced, so rebase once more before final merge. + +## Bootlogo preset previews + +The 640×480 catalog works on RG40XXV. On RG34XXSP the pak opens but renders no preset +images from `720x480/`. The source BMPs are valid 720×480×24 files and direct inspection +shows non-black content, so this is a runtime path/loading/rendering problem rather than +blank generated assets. Applying/restoring a logo was not attempted on RG34XXSP. ## Boot splash diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index 890bdf669..02437c3fe 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -1,6 +1,6 @@ # 06 — Power, Sleep, Battery, Lid -## ✅ Sleep/wake fixed (2026-07-09, verified on RG34XXSP) +## ✅ Sleep/wake fixed (2026-07-09, verified on RG34XXSP and RG40XXV) The former "#1 open defect" turned out to be four separate bugs, all found and fixed: @@ -30,10 +30,14 @@ The former "#1 open defect" turned out to be four separate bugs, all found and f (wifi/bt/hooks). Measured wake-to-responsive: ~0.5–1.2 s (audio reinit 150–200 ms, formerly 9–10 s). -Verified by physical testing on RG34XXSP (stockmod OS): repeated power-tap sleep/wake -cycles, screen-off → suspend two-stage escalation with 10 s/10 s timers, suspend → -power-key wake, lid-close → sleep, and state restore (display settings, WiFi -reconnect). Long-press power-off unaffected. +Verified by physical testing on RG34XXSP (stockmod OS) and re-tested on RG40XXV: +repeated power-tap sleep/wake cycles, screen-off → suspend two-stage escalation with +10 s/10 s timers, suspend → power-key wake, lid-close → sleep, and state restore +(display settings, WiFi reconnect). In-game sleep/resume and in-game power-off → +power-on → automatic resume of the running game are also verified. Long-press +power-off is unaffected. Two RG34XXSP edge cases were found on 2026-07-10: a power-key +release wakes light sleep even while the lid remains closed, and charging keeps the +device in light sleep rather than deep suspend. Stockmod/logind interference was ruled out: `HandlePowerKey=ignore` is in place (our launch.sh drop-in), stockmod's `pwr_new.sh` is not running under NextUI, and no evdev @@ -78,7 +82,7 @@ Two layers, as on tg5040: above); lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled while charging/HDMI) works unchanged on top. -## Lid (RG34XXSP) — working +## Lid (RG34XXSP) — working with one wake-gate issue `LID_PATH = axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if the file exists (absent on RG40XXV). Polarity verified on hardware: 1 = open. Lid close → @@ -86,17 +90,23 @@ Two layers, as on tg5040: suspend timeout). Lid open wakes from *screen-off* sleep (hallkey polled by `PLAT_shouldWake`); waking from *deep* suspend requires the power key because the hall sensor is not a kernel wake source — same as stock firmware, considered desirable. -Power key is ignored as a wake source while the lid is closed. +The intended software behavior is to ignore power while the lid is closed, and +`PLAT_shouldWake()` has that gate, but hardware testing shows power currently wakes +light sleep anyway. The cause is unresolved. ## Battery - `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, coarse - bucketing in shared code — same paths as tg5040, copied verbatim. **Accuracy vs - stock reading, charging indicator, and charge-while-sleeping: untested.** + bucketing in shared code — same paths as tg5040, copied verbatim. Charging detection + and the UI indicator work on RG34XXSP; percentage accuracy vs stock remains untested. +- While charging, lid or power sleep reaches screen-off/light sleep only. This matches + shared `PWR_waitForWake()` behavior: the charging check deliberately skips + `PWR_deepSleep()` and checks again a minute later. Decide separately whether H700 + should override that product policy; it is not a failed suspend attempt. - Richer metrics (`time_to_empty_now`, `voltage_now`, `temp`, `charge_counter`) are available for future batmon extensions; not wired. -- Standby drain: never measured (plan target was ≤ stock + ~1% over 8 h; blocked on - the wake-reliability issue making soak tests moot). +- Standby drain: not yet measured (plan target is ≤ stock + ~1% over 8 h); the test + is now unblocked by reliable sleep/wake. ## Power off / reboot @@ -109,4 +119,9 @@ by u-boot/stock before our hijack, untouched. `governor.sh`: auto=`schedutil`, performance=`performance` @1512000, powersave=`conservative` capped mid-range. Menu vs in-game profiles ride the shared -settings; performance is forced during game launch. Single cluster → no core pinning. +settings; performance is forced during game launch. Manual in-game changes are clean. +RG34XXSP MD testing exposed an auto-mode issue: slow cases sat near 480 MHz, while a +stock shader + 3× scale + linear interpolation drove ~720 MHz and ran smoothly; +powersave (~1.1 GHz observed) and performance (~1.5 GHz) were also smooth. The coupling +between render settings, workload detection, and schedutil needs debugging. Single +cluster → no core pinning. diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index 2232f50c3..ddd213eeb 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -32,10 +32,11 @@ Suspend interplay: WiFi does not survive `mem` suspend on its own; the suspend script stops the stack in `before()` and restarts it in `after()` (06). Verified working across sleep on RG40XXV. -Untested so far: RetroAchievements login/unlock, Pak Store install, OTA update flow -(all pure HTTP on top of a working wlan0 — expected free, not yet exercised). +RetroAchievements login and unlock work on RG34XXSP, including credential entry through +the on-screen keyboard. Pak Store and OTA update are explicitly excluded from the alpha +scope; testing is not applicable and they are not alpha release gates. -## Bluetooth (as shipped — system BlueZ, input yes, audio gated off) +## Bluetooth (as shipped — system BlueZ, input implemented, audio gated off) - BlueZ 5.64 on device → no `btmanager`/upgrade-pakz (as planned); `generic_bt.c` drives `bluetoothctl` diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 477e35470..d6fe42452 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -7,6 +7,7 @@ | RG40XXV | Probed live | Primary bring-up device | | RG34XXSP | User-tested | General parity with RG40XXV; sleep/wake + lid validated here | | RG28XX | Not yet tested | Rotation validation target | +| RGcubexx | No device available | External alpha-validation target | | TrimUI Brick TG5040 | Probed live | Regression reference (behavioral 1:1 comparisons) | **Dev-loop tips:** @@ -16,9 +17,9 @@ - Repeated `nextui.elf` crashes now log the crash limit and power off. Use TF2 logs for crash-loop debugging; the release runtime powers off instead of starting SSH. -## Validation matrix (status as of 2026-07-09, RG40XXV unless noted) +## Validation matrix (status as of 2026-07-10, RG40XXV unless noted) -✅ tested & passed ⚠️ tested, has issues ⬜ untested ✖ not implemented +✅ tested & passed ⚠️ tested, has issues ⬜ untested ➖ explicitly out of alpha scope ✖ not implemented ### Functional | Item | Status | @@ -29,39 +30,78 @@ | Brightness 0–10 + colortemp ramps; persist across reboot | ✅ | | MENU short-tap → shortcuts overlay vs. hold → brightness (compound-tap fix, see 00/03) | ✅ tested on RG34XXSP; firmware quirk is common to the H700 line, expected fine on all RG XX | | Displaycal RGB gains: act, persist, survive sleep + game launch | ✅ | -| Displaycal survives reboot (was clobbered to defaults every boot; fixed 2026-07-09) | ✅ verified on RG40XXV by patching msettings.bin + reboot | +| Displaycal survives reboot (was clobbered to defaults every boot; fixed 2026-07-09) | ✅ verified on RG40XXV and RG34XXSP | | Fresh-install defaults: brightness 4, displaycal off/neutral | ✅ verified on RG40XXV (deleted msettings.bin + reboot) | -| Dead enhance controls (contrast/saturation/exposure) hidden on h700 | ✅ code-gated 2026-07-09; visual check on device pending | +| Dead enhance controls (contrast/saturation/exposure) hidden on h700 | ✅ code-gated and visually verified on RG40XXV 2026-07-09 | +| Fn-switch settings hidden on h700 | ✅ capability-gated; RG XX devices have no Fn switch | | Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | | Volume UI + levels, mute through 100% | ✅ tested on RG40XXV and RG34XXSP; no known issues | | Rumble (moto on/off) | ✅ | | WiFi scan/connect/forget | ✅ | | WiFi survives sleep; NTP sync | ✅ | -| Deep sleep (auto/manual) + wake | ✅ fixed & user-tested on RG34XXSP 2026-07-09 (4 stacked bugs — see 06); in-game (minarch) path shares the code but untested; RG40XXV re-test pending | -| Files app (NextCommander): input, scaling, first-frame render | ✅ fixed & user-tested on RG40XXV 2026-07-09 (SDL joystick classification patch, button index remap, square-window + oversize-window fixes, startup warmup render, PPU 2 — see 01/03) | -| Input pak: per-device stick layout (L3/R3 pills only where sticks exist; RG40XXV shows L3 only) | ⬜ (code-gated 2026-07-10 via `dev_has_lstick/rstick` — see 03; needs on-device check + `RGXX_MODEL` string capture on RG35xx family / RG40xxH) | -| Screenshots, Recently Played, game switcher, box art | ⬜ | +| Deep sleep (auto/manual) + wake | ⚠️ core paths work on RG34XXSP and RG40XXV, including in-game resume and power-off auto-resume. RG34XXSP POWER can wake the device while the lid is closed; charging intentionally prevents deep sleep in shared code (06) | +| Files app (NextCommander): input, scaling, first-frame render | ✅ tested on RG40XXV and RG34XXSP; PPU 2 retained for alpha | +| Input pak: per-device stick layout | ✅ RG40XXV shows working L3 only; RG34XXSP shows working L3/R3. Analog movement is not visualized by the existing Input pak and is out of scope for this port | +| Recently Played + game switcher | ✅ tested on RG40XXV and RG34XXSP | +| Screenshots | ⬜ testing planned | +| Box art | ✅ tested at 720×480 on RG34XXSP | | Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | -| Battery % accuracy vs stock; charging indicator; charge-while-sleeping | ⬜ | +| Battery % accuracy vs stock | ⬜ | +| Charging detection/indicator; sleep while charging | ⚠️ indicator works on RG34XXSP; charging permits light sleep but shared power code deliberately suppresses deep sleep | | Overnight drain (8 h mem-sleep vs stock baseline) | ⬜ (unblocked — sleep/wake now reliable) | -| RetroAchievements login + unlock | ⬜ | -| Pak Store install | ⬜ | -| OTA update flow | ⬜ | +| RetroAchievements login + unlock | ✅ works on RG34XXSP; on-screen credential keyboard also verified | +| Pak Store install | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | +| OTA update flow | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | | BT controller pairing + input | ⬜ | -| Bootlogo pak: preset carousel, apply (writes `mmcblk0p2`), first-apply `original.bmp` backup, restore | ✅ user-tested on RG40XXV 2026-07-09: apply works, `original.bmp` backup captured; reboot after apply is a bit slow but acceptable | +| Bootlogo pak, RG40XXV 640×480 | ✅ carousel/apply/backup tested; restore inferred via same apply path | +| Bootlogo pak, RG34XXSP 720×480 | ⚠️ pak opens with no visible presets. Source BMPs are valid and non-black; runtime path/loading/rendering needs investigation. Apply/restore not attempted | | BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | | Headphone jack detection | ✖ not wired (05) | -| RG34XXSP: general H700 port + 720×480 UI | ✅ user-tested; works like RG40XXV | -| RG34XXSP: lid sleep/wake | ✅ lid close sleeps; lid open wakes from screen-off; power key wakes from deep suspend (stock-like, desired — see 06) | +| RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus work well; resolution-specific overlays untested | +| RG34XXSP: lid sleep/wake | ⚠️ lid close and open work; deep suspend requires power as expected, but power also wakes light sleep while the lid is closed | | RG28XX: rotated UI + games | ⬜ (plumbing in place, unvalidated — 04) | -| RGcubexx: 720×720 | ⬜ | +| RGcubexx: 720×720 | ⬜ no device available; intentionally an external alpha-validation target | ### Performance | Item | Status | |---|---| -| GBA/SNES/PS1 full speed with vsync, no audio underruns | ✅ | -| Frame pacing / tearing / input lag vs stock RA | ⬜ (no complaints observed, not measured) | -| Governor transitions don't stutter audio | ⬜ | +| GBA/SNES/PS1 full speed with vsync, no audio underruns | ✅ on RG40XXV; RG34XXSP PS1 currently crashes during launch | +| Frame pacing / tearing / input lag vs stock RA | ✅ gameplay-tested on RG40XXV; no visible pacing, tearing, latency, or audio issues (not instrumented) | +| Manual governor changes don't stutter audio | ✅ tested in-game on RG34XXSP | +| Auto governor load/frequency selection | ⚠️ MD can remain near 480 MHz and slow down depending on shader/scaling; stock shader + 3× + linear raises ~720 MHz and is smooth. Powersave/performance are smooth; needs debugging | + +### RG34XXSP core/game bring-up + +Detailed results and the remaining system backlog are tracked in +[10-core-game-matrix.md](10-core-game-matrix.md). + +| System/core | Status | +|---|---| +| GB / GBC / GBA / FC / SFC | ✅ games launch and play perfectly | +| MD / PicoDrive | ⚠️ launches, but some rendering combinations slow down with auto CPU near 480 MHz | +| FBN / FBNeo | ⚠️ missing BIOS blocked game validation; the error path then left MinArch unable to open its menu or exit | +| PS / PCSX-ReARMed | ⚠️ crashes back to NextUI during launch for every tested game | +| Remaining shipped cores | ⬜ systematic coverage pending | + +### RG34XXSP remaining validation + +- To claim full parity rather than alpha coverage, repeat the RG40XXV-scoped rows on + RG34XXSP: cold-boot soak, fresh-install defaults, brightness/colortemp behavior, + the full shader/effect sweep, rumble, and WiFi scan/connect/forget/sleep/NTP. +- Run the full per-core protocol in [10](10-core-game-matrix.md), including menu, + clean exit, save/load state, sustained Auto CPU play, sleep/resume, and power-off + auto-resume. The initial green results establish launch/gameplay, not every one of + those checks for every system. +- Test screenshots and overlays made for 720×480. +- Retest FBNeo with the required BIOS, and separately preserve the missing-BIOS error + case as a regression test after it is fixed. +- Diagnose PS1 launch and retest multiple formats/titles with the required BIOS. +- Reproduce the MD Auto CPU behavior with exact shader, scale, and interpolation + combinations. +- After the preview bug is fixed, test 720×480 Bootlogo apply, backup, and restore. +- Test BT controller pairing/input, battery percentage accuracy, and overnight drain. +- Run clean uninstall, SIGUSR1 shutdown, dirty-card recovery, and muOS/stockmod + coexistence on this hardware where practical. ### Robustness | Item | Status | diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 28bb3d5cc..d08a0856b 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,6 +1,7 @@ -# 09 — Roadmap: from working beta to a 9.5/10 port +# 09 — Roadmap: from alpha candidate to a 9.5/10 port -Everything below is verified against branch tip `0e60efd` (updated 2026-07-09). +Everything below is verified against branch tip `4c754b7`, with hardware results +recorded through 2026-07-10. Ordered by impact within each section. ## P0 — Correctness / robustness @@ -13,55 +14,66 @@ Ordered by impact within each section. satisfy the sleep condition (now `PWR_requestSleep()`), and wake froze the UI ~5–10 s (ALSA PCM held open across suspend takes SDL ~9 s to close — now closed in `PWR_enterSleep`; plus wifi/bt restart moved to `after_async &`). Unblocks the - overnight-drain test. + overnight-drain test. RG40XXV re-test, in-game sleep/resume, and power-off → + power-on → running-game resume have since been verified too. Two RG34XXSP edge + cases remain: POWER currently wakes the unit while its lid is closed, and charging + intentionally keeps the shared power path in light sleep instead of deep suspend. 2. **Decide muOS/stockmod coexistence policy** (`boot/boot.sh` — currently shows "STOCK TARGET REQUIRED" splash but *continues booting*; launch.sh drops stockmod-warning.txt). Either hard-fail with the splash held on screen, or document why continuing is safe. A user with stockmod installed currently gets a confusing half-boot. -3. **Run the untested-robustness gauntlet** (08 matrix ⬜ rows): clean uninstall, - SIGUSR1 quit, dirty-SD fsck recovery, battery accuracy/charging, screenshots/ - recents/box art, RetroAchievements, Pak Store, OTA update. Each is implemented; - none has been exercised. OTA especially — a broken update path is the worst - post-release bug class. +3. **Run the remaining robustness gauntlet** (08 matrix ⬜ rows): clean uninstall, + SIGUSR1 quit, dirty-SD fsck recovery, battery accuracy, screenshots, and overnight + drain. Box art, RetroAchievements, Recently Played, and the game switcher are + tested-good on RG34XXSP. + Pak Store and OTA update are explicitly excluded from the alpha scope; testing is + not applicable and they are not alpha release gates. 4. **~~Document the `digital volume` inversion~~ Done (2026-07-09)** — `100 - val` is intentional because the control is an attenuator. Volume UI and levels are tested-good on RG40XXV and RG34XXSP from mute through 100% (05). ## P1 — Feature completeness -5. **RG34XXSP lid fix + polish** — general bring-up is now user-tested and works like - RG40XXV, including the 720×480 UI path. ~~Fix lid sleep/wake~~ Done (2026-07-09): - lid close sleeps, lid open wakes from screen-off (power key needed after deep - suspend, matching stock — hallkey polarity verified 1=open; see 06). Remaining: - decide whether per-Emu `default-rg34xx.cfg` device cfgs are needed (none exist - yet — only `default.cfg`). +5. **RG34XXSP polish and runtime fixes** — the 720×480 UI, lid sleep/wake, manual + governor changes, displaycal persistence, RetroAchievements, Files, Recently + Played, game switcher, and the primary 8/16-bit systems are hardware-tested. + Remaining: fix POWER waking through a closed lid; decide whether charging should + continue to suppress deep sleep; diagnose missing 720×480 Bootlogo previews, PS1 + launch crashes, the FBNeo missing-BIOS lockup, and MD auto-governor/render-setting + sensitivity; decide whether per-Emu `default-rg34xx.cfg` files are needed. Track + core coverage in [10](10-core-game-matrix.md). 6. **RG28XX rotation validation** — plumbing exists on both layers (SDL_ROTATION=1 env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot patch covers GL contexts and that the two layers don't double-rotate; add `default-rg28xx.cfg` cfgs. -7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch now sits - on top of current main including the alpha-blending work. (The alpha/tinted- +7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch was rebased + onto main including the alpha-blending work. Upstream main has advanced since, so + rebase once more before the final merge/release candidate. (The alpha/tinted- bitmap question was solved: the glitches were the missing 64-bit libpng bundle, not main's alpha changes — 04.) Remaining: **confirm rendering stays clean on - device with the rebased build** (blit-heavy screens: browse list with box art, - game switcher, overlays). + device with the rebased build**: the game switcher and box art are clean at + 720×480. Screenshots and resolution-specific overlays remain to be checked. 8. **Audit Brick-era feature assumptions in shared UI** — NextUI only ever targeted the Brick / Smart Pro, and several UI pieces hardcode that hardware. Known cases on RG XX: - - **~~Input tester pak~~ Done (2026-07-10)** — L3/R3 pills were drawn on every + - **~~Input tester pak~~ Done (2026-07-09)** — L3/R3 pills were drawn on every device because `CODE_L3/R3` were unconditional in platform.h, and `is_rg34xx` wrongly stripped L3/R3 from the RG34XXSP. Now `detect_device()` sets `dev_has_lstick`/`dev_has_rstick` per model (verified matrix in 03: 35XXH/ 35XXPro/34XXSP/40XXH/cube dual, 40XXV left-only, 28XX/34XX/35XX+/2024/SP none — note the RG40XXV has *one* stick, clickable as L3) and those flags gate CODE_L3/R3, JOY_L3/R3, and the AXIS_* macros. Zero shared-code changes; - the Input pak adapts via its existing `has_*` derivation. Remaining: confirm - exact `RGXX_MODEL` strings for the RG35xx family / RG40xxH on hardware. + the Input pak adapts via its existing `has_*` derivation. Tested-good on + RG40XXV and RG34XXSP. The pak shows L3/R3 click state, not analog movement; + that is its existing cross-platform behavior and is not an H700 port task. + Other variants remain alpha hardware-validation targets. Remaining: + confirm exact `RGXX_MODEL` strings for the RG35xx family / RG40xxH on hardware. - **~~Fn switch option~~ Done (2026-07-09)** — the sliding Fn button doesn't exist on any RG XX device, so the settings capability predicate now excludes h700 while retaining the option on tg5040/tg5050. - - **~~Display settings~~ Done (2026-07-09, `0e60efd`)** — the dead enhance + - **~~Display settings~~ Done (2026-07-09, `0e60efd`)** — visually verified on + RG40XXV. The dead enhance controls (contrast/saturation/exposure) are now hidden on h700; displaycal reboot persistence fixed (was clobbered to defaults every boot); per-model displaycal preset plumbing added for the full 11-device H700 family (all @@ -74,30 +86,47 @@ Ordered by impact within each section. reversible (drop a `bluealsa` binary in `.system/h700/bin` and the path lights up). Building bluez-alsa in the toolchain is the last piece of tg5040 feature parity. If dropped instead, remove the dormant bt_init/audiomon plumbing. -10. **480p UI polish pass** (04) — verdict from real use on RG40XXV/RG34XXSP: - **mostly fine, OK for alpha**. No systemic layout breakage; known concrete issue: in some paks - (e.g. the Battery pak) the button-hint pills are large enough to overlap each - other. Before release, audit every shipped-by-default UI surface at 640×480 - and 720×480 and fix pill/hint sizing where cramped. +10. **480p UI polish pass** (04) — verdict from real use on RG40XXV and RG34XXSP: + **good for alpha**. The 720×480 Home UI, Battery, Game Tracker, Input, Clock, + Settings, on-screen keyboard, Files, and in-game menus all work well. Box art is + clean. Screenshots and resolution-specific overlays remain untested. Keep Files + at PPU 2 for now; PPU 3 may be evaluated later for the RG34XX/SP panel density. 11. **Headphone jack detection** (05) — investigate how stock switches speaker/HP on a live device; may be hardware auto-mute (= nothing to do). Cheap to answer, closes a matrix row either way. -12. **Measure real panel refresh** — `SCREEN_FPS 60.0` is assumed. A vsync-timing - test per device takes minutes and protects frame pacing math. -13. Later: RGcubexx bring-up (720×720, wired but untested), HDMI out (`SetHDMI()` is +12. **Investigate RG34XXSP auto CPU scaling** — manual in-game governor changes work, + but MD can slow down when Auto settles near 480 MHz with some shader/render + combinations. Stock shader + 3× scale + linear interpolation raised Auto to about + 720 MHz and ran smoothly; Powersave and Performance selected about 1100/1500 MHz + and were also smooth. Determine whether this is workload detection, a core/render + interaction, or an Auto policy bug. There are no general frame-pacing, tearing, + input-lag, or audio concerns from tested gameplay. + +12a. **Build out the core/game matrix** — the initial RG34XXSP results are now in + [10](10-core-game-matrix.md). GB/GBC/GBA/FC/SFC pass; PS1 crashes back to Home for + every tested title; FBNeo needs a valid BIOS retest and must not trap MinArch when + BIOS is missing; MD needs the Auto-scaling investigation above. Expand coverage + across the remaining shipped systems and at least one additional H700 model. +13. Later: RGcubexx bring-up (720×720, wired but no device is available locally; + external validation is an explicit purpose of the alpha), HDMI out (`SetHDMI()` is a no-op; mechanism documented in 04), RG35XX-family variants (displaycal presets + `DEVICE=rg35xx` mapping already plumbed — 04), Panel-Fix tool, **per-panel displaycal calibration** (measure each device, fill in the neutral presets in displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH while at it). -13a. **~~Bootlogo pak~~ Done (2026-07-09)** — `Bootlogo.pak` builds and ships for +13a. **Bootlogo pak: partial** — `Bootlogo.pak` builds and ships for h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel resolution (`640x480`, `720x480`, `480x640` rotated for RG28XX, `720x720`), folder picked via `$DEVICE`; writes `bootlogo.bmp` to `mmcblk0p2` and backs up the stock logo as `original.bmp` on first apply (02, 03). User-tested on - RG40XXV: apply + `original.bmp` backup verified; the post-apply reboot is a - bit slow but acceptable. Other panel sizes (34xx/28xx/cube) still unexercised. + RG40XXV: 640×480 apply + `original.bmp` backup verified, and the original appears + in the carousel. Restore was not explicitly selected but uses the same apply path; + the post-apply reboot is a bit slow but acceptable. On RG34XXSP, the 720×480 pak + shows no preview images. The packaged BMPs are valid, correctly sized, and + non-black, so this is a runtime loading/rendering issue rather than blank assets; + applying or restoring was not attempted there. The 480×640 and 720×720 paths + still need hardware testing. ## P2 — Cleanup / refactors / simplifications diff --git a/docs/h700-port/10-core-game-matrix.md b/docs/h700-port/10-core-game-matrix.md new file mode 100644 index 000000000..f0619f6ac --- /dev/null +++ b/docs/h700-port/10-core-game-matrix.md @@ -0,0 +1,75 @@ +# 10 — Core & Game Compatibility Matrix + +This is the system-by-system hardware validation ledger for the H700 port. The first +pass is on RG34XXSP (720×480); add RG40XXV and other RG XX results where behavior +differs. + +The existing results predate the full protocol below. A green initial result means +launch and gameplay were reported good; it does not yet imply every protocol step was +repeated for that system. + +✅ passed ⚠️ launches or reaches the core but has an issue ⬜ untested + +## Minimum test per system + +1. Launch at least one known-good ROM with required BIOS files present. +2. Verify video, audio, controls, in-game menu, clean exit, save and load state. +3. Play for at least 10 minutes on Auto CPU and note frequency/performance anomalies. +4. Exercise sleep/resume and power-off auto-resume for representative major systems. +5. Record the exact game, format, shader, scale, interpolation, CPU profile, and BIOS + state for every failure. + +## RG34XXSP results (2026-07-10) + +| System | Core | Status | Evidence / issue | +|---|---|---|---| +| GB | Gambatte | ✅ | Launch and gameplay perfect | +| GBC | Gambatte | ✅ | Launch and gameplay perfect | +| GBA | gpSP | ✅ | Launch and gameplay perfect | +| FC | FCEUmm | ✅ | Launch and gameplay perfect | +| SFC | Snes9x | ✅ | Launch and gameplay perfect | +| MD | PicoDrive | ⚠️ | Launches, but some shader/scaling combinations leave Auto CPU near 480 MHz and cause slowdown. Stock shader + 3× scale + linear interpolation runs smoothly around 720 MHz; Powersave (~1.1 GHz observed) and Performance (~1.5 GHz) are smooth | +| FBN | FBNeo | ⚠️ | Required BIOS was absent, so game execution is not validated. After the BIOS error, MinArch would not open its menu or exit; volume and brightness shortcuts still responded | +| PS | PCSX-ReARMed | ⚠️ | Every tested game crashed back to NextUI during launch. Tested 2–3 games including Tony Hawk's Pro Skater 2 and a Castlevania title | +| 32X | PicoDrive | ⬜ | — | +| A2600 | Stella 2014 | ⬜ | — | +| A5200 | a5200 | ⬜ | — | +| A7800 | ProSystem | ⬜ | — | +| C128 | VICE x128 | ⬜ | — | +| C64 | VICE x64 | ⬜ | — | +| COLECO | Gearcoleco | ⬜ | — | +| CPC | Caprice32 | ⬜ | — | +| FDS | FCEUmm | ⬜ | — | +| GG | PicoDrive | ⬜ | — | +| LYNX | Handy | ⬜ | — | +| MGBA | mGBA | ⬜ | Alternate GBA core | +| MSX | blueMSX | ⬜ | — | +| NGP | RACE | ⬜ | — | +| NGPC | RACE | ⬜ | — | +| P8 | Fake-08 | ⬜ | — | +| PCE | Mednafen PCE Fast | ⬜ | — | +| PET | VICE xpet | ⬜ | — | +| PKM | PokeMini | ⬜ | — | +| PLUS4 | VICE xplus4 | ⬜ | — | +| PRBOOM | PrBoom | ⬜ | — | +| PUAE | PUAE 2021 | ⬜ | — | +| SEGACD | PicoDrive | ⬜ | — | +| SG1000 | PicoDrive | ⬜ | — | +| SGB | mGBA | ⬜ | — | +| SMS | PicoDrive | ⬜ | — | +| SUPA | Supafaust | ⬜ | Alternate SNES core | +| VB | Mednafen VB | ⬜ | — | +| VIC | VICE xvic | ⬜ | — | + +## Open investigations + +1. **PS1 launch crash:** collect `minarch.txt`, core stderr, ROM format, BIOS presence, + and the last log line before return to NextUI. +2. **FBNeo error recovery:** retest with the required BIOS, then separately reproduce + the missing-BIOS path and determine why MinArch still processes system shortcuts but + not MENU/exit. +3. **MD Auto CPU behavior:** reproduce with exact shader/scale/interpolation combinations + while logging `scaling_cur_freq`, governor, min/max frequency, frame time, and audio + underruns. Manual governor switching itself is working. +4. Expand the table across RG40XXV, RG28XX, RGcubexx, and other RG XX variants during + alpha testing, recording only device-specific differences once a core is known-good. diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index dba2b08c2..ff39fa3d5 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,16 +4,21 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Status (2026-07-09): working beta on RG40XXV and RG34XXSP.** Boot, video (custom -Mali SDL2 + full GLES shader pipeline), audio, input, games at full speed, -brightness/colortemp/displaycal, WiFi, and rumble are all tested-good on RG40XXV -hardware. RG34XXSP has also been user-tested and behaves the same as RG40XXV, except -lid wake/sleep does not work yet (the screen stays on). Known open items: sleep wake is -unreliable (the #1 defect), BT audio is gated off, RG28XX/cube are wired but untested. -Full status in [08](08-testing-status.md), path to done in [09](09-roadmap.md). +**Status (2026-07-10): ready for an alpha release, with documented RG34XXSP issues.** +RG40XXV has broad hardware coverage. RG34XXSP now passes the complete 720×480 UI +sweep, box art, Files, Input, Recently Played, game switcher, RetroAchievements, +displaycal persistence, manual governor changes, lid sleep/wake, and GB/GBC/GBA/FC/SFC. +Open RG34XXSP issues are PS1 launch crashes, an FBNeo missing-BIOS lockup, MD Auto CPU +scaling sensitivity, missing 720×480 Bootlogo previews, POWER waking through a closed +lid, and charging remaining in light sleep by current shared policy. Screenshots, +resolution-specific overlays, battery accuracy/overnight drain, recovery paths, and +RG28XX/RGcubexx hardware coverage remain untested. The cube is intentionally an +external alpha-validation target. BT audio, Pak Store, and OTA update are explicitly +outside this alpha scope. Full status is in [08](08-testing-status.md), priorities in +[09](09-roadmap.md), and emulator coverage in [10](10-core-game-matrix.md). These docs began as the implementation plan and were restructured after the -implementation landed (branch `h700`, 17 commits) into reference documentation: +implementation landed (branch `h700`) into reference documentation: verified device facts, the architecture as shipped, deviations from the plan and why, and the lessons that transfer to future platform ports. @@ -27,10 +32,11 @@ and the lessons that transfer to future platform ports. | [03-platform-layer.md](03-platform-layer.md) | `workspace/h700/`: platform.c/h, input (evdev-primary), libmsettings, keymon, cores | | [04-video-display.md](04-video-display.md) | SDL2+Mali/GLES stack, geometry, rotation, HDMI, displaycal, the alpha-blit question | | [05-audio.md](05-audio.md) | ALSA path, the dlopen'd-libasound bug story, volume/mute quirks, BT-audio gating | -| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Sleep design, **the wake-reliability issue**, lid, battery, governors | +| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Sleep design, lid/charging edge cases, battery, governors | | [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | NextUI-owned wpa_supplicant, DHCP/creds handling, BT status | | [08-testing-status.md](08-testing-status.md) | Validation matrix with real results, regression guardrails, shared-code touch list | -| [09-roadmap.md](09-roadmap.md) | Prioritized path from beta to a 9.5/10 port | +| [09-roadmap.md](09-roadmap.md) | Prioritized path from alpha candidate to a 9.5/10 port | +| [10-core-game-matrix.md](10-core-game-matrix.md) | Per-system/core/game coverage and open emulator defects | ## Architecture in one paragraph @@ -50,12 +56,12 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Platform | one `h700`, `DEVICE` env per device | ✅ as planned | | Arch / toolchain | 64-bit, reuse tg5040 image | ✅ as planned — with real costs; pitfalls catalogued in 01 | | SDL2 | in-tree malifbdev-rot build | ✅ as planned, pinned + config-asserted | -| Video | generic_video GLES pipeline on Mali blob | ✅ worked 1:1; shaders/overlays/effects tested-good | +| Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; 720×480 UI and box art pass, resolution-specific overlays untested | | **Input** | SDL joystick route | **Deviation:** raw evdev primary (SDL js enumeration unreliable on stock image); SDL kept for BT pads (03) | | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | -| **BT audio** | build + ship bluealsa | **Deviation:** gated off this beta (`NO_BT_AUDIO`); re-enable path documented (05/07) | -| Sleep | `echo mem` + tg5040-style wrapper | ✅ implemented incl. resume restore — ⚠️ wake unreliable, open (06) | -| Lid | hallkey → PLAT lid API | ⚠️ wired, but RG34XXSP lid wake/sleep does not work yet (screen stays on) | +| **BT audio** | build + ship bluealsa | **Deviation:** gated off this alpha (`NO_BT_AUDIO`); re-enable path documented (05/07) | +| Sleep | `echo mem` + tg5040-style wrapper | ⚠ repeated sleep/wake, in-game resume, and power-off auto-resume pass; charging intentionally stays in light sleep (06) | +| Lid | hallkey → PLAT lid API | ⚠ close/open works, but POWER can wake RG34XXSP while the lid remains closed | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | | Rumble / LEDs | moto sysfs; MAX_LIGHTS 0 | ✅ as planned; rumble tested-good | | Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | @@ -66,14 +72,19 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively ## Top open risks -1. **Sleep/wake hangs** — headline feature not yet trustworthy ([06](06-power-sleep-battery.md), roadmap P0). -2. **Partially tested device matrix** — RG34XXSP broadly works, but lid handling is - broken; RG28XX/cube code paths have never met hardware. -3. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read +1. **RG34XXSP runtime issues** — PS1 launch crashes, FBNeo can trap MinArch after a + missing-BIOS failure, MD Auto CPU scaling is render-setting-sensitive, Bootlogo + previews are absent at 720×480, and POWER can wake through the closed lid. +2. **Partially tested robustness matrix** — clean uninstall, dirty-SD recovery, + SIGUSR1 shutdown, battery accuracy, screenshots, and overnight drain need runs. +3. **Partially tested device matrix** — RG40XXV and RG34XXSP are working; RG28XX + rotation still needs hardware validation, and RGcubexx is an external alpha target. +4. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read Anbernic's binaries/scripts; a firmware update can move them (guardrails in 08). -4. **Brick-era assumptions in shared UI** — Input tester shows Brick's layout, an - Fn-switch setting exists for hardware RG XX doesn't have, and dead enhance - display controls are exposed; needs a capability-flag sweep (09-roadmap #8). +5. **Shared-UI capability regressions** — the Input tester is device-aware, dead + display controls are hidden/verified, and Fn-switch settings are now gated off. + Keep the systematic capability sweep as shared UI continues to evolve. (Formerly listed here: the alpha-blit unknown — resolved; it was the missing - 64-bit libpng. The branch is now rebased onto main incl. alpha blending; only - the on-device rendering re-check remains, 04.) + 64-bit libpng. The branch includes main's alpha blending; game switcher/overlay + rendering is clean, with screenshots and resolution-specific overlays still to + check, 04.) diff --git a/skeleton/BASE/README.txt b/skeleton/BASE/README.txt index c5933da0d..aa79505be 100644 --- a/skeleton/BASE/README.txt +++ b/skeleton/BASE/README.txt @@ -36,7 +36,7 @@ TRIMUI SMART PRO / TRIMUI BRICK Copy the "trimui" folder and "MinUI.zip" (without unzipping) to the root of the SD card. -ANBERNIC RG XX H700 (BETA) +ANBERNIC RG XX H700 (ALPHA) For RG40XXV/RG40XXH-style two-card stock OS setups, copy "MinUI.zip" (without unzipping) to the root of the TF2 card that contains your Roms. @@ -44,7 +44,9 @@ Then copy "h700/dmenu.bin" to the root of the stock TF1 card's user-visible ROMs If your stock card has a stockmod or muOS boot selector, choose the stock frontend target before testing NextUI. muOS override files can prevent the stock dmenu hijack from running. -This H700 beta includes Bluetooth controller pairing. Bluetooth audio is not enabled in this beta package. +This H700 alpha includes Bluetooth controller pairing. Bluetooth audio is not enabled; Pak Store and OTA updating are outside this alpha's scope. + +Known RG34XXSP alpha issues: PlayStation games currently return to Home on launch; the Bootlogo tool shows no previews at 720x480; an FBNeo launch with missing BIOS can leave MinArch unable to open its menu or exit; the power button can wake the device while the lid is closed; and Mega Drive performance with the Auto CPU profile can depend on shader/scaling settings. Charging uses light sleep rather than deep suspend by design. These issues do not affect the tested GB, GBC, GBA, FC, or SFC paths. MIYOO FLIP From 165ed55cdf223484ff6aff2f5adf6a07afa64715 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 10 Jul 2026 02:48:46 +0200 Subject: [PATCH 37/76] fix(h700): preserve embedded gzip payload Do not append a newline after the boot shim's gzip member. GNU gzip on the stock OS treats that byte as an incomplete second stream, causing cold boots to fall back to the stock frontend.\n\nValidate the assembled payload during the build so malformed shims fail before packaging. --- workspace/h700/boot/build.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workspace/h700/boot/build.sh b/workspace/h700/boot/build.sh index 093db0f04..5adbb1e84 100755 --- a/workspace/h700/boot/build.sh +++ b/workspace/h700/boot/build.sh @@ -13,5 +13,7 @@ tar -czf data fbsplash unzip shim-common.sh cat ../$SOURCE > $TARGET echo BINARY >> $TARGET cat data >> $TARGET -echo >> $TARGET chmod +x $TARGET + +PAYLOAD_LINE=$(($(grep -na '^BINARY' "$TARGET" | cut -d: -f1 | head -1) + 1)) +tail -n +"$PAYLOAD_LINE" "$TARGET" | gzip -t From eda49264c2313ccdad9dd7ae5d9cbd0d25b1af2c Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 12 Jul 2026 21:19:23 +0200 Subject: [PATCH 38/76] fix(h700): correct RG28XX rotation handling Stop setting should_rotate on the RG28XX: its portrait panel is rotated entirely by the mali SDL driver (SDL_ROTATION=1), so the app-side space is plain 640x480 landscape and the flag made setRectToAspectRatio swap axes a second time, breaking minarch's Aspect (undersized) and Fullscreen (left-squished) scaling. Rotate Bootlogo pak previews 90 degrees clockwise on the RG28XX via a new platform define, so presets stored panel-native (as the bootloader blits them) are shown the way they will actually appear at boot. Also add the missing CODE_L4/R4 and JOY_L4/R4 defines that the tg5050 merge introduced into common api.c, which had broken the h700 build. --- workspace/all/bootlogo/bootlogo.c | 35 +++++++++++++++++++++++++++++- workspace/h700/platform/platform.c | 6 ++++- workspace/h700/platform/platform.h | 9 ++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/workspace/all/bootlogo/bootlogo.c b/workspace/all/bootlogo/bootlogo.c index 2eceae66a..673697ddb 100644 --- a/workspace/all/bootlogo/bootlogo.c +++ b/workspace/all/bootlogo/bootlogo.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -30,6 +31,12 @@ static void sigHandler(int sig) #define BOOTLOGO_PARTITION "/dev/mmcblk0p1" #endif +// platforms whose bootloader blits the logo panel-native onto a rotated panel +// set this so previews are rotated to match the boot-time appearance +#ifndef BOOTLOGO_PREVIEW_ROTATE_CW +#define BOOTLOGO_PREVIEW_ROTATE_CW 0 +#endif + static SDL_Surface *screen; SDL_Surface** images; @@ -38,6 +45,30 @@ static char basepath[MAX_PATH]; static int selected = 0; static int count = 0; +// returns a 90°-clockwise-rotated copy of the preset (or the original on +// failure) so the preview matches what the rotated panel shows at boot +static SDL_Surface* rotatePreviewCW(SDL_Surface* src) +{ + SDL_Surface* conv = SDL_ConvertSurfaceFormat(src, SDL_PIXELFORMAT_ARGB8888, 0); + if (!conv) + return src; + SDL_Surface* dst = SDL_CreateRGBSurfaceWithFormat(0, conv->h, conv->w, 32, SDL_PIXELFORMAT_ARGB8888); + if (!dst) { + SDL_FreeSurface(conv); + return src; + } + uint32_t* src_pixels = conv->pixels; + uint32_t* dst_pixels = dst->pixels; + int src_stride = conv->pitch / 4; + int dst_stride = dst->pitch / 4; + for (int y = 0; y < conv->h; y++) + for (int x = 0; x < conv->w; x++) + dst_pixels[x * dst_stride + (conv->h - 1 - y)] = src_pixels[y * src_stride + x]; + SDL_FreeSurface(conv); + SDL_FreeSurface(src); + return dst; +} + int loadImages() { char* device = getenv("DEVICE"); @@ -69,6 +100,8 @@ int loadImages() char path[MAX_PATH]; snprintf(path, sizeof(path), "%s%s", basepath, ent->d_name); SDL_Surface *bmp = IMG_Load(path); + if (bmp && BOOTLOGO_PREVIEW_ROTATE_CW) + bmp = rotatePreviewCW(bmp); if (bmp) { count++; images = realloc(images, sizeof(SDL_Surface*) * count); @@ -191,7 +224,7 @@ int main(int argc, char *argv[]) // render the selected image, centered on screen SDL_Surface *image = images[selected]; if (image->w > screen->w || image->h > screen->h) { - // aspect-fit oversized presets (e.g. rg28xx portrait logos on a landscape UI) + // aspect-fit oversized presets (e.g. custom logos larger than the UI) int fit_w = screen->w; int fit_h = image->h * screen->w / image->w; if (fit_h > screen->h) { diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index cb9d3d470..9f9a4e313 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -214,7 +214,11 @@ static void detect_device(void) { void PLAT_initPlatform(void) { detect_device(); - should_rotate = is_rg28xx; + // NOTE: should_rotate must stay 0 even on the RG28XX. Its portrait panel is + // handled entirely by the mali SDL driver (SDL_ROTATION=1 in launch.sh), so + // the app-side coordinate space is plain 640x480 landscape; setting the flag + // makes setRectToAspectRatio() swap axes a second time and break minarch's + // Aspect/Fullscreen scaling. } static SDL_Joystick **joysticks = NULL; diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 8b14a7eee..85ccec9ce 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -64,6 +64,8 @@ extern int dev_has_rstick; #define CODE_R1 309 #define CODE_L2 314 #define CODE_R2 315 +#define CODE_L4 CODE_NA +#define CODE_R4 CODE_NA #define CODE_L3 (dev_has_lstick ? 313 : CODE_NA) #define CODE_R3 (dev_has_rstick ? 316 : CODE_NA) @@ -93,6 +95,8 @@ extern int dev_has_rstick; #define JOY_R1 5 #define JOY_L2 10 #define JOY_R2 11 +#define JOY_L4 JOY_NA +#define JOY_R4 JOY_NA #define JOY_L3 (dev_has_lstick ? 9 : JOY_NA) #define JOY_R3 (dev_has_rstick ? 12 : JOY_NA) @@ -150,6 +154,11 @@ extern int dev_has_rstick; #define BOOTLOGO_PARTITION "/dev/mmcblk0p2" // presets are keyed by panel resolution, not device name #define BOOTLOGO_RESOLUTION_DIRS 1 +// The RG28XX panel is mounted portrait: the UI is rotated onto it by the SDL +// driver, but the bootloader blits bootlogo.bmp panel-native, so the 480x640 +// presets are authored 90° CCW and must be rotated CW to preview how they +// will actually appear at boot. +#define BOOTLOGO_PREVIEW_ROTATE_CW (is_rg28xx) /////////////////////////////// From 50edff7fcf0c3fe728609bbf66f3be1c6c3d92a3 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 13 Jul 2026 18:29:52 +0200 Subject: [PATCH 39/76] fix(bootlogo): diagnostics and empty-state hardening Log the preset search path, per-file load failures, and final count so failures like the RG34XXSP no-previews report are diagnosable from log.txt. Show the searched path on screen when nothing loads, and guard scroll/apply against an empty preset list (applying with none loaded dereferenced a NULL array). --- workspace/all/bootlogo/bootlogo.c | 39 ++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/workspace/all/bootlogo/bootlogo.c b/workspace/all/bootlogo/bootlogo.c index 673697ddb..307f50ee0 100644 --- a/workspace/all/bootlogo/bootlogo.c +++ b/workspace/all/bootlogo/bootlogo.c @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include @@ -90,8 +92,9 @@ int loadImages() } #endif - // grab all bmp files in the directory and load them with IMG_Load, + // grab all bmp files in the directory and load them with IMG_Load, // keep them in an array of SDL_Surface pointers + LOG_info("loading presets from %s (DEVICE=%s)\n", basepath, device ? device : "(unset)"); DIR *dir; struct dirent *ent; if ((dir = opendir(basepath)) != NULL) { @@ -100,26 +103,28 @@ int loadImages() char path[MAX_PATH]; snprintf(path, sizeof(path), "%s%s", basepath, ent->d_name); SDL_Surface *bmp = IMG_Load(path); - if (bmp && BOOTLOGO_PREVIEW_ROTATE_CW) - bmp = rotatePreviewCW(bmp); - if (bmp) { - count++; - images = realloc(images, sizeof(SDL_Surface*) * count); - images[count-1] = bmp; - image_paths = realloc(image_paths, sizeof(char*) * count); - image_paths[count-1] = strdup(path); + if (!bmp) { + LOG_error("failed to load %s: %s\n", path, IMG_GetError()); + continue; } + if (BOOTLOGO_PREVIEW_ROTATE_CW) + bmp = rotatePreviewCW(bmp); + count++; + images = realloc(images, sizeof(SDL_Surface*) * count); + images[count-1] = bmp; + image_paths = realloc(image_paths, sizeof(char*) * count); + image_paths[count-1] = strdup(path); } } closedir(dir); } else { - // could not open directory - LOG_error("could not open directory"); + LOG_error("could not open %s: %s\n", basepath, strerror(errno)); if (CFG_getHaptics()) { VIB_triplePulse(5, 150, 200); } return 0; } + LOG_info("loaded %i presets\n", count); return count; } @@ -163,21 +168,21 @@ int main(int argc, char *argv[]) } else { - if (PAD_justRepeated(BTN_LEFT)) + if (PAD_justRepeated(BTN_LEFT) && count > 0) { selected -= 1; if (selected<0) selected = count - 1; dirty = 1; } - else if (PAD_justRepeated(BTN_RIGHT)) + else if (PAD_justRepeated(BTN_RIGHT) && count > 0) { selected += 1; if (selected>=count) selected = 0; dirty = 1; } - else if (PAD_justPressed(BTN_A)) + else if (PAD_justPressed(BTN_A) && count > 0) { // apply with system calls // BOOT_PATH=/mnt/boot/ @@ -247,6 +252,12 @@ int main(int argc, char *argv[]) SDL_BlitSurface(image, NULL, screen, &image_rect); } } + else { + // surface the reason on-screen so it can be diagnosed without pulling logs + char msg[MAX_PATH + 32]; + snprintf(msg, sizeof(msg), "No presets found in\n%s", basepath); + GFX_blitMessage(font.small, msg, screen, NULL); + } GFX_blitButtonGroup((char *[]){"L/R", "SCROLL", NULL}, 0, screen, 0); GFX_blitButtonGroup((char *[]){"A", "SET", "B", "BACK", NULL}, 1, screen, 1); From 672edf816a09b42feb14016d719dee4efd288424 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 13 Jul 2026 18:45:09 +0200 Subject: [PATCH 40/76] fix(h700): add missing BUTTON_L4/R4 defines The tg5050 merge also introduced BUTTON_L4/R4 references in minput.c; CODE_/JOY_ variants were already added but the BUTTON_ pair was missed, breaking the h700 build at minput. --- workspace/h700/platform/platform.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 85ccec9ce..d2cfb707f 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -38,6 +38,8 @@ extern int dev_has_rstick; #define BUTTON_R2 BUTTON_NA #define BUTTON_L3 BUTTON_NA #define BUTTON_R3 BUTTON_NA +#define BUTTON_L4 BUTTON_NA +#define BUTTON_R4 BUTTON_NA #define BUTTON_MENU BUTTON_NA #define BUTTON_MENU_ALT BUTTON_NA From 31d661c7c9c28f113fa48a4d194ea542dcd255c8 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 13 Jul 2026 19:49:09 +0200 Subject: [PATCH 41/76] docs(h700): sync port docs with validated RG28XX and Bootlogo state Record the RG28XX hardware validation: rotation is driver-level only (SDL_ROTATION=1 covers the GL path), the app-side should_rotate swap double-rotated and broke minarch Aspect/Fullscreen scaling, and bootlogo previews are now rotated to boot orientation. Mark the RG34XXSP 720x480 Bootlogo previews fixed with the current build and describe the new pak diagnostics and empty-state guards. Update the fleet/status/roadmap entries accordingly, retire the resolved open questions, and add a regression guardrail for new shared-code button defines (L4/R4 broke the h700 build until BUTTON_/CODE_/JOY_ variants were added; full-platform builds catch what single paks miss). --- docs/h700-port/00-device-facts.md | 6 ++- docs/h700-port/03-platform-layer.md | 9 +++-- docs/h700-port/04-video-display.md | 63 ++++++++++++++++++++--------- docs/h700-port/08-testing-status.md | 22 +++++++--- docs/h700-port/09-roadmap.md | 36 ++++++++++------- docs/h700-port/README.md | 22 +++++----- 6 files changed, 104 insertions(+), 54 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index ea2258189..eac00c0db 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -13,7 +13,7 @@ Anbernic stock-firmware update — paths have historically been stable, but the | TrimUI Brick (TG5040, A133P) | Probed live | Reference — NextUI runs perfectly | | Anbernic RG40XXV (H700) | Probed live | Port target #1 (was running stockmod) — **primary tested device** | | Anbernic RG34XXSP (H700) | User-tested | Port target #2 (clamshell, lid sensor) — strong 720×480/UI parity; core and lid edge cases tracked in 08 | -| Anbernic RG28XX (H700) | Not yet tested | Port target #3 (rotated 480×640 panel) | +| Anbernic RG28XX (H700) | User-tested | Port target #3 (rotated 480×640 panel) — rotation, game scaling, and bootlogo validated 2026-07-12 | ## RG40XXV (H700) — probed live @@ -213,7 +213,9 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf ## Facts still unverified (need hardware/testing) 1. Why RG34XXSP power-key release wakes light sleep while `hallkey=0` even though `PLAT_shouldWake()` contains a closed-lid gate. -2. RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path end-to-end. +2. ~~RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path + end-to-end.~~ Resolved 2026-07-12: SDL_ROTATION=1 rotates the whole GL frame at + the driver; app space is 640×480 landscape (`should_rotate` must stay 0 — 04). 3. Headphone jack detection on 2026 firmware (old note: `jack_state` never changes). 4. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. 5. Exact stock `RGXX_MODEL` strings for the RG35XX family and RG40XXH. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 979db6414..70d653ec7 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -7,7 +7,9 @@ constants from the old rg35xxplus port (`git show 8cd78866:...`). One platform serves all devices: `DEVICE`/`RGXX_MODEL` env (set by launch.sh, see 02) → `detect_device()` sets `is_rg28xx / is_rg34xx / is_cube` globals that drive -resolution and rotation, plus `dev_has_lstick / dev_has_rstick` capability flags +resolution and the bootlogo preview rotation (panel rotation itself is handled +entirely by the SDL driver via `SDL_ROTATION=1`; nothing app-side rotates — 04), +plus `dev_has_lstick / dev_has_rstick` capability flags that drive stick availability — the tg5040 `is_brick` pattern. Analog stick matrix (verified against Retro Catalog/Anbernic specs 2026-07, RG40XXV @@ -176,8 +178,9 @@ target), with the picodrive LTO/patch-hygiene fixes noted in 01. — bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` builds for h700 with resolution-keyed preset folders (`640x480`, `720x480`, `480x640`, `720x720`) selected via `$DEVICE`, writes `bootlogo.bmp` to `mmcblk0p2` - (`BOOTLOGO_PARTITION` in `platform.h`), and backs up the stock logo as - `original.bmp` on first apply (see 02 for the TF1-write-policy exception) + (`BOOTLOGO_PARTITION` in `platform.h`), backs up the stock logo as + `original.bmp` on first apply (see 02 for the TF1-write-policy exception), and on + the RG28XX rotates previews to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`, 04) - `trimui_inputd` interactions (turbo, gpio 5V export) New vs tg5040: `rfkill/` — a minimal from-scratch `/dev/rfkill` ioctl tool (~120 diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index f13e643ac..2aead60dc 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -27,7 +27,7 @@ The stack: |---|---|---|---| | RG40XXV | 640×480 4:3 | 640×480 | ✅ shipped, tested | | RG34XXSP | 720×480 3:2 | 720×480 | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus tested-good; resolution-specific overlays untested | -| RG28XX | 480×640 portrait | 640×480 logical | rotation plumbed, untested (below) | +| RG28XX | 480×640 portrait | 640×480 logical | ✅ user-tested — driver-level rotation, UI + game scaling verified (below) | | RGcubexx | 720×720 | 720×720 | wired (`is_cube`), untested | ### 480p UI — mostly fine, polish pass pending @@ -40,19 +40,34 @@ distinct: the Input tester is now device-aware, the dead display controls are hidden/verified, and Fn-switch settings are gated off on h700. The broader capability sweep remains a useful regression check (09-roadmap #8). -## RG28XX rotation — implemented, unvalidated - -Both planned layers were plumbed: -1. **SDL level**: launch.sh exports `SDL_ROTATION=1` when `DEVICE=rg28xx` - (consumed by the malifbdev-rot driver — rotating in the backend was the repo's - whole reason to exist). -2. **GL level**: `platform.c` sets `should_rotate = is_rg28xx`, feeding - `generic_video.c`'s existing rotation handling (dst-rect w/h swap in present). - -Unknown until hardware testing: whether the malifbdev-rot patch covers the *GL -context* path (the original concern was it might only rotate the non-GL blitter), -and whether the two layers interact correctly (both active could double-rotate). -Treat the whole path as unverified. +## RG28XX rotation — validated: driver-level only (2026-07-12) + +Hardware testing answered both open questions, and the answer retired one of the +two planned layers: + +1. **SDL level (the only layer)**: launch.sh exports `SDL_ROTATION=1` when + `DEVICE=rg28xx`, consumed by the malifbdev-rot driver. It **does** cover the GL + context path — the entire 640×480 landscape frame is rotated onto the portrait + panel at present time. The app-side coordinate space is plain 640×480 landscape; + no NextUI code needs to know the panel is rotated. +2. **GL level — removed.** `platform.c` initially also set `should_rotate = + is_rg28xx`, feeding `generic_video.c`'s dst-rect w/h swap in + `setRectToAspectRatio()`. The feared double-rotation was real: the UI path + doesn't go through that function so menus looked fine, but minarch scaling + broke — Aspect produced an undersized rect fitting neither axis (480×360 inside + 640×480), and Fullscreen stretched into a 480×640 rect that filled only the left + 75% of the screen with the bottom clipped. Removing the flag fixed both modes, + user-verified on hardware (`d738014`). A NOTE in `PLAT_initPlatform` documents + why `should_rotate` must stay 0. (That flag was originally minarch's + TATE/vertical-arcade content-rotation hook — a feature since removed — not a + panel-orientation flag; h700 is the only platform that ever set it.) + +One consequence for the Bootlogo pak: the bootloader blits `bootlogo.bmp` +panel-native (unrotated), so the 480×640 presets are authored 90° CCW in file +space. The pak now rotates previews 90° CW on the RG28XX +(`BOOTLOGO_PREVIEW_ROTATE_CW` in platform.h, default-off for other devices) so the +carousel shows what the panel will actually display at boot; apply itself was +already correct (user-verified: applied logo renders upright at power-on). ## HDMI — detection wired, output switching not @@ -117,12 +132,20 @@ reverted experiment, so the rebase was clean on that front. Game switcher and bo rendering are clean at 720×480; screenshots and resolution-specific overlays remain to be checked. Upstream main has since advanced, so rebase once more before final merge. -## Bootlogo preset previews - -The 640×480 catalog works on RG40XXV. On RG34XXSP the pak opens but renders no preset -images from `720x480/`. The source BMPs are valid 720×480×24 files and direct inspection -shows non-black content, so this is a runtime path/loading/rendering problem rather than -blank generated assets. Applying/restoring a logo was not attempted on RG34XXSP. +## Bootlogo preset previews — resolved (2026-07-13) + +The 640×480 catalog works on RG40XXV. The RG34XXSP "no visible presets" issue is +fixed: driving the pak remotely over SSH on the SP with the current branch build +showed all 23 `720x480/` presets loading and the carousel rendering correctly +(verified via framebuffer capture); user-confirmed working. The failing binary was +the alpha1.1-era `bootlogo.elf` (built from a pre-commit working tree); the exact +defect in that binary was never pinned because current source no longer reproduces +it. To keep this class of failure diagnosable, `bootlogo.c` now logs the preset +search path, per-file `IMG_Load` failures, and the final count to the pak's +`log.txt`, renders the searched path on screen when nothing loads, and guards +scroll/apply against an empty preset list (apply previously dereferenced a NULL +array). RG28XX previews are rotated to boot orientation (see rotation section +above). The 720×720 path still needs hardware testing (no cube available). ## Boot splash diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index d6fe42452..6731a816e 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -6,7 +6,7 @@ |---|---|---| | RG40XXV | Probed live | Primary bring-up device | | RG34XXSP | User-tested | General parity with RG40XXV; sleep/wake + lid validated here | -| RG28XX | Not yet tested | Rotation validation target | +| RG28XX | User-tested | Rotation validated: UI, game scaling, bootlogo apply working | | RGcubexx | No device available | External alpha-validation target | | TrimUI Brick TG5040 | Probed live | Regression reference (behavioral 1:1 comparisons) | @@ -17,7 +17,7 @@ - Repeated `nextui.elf` crashes now log the crash limit and power off. Use TF2 logs for crash-loop debugging; the release runtime powers off instead of starting SSH. -## Validation matrix (status as of 2026-07-10, RG40XXV unless noted) +## Validation matrix (status as of 2026-07-13, RG40XXV unless noted) ✅ tested & passed ⚠️ tested, has issues ⬜ untested ➖ explicitly out of alpha scope ✖ not implemented @@ -54,12 +54,13 @@ | OTA update flow | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | | BT controller pairing + input | ⬜ | | Bootlogo pak, RG40XXV 640×480 | ✅ carousel/apply/backup tested; restore inferred via same apply path | -| Bootlogo pak, RG34XXSP 720×480 | ⚠️ pak opens with no visible presets. Source BMPs are valid and non-black; runtime path/loading/rendering needs investigation. Apply/restore not attempted | +| Bootlogo pak, RG34XXSP 720×480 | ✅ fixed 2026-07-13 — all 23 presets load and render with the current build (verified via SSH-driven run + framebuffer capture; the failing binary was alpha1.1-era). Pak now logs path/count/load errors and shows the searched path on screen when empty; apply guarded against an empty list | +| Bootlogo pak, RG28XX 480×640 | ✅ apply user-tested: logo renders upright at boot. Previews were shown panel-native (90° off) and are now rotated to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`) | | BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | | Headphone jack detection | ✖ not wired (05) | | RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus work well; resolution-specific overlays untested | | RG34XXSP: lid sleep/wake | ⚠️ lid close and open work; deep suspend requires power as expected, but power also wakes light sleep while the lid is closed | -| RG28XX: rotated UI + games | ⬜ (plumbing in place, unvalidated — 04) | +| RG28XX: rotated UI + games | ✅ user-tested — UI correct; minarch Aspect/Fullscreen were broken by app-side double-rotation, fixed by removing `should_rotate` (rotation is driver-level only — 04) | | RGcubexx: 720×720 | ⬜ no device available; intentionally an external alpha-validation target | ### Performance @@ -98,7 +99,8 @@ Detailed results and the remaining system backlog are tracked in - Diagnose PS1 launch and retest multiple formats/titles with the required BIOS. - Reproduce the MD Auto CPU behavior with exact shader, scale, and interpolation combinations. -- After the preview bug is fixed, test 720×480 Bootlogo apply, backup, and restore. +- Test 720×480 Bootlogo backup and restore (previews and apply now work; the + first-apply `original.bmp` backup and restoring it haven't been exercised on SP). - Test BT controller pairing/input, battery percentage accuracy, and overnight drain. - Run clean uninstall, SIGUSR1 shutdown, dirty-card recovery, and muOS/stockmod coexistence on this hardware where practical. @@ -128,6 +130,16 @@ Detailed results and the remaining system backlog are tracked in 11. `workspace/all/common/api.c`/`api.h` — `PWR_requestSleep()` (lid sleep) and `SND_quit()` in `PWR_enterSleep` (close ALSA before suspend; see 06). Both are platform-agnostic changes — watch them when rebasing onto main. + 12. `workspace/all/bootlogo/bootlogo.c` — load/path/count diagnostics, on-screen + empty-state, empty-list apply guard, and the optional + `BOOTLOGO_PREVIEW_ROTATE_CW` preview-rotation hook (defaults off; only h700's + platform.h defines it, for the RG28XX). +- **New-button defines must land in every platform.h.** The tg5050 L4/R4 work added + `CODE_L4/R4` + `JOY_L4/R4` references to shared `api.c` and `BUTTON_L4/R4` to + `minput.c`; h700 didn't build until the `*_NA` defines were added (`d738014`, + `956ed34`). When main grows a button, grep every `platform/platform.h` for the + new `BUTTON_/CODE_/JOY_` names — and verify with a full `make PLATFORM=h700` + (single-pak builds don't compile `minput.c` and will miss `BUTTON_*` gaps). - **Re-run the 00-device-facts probes after each Anbernic stock-firmware update.** Paths have been stable historically, but `dmenu_ln`/muOS hooks are stockmod-version-dependent, and the model-string detector reads a stock binary. diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index d08a0856b..7f7bb5b4a 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,7 +1,7 @@ # 09 — Roadmap: from alpha candidate to a 9.5/10 port -Everything below is verified against branch tip `4c754b7`, with hardware results -recorded through 2026-07-10. +Everything below is verified against branch tip `956ed34`, with hardware results +recorded through 2026-07-13. Ordered by impact within each section. ## P0 — Correctness / robustness @@ -39,14 +39,18 @@ Ordered by impact within each section. governor changes, displaycal persistence, RetroAchievements, Files, Recently Played, game switcher, and the primary 8/16-bit systems are hardware-tested. Remaining: fix POWER waking through a closed lid; decide whether charging should - continue to suppress deep sleep; diagnose missing 720×480 Bootlogo previews, PS1 + continue to suppress deep sleep; diagnose PS1 launch crashes, the FBNeo missing-BIOS lockup, and MD auto-governor/render-setting sensitivity; decide whether per-Emu `default-rg34xx.cfg` files are needed. Track - core coverage in [10](10-core-game-matrix.md). -6. **RG28XX rotation validation** — plumbing exists on both layers (SDL_ROTATION=1 - env + `should_rotate` GL path, 04). Verify on hardware that the malifbdev-rot - patch covers GL contexts and that the two layers don't double-rotate; add - `default-rg28xx.cfg` cfgs. + core coverage in [10](10-core-game-matrix.md). (~~720×480 Bootlogo previews~~ + fixed 2026-07-13 — see #13a.) +6. **~~RG28XX rotation validation~~ Done (2026-07-12)** — hardware answered both + questions: the malifbdev-rot driver *does* rotate the GL path (SDL_ROTATION=1 + suffices end-to-end), and the two layers *did* double-rotate — the app-side + `should_rotate` swap broke minarch Aspect/Fullscreen scaling and was removed + (rotation is driver-level only now; postmortem in 04). UI, game scaling, and + bootlogo apply are user-verified; bootlogo previews are rotated to boot + orientation. Still open: decide whether `default-rg28xx.cfg` cfgs are needed. 7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch was rebased onto main including the alpha-blending work. Upstream main has advanced since, so rebase once more before the final merge/release candidate. (The alpha/tinted- @@ -115,18 +119,20 @@ Ordered by impact within each section. displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH while at it). -13a. **Bootlogo pak: partial** — `Bootlogo.pak` builds and ships for - h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel +13a. **Bootlogo pak: working on 3 of 4 resolutions** — `Bootlogo.pak` builds and + ships for h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel resolution (`640x480`, `720x480`, `480x640` rotated for RG28XX, `720x720`), folder picked via `$DEVICE`; writes `bootlogo.bmp` to `mmcblk0p2` and backs up the stock logo as `original.bmp` on first apply (02, 03). User-tested on RG40XXV: 640×480 apply + `original.bmp` backup verified, and the original appears in the carousel. Restore was not explicitly selected but uses the same apply path; - the post-apply reboot is a bit slow but acceptable. On RG34XXSP, the 720×480 pak - shows no preview images. The packaged BMPs are valid, correctly sized, and - non-black, so this is a runtime loading/rendering issue rather than blank assets; - applying or restoring was not attempted there. The 480×640 and 720×720 paths - still need hardware testing. + the post-apply reboot is a bit slow but acceptable. RG34XXSP 720×480 previews + were absent with the alpha1.1 binary; fixed with the current build + (2026-07-13, verified on-device — 04) and the pak now has load/path diagnostics, + an on-screen empty state, and an empty-list apply guard. RG28XX 480×640 apply is + user-verified (logo upright at boot) and previews are now rotated to match boot + orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`, 04). Remaining: SP backup/restore + exercise, and the 720×720 path (no cube device available). ## P2 — Cleanup / refactors / simplifications diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index ff39fa3d5..5631148fd 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,15 +4,18 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Status (2026-07-10): ready for an alpha release, with documented RG34XXSP issues.** +**Status (2026-07-13): ready for an alpha release, with documented RG34XXSP issues.** RG40XXV has broad hardware coverage. RG34XXSP now passes the complete 720×480 UI sweep, box art, Files, Input, Recently Played, game switcher, RetroAchievements, -displaycal persistence, manual governor changes, lid sleep/wake, and GB/GBC/GBA/FC/SFC. +displaycal persistence, manual governor changes, lid sleep/wake, Bootlogo, and +GB/GBC/GBA/FC/SFC. RG28XX is now user-tested: driver-level rotation validated, +minarch Aspect/Fullscreen scaling fixed (a double-rotation bug), and Bootlogo +apply + rotated previews working. Open RG34XXSP issues are PS1 launch crashes, an FBNeo missing-BIOS lockup, MD Auto CPU -scaling sensitivity, missing 720×480 Bootlogo previews, POWER waking through a closed +scaling sensitivity, POWER waking through a closed lid, and charging remaining in light sleep by current shared policy. Screenshots, resolution-specific overlays, battery accuracy/overnight drain, recovery paths, and -RG28XX/RGcubexx hardware coverage remain untested. The cube is intentionally an +RGcubexx hardware coverage remain untested. The cube is intentionally an external alpha-validation target. BT audio, Pak Store, and OTA update are explicitly outside this alpha scope. Full status is in [08](08-testing-status.md), priorities in [09](09-roadmap.md), and emulator coverage in [10](10-core-game-matrix.md). @@ -67,18 +70,19 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | | Install | TF1 gets one file; NextUI on TF2; no TF1-only mode | ✅ as planned; TF1 writes mountpoint+cmp guarded | | **Splash** | per-panel raw-BMP `dd` assets | **Deviation:** `fbsplash` text renderer — no per-resolution assets needed (02) | -| RG28XX rotation | SDL-level first, GL hook fallback | Both layers plumbed; unvalidated (04) | +| RG28XX rotation | SDL-level first, GL hook fallback | ✅ SDL/driver level alone is correct; the GL hook double-rotated and broke minarch scaling — removed after hardware testing (04) | | HDMI | stretch goal | Detection wired; `SetHDMI()` no-op — still a stretch goal (04) | ## Top open risks 1. **RG34XXSP runtime issues** — PS1 launch crashes, FBNeo can trap MinArch after a - missing-BIOS failure, MD Auto CPU scaling is render-setting-sensitive, Bootlogo - previews are absent at 720×480, and POWER can wake through the closed lid. + missing-BIOS failure, MD Auto CPU scaling is render-setting-sensitive, and POWER + can wake through the closed lid. (Bootlogo previews at 720×480: fixed 2026-07-13.) 2. **Partially tested robustness matrix** — clean uninstall, dirty-SD recovery, SIGUSR1 shutdown, battery accuracy, screenshots, and overnight drain need runs. -3. **Partially tested device matrix** — RG40XXV and RG34XXSP are working; RG28XX - rotation still needs hardware validation, and RGcubexx is an external alpha target. +3. **Partially tested device matrix** — RG40XXV, RG34XXSP, and RG28XX are working + (RG28XX rotation/scaling validated 2026-07-12); RGcubexx is an external alpha + target. 4. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read Anbernic's binaries/scripts; a firmware update can move them (guardrails in 08). 5. **Shared-UI capability regressions** — the Input tester is device-aware, dead From 52871a9c70c0512d93653603e1d0c0ddea548cc9 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 16 Jul 2026 21:33:02 +0200 Subject: [PATCH 42/76] fix(h700): re-suspend on wake if clamshell lid still closed A pocketed power press wakes the kernel from suspend-to-RAM even with the lid shut, and the suspend script exited unconditionally on resume, turning the screen back on inside the closed shell (battery drain and overheating risk). Loop instead: after a successful resume, if hallkey reads 0 (lid closed), re-suspend; hand control back to the caller only once the lid is open. Non-clamshells read hallkey 1 and are unaffected; failed suspends still exit so the caller can escalate to poweroff. Verified on RG34XXSP: lid-closed power presses re-suspend, lid-open wake works normally. --- skeleton/SYSTEM/h700/bin/suspend | 78 +++++++++++++++++++------------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/skeleton/SYSTEM/h700/bin/suspend b/skeleton/SYSTEM/h700/bin/suspend index 747821176..b9f0835a6 100755 --- a/skeleton/SYSTEM/h700/bin/suspend +++ b/skeleton/SYSTEM/h700/bin/suspend @@ -79,39 +79,55 @@ after_async() { before ->&2 echo "Suspending..." -sleep_max_tries=5 -for i in $(seq 1 $sleep_max_tries); do - >&2 echo "Deep sleep attempt $i of $sleep_max_tries" - - sleep_time=$(date +%s) - echo mem >/sys/power/state - sleep_retval=$? - - >&2 echo "Deep sleep: kernel returned $sleep_retval" - if [ $sleep_retval -eq 0 ]; then - break - fi +hallkey=/sys/class/power_supply/axp2202-battery/hallkey - wake_time=$(date +%s) - time_asleep=$(($wake_time-$sleep_time)) - - # Workaround for a strange false negative case where - # the device sleeps properly but still returns non-zero. - # If unaddressed, the device would sleep again immediately - # after the user tried to wake it. - - # If device has been asleep for longer than a set period, - # ignore the retval and continue with waking the device. - if [ $time_asleep -gt 5 ]; then - >&2 echo "Deep sleep: averting false negative retval - (sleep for $time_asleep secs)" - sleep_retval=0 - break +>&2 echo "Suspending..." +while :; do + sleep_max_tries=5 + for i in $(seq 1 $sleep_max_tries); do + >&2 echo "Deep sleep attempt $i of $sleep_max_tries" + + sleep_time=$(date +%s) + echo mem >/sys/power/state + sleep_retval=$? + + >&2 echo "Deep sleep: kernel returned $sleep_retval" + if [ $sleep_retval -eq 0 ]; then + break + fi + + wake_time=$(date +%s) + time_asleep=$(($wake_time-$sleep_time)) + + # Workaround for a strange false negative case where + # the device sleeps properly but still returns non-zero. + # If unaddressed, the device would sleep again immediately + # after the user tried to wake it. + + # If device has been asleep for longer than a set period, + # ignore the retval and continue with waking the device. + if [ $time_asleep -gt 5 ]; then + >&2 echo "Deep sleep: averting false negative retval - (sleep for $time_asleep secs)" + sleep_retval=0 + break + fi + + + >&2 echo "Deep sleep failed: retrying in 3 seconds" + sleep 3 + done + + # Clamshells: a pocketed power press wakes the kernel even with the + # lid shut. Only hand control back to the caller (which turns the + # screen on) once the lid is actually open; otherwise re-suspend. + # Non-clamshell hallkey reads 1, and a suspend failure must still + # exit so the caller can escalate to poweroff. + if [ $sleep_retval -eq 0 ] && [ -r "$hallkey" ] && [ "$(cat "$hallkey")" = "0" ]; then + >&2 echo "Woke with lid closed; re-suspending" + sleep 1 + continue fi - - - >&2 echo "Deep sleep failed: retrying in 3 seconds" - sleep 3 + break done after_sync From e922007d8446c67b36553b9c9af7b5b92c507497 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 17 Jul 2026 00:08:48 +0200 Subject: [PATCH 43/76] feat(h700): seamless HDMI output with hotplug Plug the cable anywhere (menu or in-game) and output switches to a clean 1080p60 signal with the whole app at 1280x720 (games autosave and auto-resume); unplug restores the panel the same way. User-validated on RG40XXV incl. repeated in-game hotplug cycles in both directions. - SetHDMI (libmsettings) now performs the real switch: dispdbg disp0 output switch, wait for the async device attach (~700ms for LCD panel init), fb resize via FBIOPUT, then commit the scanout layer geometry via /dev/disp DISP_LAYER_SET_CONFIG with read-back verify-and-retry. The BSP fbdev glue has no fb_set_par and the attach path asynchronously restores the previous mode's layer config, so a single unverified commit intermittently loses the race (blank-but-backlit panel after unplug, shifted/slow picture after in-game plug). - HDMI audio routed to card ahubhdmi via marker-guarded .asoundrc (audiomon's BT/USB routing always wins); brightness/colortemp/ displaycal re-applied after the panel comes back. - hdmi_active latched in PLAT_initPlatform before SDL init; platform.h gains HAS_HDMI and 1280x720/MAIN_ROW_COUNT 10 runtime ternaries (tg5050's proven 720p scale-2 layout); RG28XX SDL_ROTATION forced off while on HDMI. - Settings app now exits on cable change (replaces the commented-out hdmimon vestige); hotplug debounce reduced from 4s to 1s in nextui and minarch since the switch no longer happens while the app runs. - sunxi_display2_min.h vendors the minimal disp2 layer-config ABI (verified on-device via GET readback before first use). --- docs/h700-port/04-video-display.md | 67 ++++- docs/h700-port/09-roadmap.md | 6 +- workspace/all/minarch/minarch.c | 2 +- workspace/all/nextui/nextui.c | 2 +- workspace/all/settings/settings.cpp | 7 +- workspace/h700/libmsettings/msettings.c | 233 +++++++++++++++++- .../h700/libmsettings/sunxi_display2_min.h | 68 +++++ workspace/h700/platform/platform.c | 15 ++ workspace/h700/platform/platform.h | 20 +- 9 files changed, 402 insertions(+), 18 deletions(-) create mode 100644 workspace/h700/libmsettings/sunxi_display2_min.h diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index 2aead60dc..aea8145fb 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -69,15 +69,66 @@ space. The pak now rotates previews 90° CW on the RG28XX carousel shows what the panel will actually display at boot; apply itself was already correct (user-verified: applied logo renders upright at power-on). -## HDMI — detection wired, output switching not - -- `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state}` so hotplug - *detection* works (hdmimon/rumble-skip logic can fire). -- `SetHDMI()` is an **empty no-op** — no mode switch / fb re-init / UI restart. Full - HDMI out remains a stretch goal. The known mechanism, if ever needed: old port's - `hdmimon.sh` via `/sys/kernel/debug/dispdbg` (`switch1 4 10 …`) + `fbset`, 1280×720, - audio on ALSA card 2 (`ahubhdmi`). Recover with +## HDMI — hotplug output switching, user-validated ✅ (RG40XXV + TV, 2026-07-16) + +Plug-and-play design: when a cable is (dis)connected the running app quits via the +existing `GFX_hdmiChanged()` plumbing (nextui inline, minarch `hdmimon()`, settings +main loop), the relauncher restarts it, and `PLAT_initPlatform()` converges the +output to the cable state *before* SDL video comes up. Boot-with-cable works the +same way for free. + +- `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state}` — hotplug + detection (verified: `cable.0/state` is a bare 0/1; the top-level `state` file is + `HDMI=n` text which `getInt` parses as 0, so `cable.0` is the effective check). +- `SetHDMI()` (libmsettings) now performs the proven old-port sequence in C: + blank fb0 → zero fb → `/sys/kernel/debug/dispdbg` `disp0/switch` with param + `"4 10 0 0 0x4 0x101 0 0 0 8"` (HDMI type 4, mode 10 = **1080p60 signal**) → + `FBIOPUT_VSCREENINFO` to **1280×720** 32bpp double-buffered (the DE + hardware-scales the 720p fb to the 1080p signal) → unblank. Unplug reverses to + param `"1 0"` (LCD) + panel-native fb dims (RG28XX portrait 480×640!). Idempotent: + it reads the live output type from `/sys/class/disp/disp/attr/sys` and no-ops + when already correct. `dispdbg` presence verified on RG40XXV (4.9.170). +- The mali SDL winsys latches fb0 geometry at video init, so the restarted app + automatically gets a 1280×720 EGL surface. `hdmi_active` (latched in + `PLAT_initPlatform`) drives `FIXED_WIDTH/HEIGHT` → 1280×720, `MAIN_ROW_COUNT` → 10 + (tg5050's proven 720p/scale-2 layout); minarch rescales games via its runtime + `DEVICE_WIDTH` latch. `HAS_HDMI`/`HDMI_*` are defined, which also activates the + dormant guards (SCALE_CROPPED downgrade, power-off screen dims). +- RG28XX: `PLAT_initPlatform` overrides `SDL_ROTATION` to 0 while HDMI is active + (fb is landscape then); back to 1 on the panel. +- Audio: `SetHDMI` routes ALSA `default` to card `ahubhdmi` (card 2, verified on + RG40XXV) via `$USERDATA_PATH/.asoundrc`, marker-guarded (`# nextui-hdmi`) so + audiomon's Bluetooth/USB routing always wins and we never clobber a file we + didn't write. +- **The hard part (learned the hard way, all validated on RG40XXV):** this BSP's + fbdev glue has **no `fb_set_par` hook** — `FBIOPUT_VSCREENINFO` records the var + and nothing else, and `sunxi_fb_pan_display` rebuilds only the layer *crop* + from the var each flip (never `fb.size`/`screen_win`). The scanout layer's + buffer size and output window are only written by the boot-time fb request and + by the device-attach path, which *asynchronously restores the previous mode's + layer config* — so after a switch the layer is stale: blank-but-backlit panel + after unplug (crop exceeds the shrunken fb → DE rejects every pan), shifted + + slowed-down picture after in-game plug (stale 640-wide buffer size under a + 1280-wide crop → per-frame DE errors). Two mechanisms fix it in `SetHDMI()`: + 1. `waitForOutput()` — the dispdbg switch is async (~700ms for LCD panel init; + "attached ok" in dmesg); poll `attr/sys` for the target output before + touching the fb. + 2. `commitLayerGeometry()` — read-modify-write the fb0 layer (`/dev/disp` + `DISP_LAYER_GET_CONFIG`/`SET_CONFIG` 0x48/0x47, channel 1 layer 0, structs + in `libmsettings/sunxi_display2_min.h`) with the correct buffer size, crop + and screen window, **verify by read-back and retry until it sticks** — + whichever commit lands last wins against the attach path's restore; commit + again after unblank. The blob's pans then keep the crop in sync (they copy + the committed config). +- Validated end-to-end: plug/unplug in launcher and in-game (autosave → + auto-resume), repeated cycles, game scaling correct at 1280×720. An earlier + "audio stutter on TV" symptom was collateral from the stale-layer DE errors, + not GPU load. Not yet covered: RG28XX/cube/SP models, boot-with-cable, odd + EDIDs (if a display rejects mode 10, mode 5 = 720p60 is the one-line + fallback). Old reference: `git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`. +- Unplug takes ~4-5s to restore: the deliberate `sleep(4)` debounce in the + shared hdmimon/nextui handlers plus the switch itself. Could be tuned later. ## DisplayCal — ported 1:1, tested ✅ diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 7f7bb5b4a..0eb5eefc2 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -112,8 +112,10 @@ Ordered by impact within each section. BIOS is missing; MD needs the Auto-scaling investigation above. Expand coverage across the remaining shipped systems and at least one additional H700 model. 13. Later: RGcubexx bring-up (720×720, wired but no device is available locally; - external validation is an explicit purpose of the alpha), HDMI out (`SetHDMI()` is - a no-op; mechanism documented in 04), RG35XX-family variants (displaycal presets + external validation is an explicit purpose of the alpha), HDMI out (done, + user-validated on RG40XXV incl. in-game hotplug both directions; remaining: + other models, boot-with-cable, odd EDIDs — 04), RG35XX-family variants + (displaycal presets + `DEVICE=rg35xx` mapping already plumbed — 04), Panel-Fix tool, **per-panel displaycal calibration** (measure each device, fill in the neutral presets in displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH diff --git a/workspace/all/minarch/minarch.c b/workspace/all/minarch/minarch.c index b3e156eda..2870169ca 100644 --- a/workspace/all/minarch/minarch.c +++ b/workspace/all/minarch/minarch.c @@ -118,7 +118,7 @@ void hdmimon(void) { LOG_info("restarting after HDMI change...\n"); Menu_beforeSleep(); - sleep(4); + sleep(1); // cable-seating debounce; the output switch itself happens at next app start show_menu = 0; quit = 1; } diff --git a/workspace/all/nextui/nextui.c b/workspace/all/nextui/nextui.c index 273070399..af4101283 100644 --- a/workspace/all/nextui/nextui.c +++ b/workspace/all/nextui/nextui.c @@ -3416,7 +3416,7 @@ int main (int argc, char *argv[]) { Entry* entry = top->entries->items[top->selected]; LOG_info("restarting after HDMI change... (%s)\n", entry->path); saveLast(entry->path); // NOTE: doesn't work in Recents (by design) - sleep(4); + sleep(1); // cable-seating debounce; the output switch itself happens at next app start quit = 1; } } diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index 058b64289..e41e5f7f1 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -1239,11 +1239,14 @@ int main(int argc, char *argv[]) // present GFX_flip(ctx.screen); ctx.dirty = false; - - // hdmimon(); } else GFX_sync(); + + // exit so the relauncher can re-init video at the new output + // resolution (no-op on platforms whose GetHDMI() is stubbed) + if (GFX_hdmiChanged()) + appQuit = true; } delete ctx.menu; diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index aad4c31d1..9e15e8edf 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -14,6 +14,7 @@ #include "displaycal.h" #include "msettings.h" +#include "sunxi_display2_min.h" /////////////////////////////////////// @@ -832,7 +833,237 @@ void SetAudioSink(int value) { SetVolume(GetVolume()); } -void SetHDMI(int value){} +// HDMI output switching (sunxi disp2, kernel 4.9 BSP). The dispdbg debugfs +// interface flips disp0 between the LCD and the HDMI TX; the framebuffer is +// then resized so the mali EGL winsys (which latches fb0 geometry at video +// init) comes up at the matching resolution on the next app start. Sequence +// and parameters replicate the old rg35xxplus port's hdmimon.sh (proven on +// this hardware family): HDMI is a 1080p60 signal fed by a 1280x720 fb that +// the display engine hardware-scales up. Callers are expected to restart the +// UI afterwards; the switch itself must run while no EGL surface exists. + +#define DISPDBG_PATH "/sys/kernel/debug/dispdbg" +#define FB_BLANK_PATH "/sys/class/graphics/fb0/blank" +// must match HDMI_WIDTH/HDMI_HEIGHT in platform.h +#define HDMI_LOGICAL_WIDTH 1280 +#define HDMI_LOGICAL_HEIGHT 720 +// dispdbg switch params: " ..." — type 4=HDMI, mode 10=1080p60; type 1=LCD +#define DISP_SWITCH_HDMI_PARAM "4 10 0 0 0x4 0x101 0 0 0 8" +#define DISP_SWITCH_LCD_PARAM "1 0" +#define ASOUNDRC_HDMI_MARKER "# nextui-hdmi" + +static void panelSize(int* w, int* h) { + char* device = getenv("DEVICE"); + char* model = getenv("RGXX_MODEL"); + *w = 640; *h = 480; + if (exactMatch("RGcubexx", model) || exactMatch("cube", device)) { *w = 720; *h = 720; } + else if (exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model) || exactMatch("rg34xx", device)) { *w = 720; *h = 480; } + else if (exactMatch("RG28xx", model) || exactMatch("rg28xx", device)) { *w = 480; *h = 640; } // panel is mounted portrait +} + +// the live output type, read back from the disp driver so a stale state file +// can never desync us from the hardware +static int hdmiOutputActive(void) { + char buffer[4096] = {0}; + FILE* file = fopen("/sys/class/disp/disp/attr/sys", "r"); + if (!file) return 0; + size_t len = fread(buffer, 1, sizeof(buffer)-1, file); + fclose(file); + buffer[len] = '\0'; + return strstr(buffer, "hdmi output") != NULL; +} + +// The dispdbg switch is asynchronous and slow — the LCD panel init sequence +// alone takes ~700ms ("attached ok" in dmesg). The fb geometry set below is +// what rebuilds the DE layer against the new output, so it must not run until +// the attach has completed or the rebuild is computed against the old output +// and the panel shows a stale (blank) layer. +static void waitForOutput(int hdmi) { + for (int i = 0; i < 60; i++) { // up to 3s + if (hdmiOutputActive() == hdmi) break; + usleep(50000); + } + usleep(150000); // settle margin after the attach shows up in sysfs +} + +static void dispdbgSwitch(char* param) { + putFile(DISPDBG_PATH "/name", "disp0"); + putFile(DISPDBG_PATH "/command", "switch"); + putFile(DISPDBG_PATH "/param", param); + putFile(DISPDBG_PATH "/start", "1"); +} + +static void clearFramebuffer(void) { + int fd = open("/dev/fb0", O_WRONLY); + if (fd < 0) return; + char zeros[4096] = {0}; + while (write(fd, zeros, sizeof(zeros)) > 0); + close(fd); +} + +static void setFramebufferSize(int w, int h) { + int fd = open("/dev/fb0", O_RDWR); + if (fd < 0) return; + struct fb_var_screeninfo vinfo; + if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) == 0) { + // zero geometry first ("fbset -g 0 0 0 0 32" in the old port) so the + // driver drops the old allocation before sizing the new one + vinfo.xres = vinfo.yres = vinfo.xres_virtual = vinfo.yres_virtual = 0; + vinfo.bits_per_pixel = 32; + ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo); // failure is fine, best effort + usleep(250000); + vinfo.xres = w; + vinfo.yres = h; + vinfo.xres_virtual = w; + vinfo.yres_virtual = h * 2; // double buffered + vinfo.bits_per_pixel = 32; + // FORCE so set_par runs (and rebuilds the DE layer for the new output) + // even when the geometry is unchanged + vinfo.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE; + if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) < 0) + fprintf(stderr, "SetHDMI: FBIOPUT_VSCREENINFO %dx%d failed: %s\n", w, h, strerror(errno)); + } + close(fd); +} + +// The fbdev glue in this BSP has no set_par hook: FBIOPUT only records the new +// var, and pan_display only rewrites the layer *crop* from it — the scanout +// layer's buffer dimensions and output window are never updated by any fbdev +// call. Left alone, whichever values the switch path last committed stay live +// (blank panel after unplug, page-offset ghosting after plug). So after every +// switch we read-modify-write the fb0 layer ourselves with the geometry that +// matches the new framebuffer and output; the blob's per-flip pans then keep +// the crop in sync against our committed config. +// The switch path restores the previous mode's layer config on device attach, +// asynchronously and sometimes AFTER we've already written ours — whichever +// commit lands last wins. So: commit, read back, and retry until it sticks. +// (The app hasn't started yet when this runs, so there are no competing pans.) +static void commitLayerGeometry(int fbW, int fbH, int outW, int outH) { + int fd = open("/dev/disp", O_RDWR); + if (fd < 0) return; + struct disp_layer_config config; + unsigned long param[4] = {0, (unsigned long)&config, 1, 0}; + int applied = 0; + for (int attempt = 0; attempt < 20 && !applied; attempt++) { // up to ~2s + memset(&config, 0, sizeof(config)); + config.channel = 1; // fb0 is bound to channel 1, layer 0 (FBIO_ALLOC in dev_fb.c) + config.layer_id = 0; + if (ioctl(fd, DISP_LAYER_GET_CONFIG, param) < 0) { + fprintf(stderr, "SetHDMI: DISP_LAYER_GET_CONFIG failed: %s\n", strerror(errno)); + break; + } + config.enable = 1; + for (int i = 0; i < 3; i++) { + config.info.fb.size[i].width = fbW; + config.info.fb.size[i].height = fbH * 2; // whole double buffer + } + config.info.fb.crop.x = 0; + config.info.fb.crop.y = ((long long)fbH) << 32; // page 1; pans re-sync it every flip + config.info.fb.crop.width = ((long long)fbW) << 32; + config.info.fb.crop.height = ((long long)fbH) << 32; + config.info.screen_win.x = 0; + config.info.screen_win.y = 0; + config.info.screen_win.width = outW; + config.info.screen_win.height = outH; + if (ioctl(fd, DISP_LAYER_SET_CONFIG, param) < 0) { + fprintf(stderr, "SetHDMI: DISP_LAYER_SET_CONFIG failed: %s\n", strerror(errno)); + break; + } + usleep(100000); // let the vsync apply run (and any late restore overwrite us) + memset(&config, 0, sizeof(config)); + config.channel = 1; + config.layer_id = 0; + if (ioctl(fd, DISP_LAYER_GET_CONFIG, param) < 0) + break; + applied = config.info.fb.size[0].width == (unsigned)fbW + && config.info.screen_win.width == (unsigned)outW; + } + if (!applied) + fprintf(stderr, "SetHDMI: layer geometry %dx%d->%dx%d did not stick\n", fbW, fbH, outW, outH); + close(fd); +} + +// route ALSA "default" to the HDMI TX while connected; only ever touch an +// .asoundrc we wrote ourselves so audiomon's Bluetooth/USB routing wins +static void setHDMIAudioRoute(int on) { + char* home = getenv("USERDATA_PATH"); + if (!home) home = getenv("HOME"); + if (!home) return; + char path[512]; + snprintf(path, sizeof(path), "%s/.asoundrc", home); + + char buffer[64] = {0}; + FILE* file = fopen(path, "r"); + if (file) { + fread(buffer, 1, sizeof(buffer)-1, file); + fclose(file); + if (!prefixMatch(ASOUNDRC_HDMI_MARKER, buffer)) return; // not ours + } + + if (on) { + putFile(path, + ASOUNDRC_HDMI_MARKER "\n" + "pcm.!default {\n" + " type plug\n" + " slave.pcm {\n" + " type hw\n" + " card ahubhdmi\n" + " }\n" + "}\n" + "ctl.!default {\n" + " type hw\n" + " card ahubhdmi\n" + "}\n"); + } + else if (file) unlink(path); // only removes the file when it carried our marker +} + +void SetHDMI(int value) { + value = value ? 1 : 0; + if (hdmiOutputActive() == value) { + setHDMIAudioRoute(value); // keep audio routing consistent even when the output already matches + return; + } + + putFile(FB_BLANK_PATH, "4"); + clearFramebuffer(); + + dispdbgSwitch(value ? DISP_SWITCH_HDMI_PARAM : DISP_SWITCH_LCD_PARAM); + waitForOutput(value); + + // 1080p60 signal (mode 10): the DE scales the 720p fb up to it + int fbW = HDMI_LOGICAL_WIDTH, fbH = HDMI_LOGICAL_HEIGHT, outW = 1920, outH = 1080; + if (!value) { + panelSize(&fbW, &fbH); + outW = fbW; + outH = fbH; + } + setFramebufferSize(fbW, fbH); + commitLayerGeometry(fbW, fbH, outW, outH); + usleep(250000); + putFile(FB_BLANK_PATH, "0"); + commitLayerGeometry(fbW, fbH, outW, outH); // unblank can trigger another restore; re-verify + + // Re-enabling the LCD brings it up with whatever backlight/LUT state the + // driver has, and the usual apply happened while the panel was disabled + // (InitSettings runs before GFX_init/PLAT_initPlatform in nextui), so the + // panel stays dark unless we re-apply here, after the switch. + if (!value) { + if (settings) { + SetBrightness(GetBrightness()); + SetColortemp(GetColortemp()); + applyDisplayCalSettings(); + } + else { + // process hasn't mapped the settings shm yet (e.g. minarch races a + // cable change during startup); a visible panel beats a dark one, + // the correct value is re-applied on the next InitSettings + SetRawBrightness(96); + } + } + + setHDMIAudioRoute(value); +} void SetMute(int value) { settings->mute = value; diff --git a/workspace/h700/libmsettings/sunxi_display2_min.h b/workspace/h700/libmsettings/sunxi_display2_min.h new file mode 100644 index 000000000..83b2f2fb2 --- /dev/null +++ b/workspace/h700/libmsettings/sunxi_display2_min.h @@ -0,0 +1,68 @@ +// Minimal subset of the sunxi disp2 UAPI (include/video/sunxi_display2.h from +// the 4.9 sun50iw9 BSP kernel) — just enough to read-modify-write the fb0 +// scanout layer via DISP_LAYER_GET_CONFIG/DISP_LAYER_SET_CONFIG. Field order, +// sizes and the ioctl numbers must match the kernel ABI exactly; do not edit +// without checking against the BSP header. +#ifndef SUNXI_DISPLAY2_MIN_H +#define SUNXI_DISPLAY2_MIN_H + +#include + +#define DISP_LAYER_SET_CONFIG 0x47 +#define DISP_LAYER_GET_CONFIG 0x48 + +struct disp_rect { + int x; + int y; + unsigned int width; + unsigned int height; +}; + +struct disp_rectsz { + unsigned int width; + unsigned int height; +}; + +struct disp_rect64 { + long long x; + long long y; + long long width; + long long height; +}; + +struct disp_fb_info { + unsigned long long addr[3]; + struct disp_rectsz size[3]; + unsigned int align[3]; + int format; /* enum disp_pixel_format */ + int color_space; /* enum disp_color_space */ + unsigned int trd_right_addr[3]; + bool pre_multiply; + struct disp_rect64 crop; + int flags; /* enum disp_buffer_flags */ + int scan; /* enum disp_scan_flags */ +}; + +struct disp_layer_info { + int mode; /* enum disp_layer_mode */ + unsigned char zorder; + unsigned char alpha_mode; + unsigned char alpha_value; + struct disp_rect screen_win; + bool b_trd_out; + int out_trd_mode; /* enum disp_3d_out_mode */ + union { + unsigned int color; + struct disp_fb_info fb; + }; + unsigned int id; +}; + +struct disp_layer_config { + struct disp_layer_info info; + bool enable; + unsigned int channel; + unsigned int layer_id; +}; + +#endif diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 9f9a4e313..c2171b371 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -29,6 +29,7 @@ int is_rg28xx = 0; int is_rg34xx = 0; int is_cube = 0; +int hdmi_active = 0; int dev_has_lstick = 0; int dev_has_rstick = 0; static int wake_fd = -1; @@ -214,11 +215,25 @@ static void detect_device(void) { void PLAT_initPlatform(void) { detect_device(); + + // GFX_init() runs this before PLAT_initVideo(), so the output switch (and + // the fb resize it implies) happens while no EGL surface exists — the mali + // winsys then latches the new fb geometry when SDL video comes up. SetHDMI + // is idempotent, so every app start converges the output to the cable + // state; hotplug while running is handled by the existing GFX_hdmiChanged + // quit-and-relaunch plumbing landing back here. + hdmi_active = GetHDMI(); + SetHDMI(hdmi_active); + // NOTE: should_rotate must stay 0 even on the RG28XX. Its portrait panel is // handled entirely by the mali SDL driver (SDL_ROTATION=1 in launch.sh), so // the app-side coordinate space is plain 640x480 landscape; setting the flag // makes setRectToAspectRatio() swap axes a second time and break minarch's // Aspect/Fullscreen scaling. + // On HDMI the fb is 1280x720 landscape, so that rotation must be off; this + // overrides the launch.sh export for the lifetime of this process. + if (is_rg28xx) + setenv("SDL_ROTATION", hdmi_active ? "0" : "1", 1); } static SDL_Joystick **joysticks = NULL; diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index d2cfb707f..53f97cba6 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -14,6 +14,7 @@ extern int is_rg28xx; extern int is_rg34xx; extern int is_cube; +extern int hdmi_active; extern int dev_has_lstick; extern int dev_has_rstick; @@ -130,9 +131,21 @@ extern int dev_has_rstick; /////////////////////////////// +// While an HDMI cable is connected the whole app runs at 1280x720 (the fb is +// hardware-scaled to a 1080p60 signal by the display engine — see SetHDMI in +// libmsettings). hdmi_active is latched once per process in PLAT_initPlatform, +// so like is_cube these are constant for the process lifetime; the existing +// hotplug quit-and-relaunch plumbing restarts apps on cable changes. +// Values must match HDMI_LOGICAL_* in libmsettings/msettings.c. +#define HAS_HDMI 1 +#define HDMI_WIDTH 1280 +#define HDMI_HEIGHT 720 +#define HDMI_PITCH (HDMI_WIDTH * FIXED_BPP) +#define HDMI_SIZE (HDMI_PITCH * HDMI_HEIGHT) + #define FIXED_SCALE 2 -#define FIXED_WIDTH (is_cube?720:(is_rg34xx?720:640)) -#define FIXED_HEIGHT (is_cube?720:480) +#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:(is_rg34xx?720:640))) +#define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:(is_cube?720:480)) #define FIXED_BPP 2 #define FIXED_DEPTH (FIXED_BPP * 8) #define FIXED_PITCH (FIXED_WIDTH * FIXED_BPP) @@ -140,7 +153,8 @@ extern int dev_has_rstick; /////////////////////////////// -#define MAIN_ROW_COUNT (is_cube?8:6) +// 10 rows at 720p/scale-2 matches tg5050 (same resolution and scale) +#define MAIN_ROW_COUNT (hdmi_active?10:(is_cube?8:6)) #define QUICK_SWITCHER_COUNT 3 #define PADDING 5 From 759fcc0b957bb991cfbcc0a7bbe3f3172292c780 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Thu, 16 Jul 2026 22:40:13 +0200 Subject: [PATCH 44/76] fix(h700): initialize the stock Bluetooth adapter Bring up the Realtek Bluetooth UART through Anbernic's vendor control script before starting the stock BlueZ service. Add serialized and idempotent lifecycle handling, stale attach recovery, adapter readiness checks, model-aware aliases, and persistent diagnostics while keeping Bluetooth audio disabled. Document the clean RG40XXV stock stack and live controller validation. Controller discovery, pairing, trust, connection, and SDL attachment now pass without bundling BlueZ or related userspace libraries; raw controller mapping remains deferred as a cross-platform concern. --- docs/h700-port/00-device-facts.md | 12 +- docs/h700-port/05-audio.md | 15 +- docs/h700-port/07-wifi-bluetooth.md | 36 ++- docs/h700-port/08-testing-status.md | 1 + docs/h700-port/09-roadmap.md | 12 +- docs/h700-port/README.md | 2 +- skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh | 243 ++++++++++++++++-- 7 files changed, 272 insertions(+), 49 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index eac00c0db..892d8899e 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -123,9 +123,15 @@ Anbernic stock-firmware update — paths have historically been stable, but the stops NetworkManager and owns its own wpa_supplicant instance (07) - **WiFi does not recover on its own after `mem` suspend** — confirmed; the suspend script bounces it on resume (06/07) -- Bluetooth: `rtl_btlpm` module, `bluetoothd` (BlueZ 5.64), `rtk_hciattach -n -s 115200 - ttyS1 rtk_h5` already running at boot — no re-attach needed -- Ubuntu 22.04 ships **no bluealsa** and **no udhcpc** (DHCP = `dhclient`) +- Bluetooth: `rtl_btlpm` module and stock BlueZ (5.66 on clean 2026 RG40XXV; + 5.64 was observed on earlier firmware). The stock frontend normally runs + `rtk_hciattach -n -s 115200 ttyS1 rtk_h5`, but NextUI replaces that frontend + before it performs the attach, so the H700 init script must invoke the vendor + `setBluetooth.sh` path itself. +- The clean 2026 RG40XXV image contains bluealsa and its ALSA plugins, contrary to + the earlier probe recorded here. H700 A2DP remains deliberately gated off and + NextUI does not depend on or start bluealsa. Ubuntu has no `udhcpc` (DHCP = + `dhclient`). ### Storage & partitions (TF1 = the stock OS card) ``` diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md index 9762114b9..6d8c9c945 100644 --- a/docs/h700-port/05-audio.md +++ b/docs/h700-port/05-audio.md @@ -55,17 +55,18 @@ on a live device. Until then: no jack-based switching in NextUI. ## Bluetooth audio — deliberately disabled this beta -Plan was to build and ship `bluez-alsa` (Ubuntu 22.04 doesn't include it). **Shipped -decision: gate BT audio off instead**: +The clean 2026 RG40XXV stock image contains bluealsa 4.1 and its ALSA plugins, while +earlier firmware probing reported it absent. **The shipped decision remains to gate +BT audio off** until the stock stack is validated across supported firmware: - settings built with `-DNO_BT_AUDIO` for h700 → BT samplerate menu hidden (`btmenu.cpp` made null-safe for the missing item) -- `audiomon` refuses A2DP sinks unless a `bluealsa` binary exists (it doesn't) -- `bt_init.sh` still starts bluealsa *if present*, so dropping a built bluealsa into - `.system/h700/bin` lights the path up again +- `audiomon` refuses A2DP sinks unless a `bluealsa` binary exists +- `bt_init.sh` does not start bluealsa even when the stock image contains it - `skeleton/BASE/README.txt` tells users BT audio is off in this beta -BT controller input still works through SDL (07). Shipping bluealsa is the path to -re-enable audio — see 09-roadmap. +BT controller input still works through SDL (07). Validate the stock BlueZ controller +path first, then separately decide whether to rely on the stock bluealsa stack or ship +it — see 09-roadmap. ## Sample rates diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index ddd213eeb..900992efa 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -36,21 +36,31 @@ RetroAchievements login and unlock work on RG34XXSP, including credential entry the on-screen keyboard. Pak Store and OTA update are explicitly excluded from the alpha scope; testing is not applicable and they are not alpha release gates. -## Bluetooth (as shipped — system BlueZ, input implemented, audio gated off) +## Bluetooth (as shipped — system BlueZ, controller transport working, audio gated off) -- BlueZ 5.64 on device → no `btmanager`/upgrade-pakz (as planned); `generic_bt.c` - drives `bluetoothctl` -- `bt_init.sh` ensures hci is up (stock's `rtk_hciattach` already ran), starts a - `bluetoothctl` agent (NoInputNoOutput), and would start `bluealsa - --profile=a2dp-source` **if the binary existed** +- NextUI uses the stock BlueZ stack → no `btmanager`/upgrade-pakz. A clean 2026 + RG40XXV reports 5.66 for both `bluetoothd` and `bluetoothctl`; earlier firmware + probing reported 5.64. `generic_bt.c` detects the client version at runtime. +- The stock frontend normally creates `hci0` by calling + `/mnt/vendor/ctrl/setBluetooth.sh`, but NextUI replaces that frontend before the + call occurs. `bt_init.sh` now owns that vendor attach/enable lifecycle, waits for + `hci0`, and only then starts or restarts stock `bluetooth.service`. +- Bluetooth lifecycle failures are recorded in + `$LOGS_PATH/bluetooth.txt` instead of being silently discarded. - `HAS_BTAGENT` enabled for h700 (settings pairing agent; jammy sysroot has glib — - links fine, loads on device) -- **BT audio: deliberately not shipped this beta** — bluez-alsa is not in Ubuntu - 22.04 and we chose to gate rather than build it: `-DNO_BT_AUDIO` hides the - samplerate UI, audiomon refuses A2DP sinks without a bluealsa binary, README says - so. Full story + re-enable path in 05 and 09-roadmap. -- BT controller pairing/input: implemented via the SDL joystick path - (`SDL_JOYSTICK_DISABLE_UDEV=1`; corrected JOY_* indices in 03) — **untested**. + links fine, loads on device). It is the persistent pairing agent and owns the + pairable window; the init script does not create a short-lived `bluetoothctl` + agent. +- **BT audio: deliberately not shipped this beta** — the clean 2026 RG40XXV stock + image does contain bluealsa 4.1 and its ALSA plugins, contrary to the earlier + probe, but `-DNO_BT_AUDIO` remains and `bt_init.sh` does not start it. Controller + pairing is the first validation gate; full story in 05 and 09-roadmap. +- BT controller transport is verified on RG40XXV: Settings discovers, pairs, trusts, + connects, and exposes a DualSense as an SDL joystick and evdev input device. + Button semantics are not fully normalized because the shared tg5040/tg5050/H700 + input architecture interprets raw SDL joystick indices using platform constants. + That is a cross-platform controller-mapping issue, not an H700 Bluetooth bring-up + gap, and is deliberately deferred from this branch. ## Diagnostics diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 6731a816e..cb7ce17d0 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -39,6 +39,7 @@ | Rumble (moto on/off) | ✅ | | WiFi scan/connect/forget | ✅ | | WiFi survives sleep; NTP sync | ✅ | +| BT adapter init + controller pairing/attachment | ✅ RG40XXV: vendor UART attach creates `hci0`; stock BlueZ 5.66 discovers, pairs, trusts, and connects a DualSense; NextUI opens it as an SDL joystick plus `/dev/input/event3`; five restart cycles passed without duplicate attach/daemon processes. Raw button semantics remain a platform-agnostic tg5040/tg5050/H700 mapping issue and are out of scope for this branch | | Deep sleep (auto/manual) + wake | ⚠️ core paths work on RG34XXSP and RG40XXV, including in-game resume and power-off auto-resume. RG34XXSP POWER can wake the device while the lid is closed; charging intentionally prevents deep sleep in shared code (06) | | Files app (NextCommander): input, scaling, first-frame render | ✅ tested on RG40XXV and RG34XXSP; PPU 2 retained for alpha | | Input pak: per-device stick layout | ✅ RG40XXV shows working L3 only; RG34XXSP shows working L3/R3. Analog movement is not visualized by the existing Input pak and is out of scope for this port | diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 0eb5eefc2..d126b7f10 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -86,10 +86,14 @@ Ordered by impact within each section. nit: syncsettings still "restores" the no-op enhance values on resume. Worth a systematic sweep: grep settings.cpp / paks for capability flags that default to "present" and decide each for h700. -9. **BT audio: ship bluealsa or formally drop it.** The gate-off is clean and - reversible (drop a `bluealsa` binary in `.system/h700/bin` and the path lights - up). Building bluez-alsa in the toolchain is the last piece of tg5040 feature - parity. If dropped instead, remove the dormant bt_init/audiomon plumbing. +9. **BT audio: validate stock bluealsa or formally drop it.** The clean 2026 + RG40XXV image already contains bluealsa 4.1 and its ALSA plugins, while earlier + firmware probing reported it absent. Controller discovery, pairing, connection, + and SDL attachment now pass on RG40XXV. Test A2DP across supported stock firmware; + only package bluealsa if the stock component is missing or incompatible. Until + then `NO_BT_AUDIO` remains and H700's init script does not start bluealsa. Raw + external-controller button normalization is shared with tg5040/tg5050 and belongs + in a separate cross-platform change. 10. **480p UI polish pass** (04) — verdict from real use on RG40XXV and RG34XXSP: **good for alpha**. The 720×480 Home UI, Battery, Game Tracker, Input, Clock, Settings, on-screen keyboard, Files, and in-game menus all work well. Box art is diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 5631148fd..339efb0f5 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -62,7 +62,7 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; 720×480 UI and box art pass, resolution-specific overlays untested | | **Input** | SDL joystick route | **Deviation:** raw evdev primary (SDL js enumeration unreliable on stock image); SDL kept for BT pads (03) | | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | -| **BT audio** | build + ship bluealsa | **Deviation:** gated off this alpha (`NO_BT_AUDIO`); re-enable path documented (05/07) | +| **BT audio** | build + ship bluealsa | **Deviation:** gated off this alpha (`NO_BT_AUDIO`); clean 2026 RG40XXV stock already contains bluealsa, but cross-firmware validation is still required (05/07) | | Sleep | `echo mem` + tg5040-style wrapper | ⚠ repeated sleep/wake, in-game resume, and power-off auto-resume pass; charging intentionally stays in light sleep (06) | | Lid | hallkey → PLAT lid API | ⚠ close/open works, but POWER can wake RG34XXSP while the lid remains closed | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | diff --git a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh index 10c003a9f..57c328f8e 100755 --- a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh +++ b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh @@ -1,36 +1,239 @@ #!/bin/sh -DEVICE_NAME="${RGXX_MODEL:-Anbernic RG XX} (NextUI)" +# H700 stock firmware attaches the RTL8821CS Bluetooth UART from the stock +# frontend via setBluetooth.sh. NextUI replaces that frontend, so it must run +# the vendor attach path itself before starting BlueZ. -start_bt() { - rfkill.elf unblock bluetooth 2>/dev/null || rfkill unblock bluetooth 2>/dev/null || true - systemctl start bluetooth 2>/dev/null || true - pidof bluetoothd >/dev/null 2>&1 || bluetoothd >/dev/null 2>&1 & +if [ -z "$RGXX_MODEL" ]; then + RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" +fi +DEVICE_NAME="Anbernic ${RGXX_MODEL:-RG XX} (NextUI)" +VENDOR_BT_SCRIPT="/mnt/vendor/ctrl/setBluetooth.sh" +BTCTL="/usr/bin/bluetoothctl" +HCI_PATH="/sys/class/bluetooth/hci0" +VENDOR_LOCK="/tmp/.init_bt" +NEXTUI_LOCK="/tmp/nextui-bt-init.lock" +HCI_LOG="/tmp/nextui-rtk_hciattach.log" +LOG_DIR="${LOGS_PATH:-/mnt/SDCARD/.userdata/h700/logs}" +LOG_FILE="$LOG_DIR/bluetooth.txt" + +mkdir -p "$LOG_DIR" 2>/dev/null || true + +log() { + bt_message="$(date '+%Y-%m-%d %H:%M:%S') bt_init: $*" + printf '%s\n' "$bt_message" >> "$LOG_FILE" 2>/dev/null || true + printf '%s\n' "$bt_message" >&2 +} + +release_lock() { + rm -rf "$NEXTUI_LOCK" 2>/dev/null || true +} + +acquire_lock() { + bt_lock_tries=0 + while ! mkdir "$NEXTUI_LOCK" 2>/dev/null; do + if [ -r "$NEXTUI_LOCK/pid" ]; then + bt_lock_pid="$(cat "$NEXTUI_LOCK/pid" 2>/dev/null)" + if [ -n "$bt_lock_pid" ] && ! kill -0 "$bt_lock_pid" 2>/dev/null; then + log "Removing stale operation lock from pid $bt_lock_pid" + release_lock + continue + fi + fi + + bt_lock_tries=$((bt_lock_tries + 1)) + if [ "$bt_lock_tries" -ge 10 ]; then + log "Timed out waiting for another Bluetooth operation" + return 1 + fi + sleep 1 + done + + printf '%s\n' "$$" > "$NEXTUI_LOCK/pid" + trap release_lock 0 + trap 'release_lock; exit 1' 1 2 15 + return 0 +} + +unblock_bt() { + if command -v rfkill.elf >/dev/null 2>&1; then + rfkill.elf unblock bluetooth >> "$LOG_FILE" 2>&1 || true + else + rfkill unblock bluetooth >> "$LOG_FILE" 2>&1 || true + fi +} + +block_bt() { + if command -v rfkill.elf >/dev/null 2>&1; then + rfkill.elf block bluetooth >> "$LOG_FILE" 2>&1 || true + else + rfkill block bluetooth >> "$LOG_FILE" 2>&1 || true + fi +} + +wait_for_hci() { + bt_hci_tries=0 + while [ ! -d "$HCI_PATH" ] && [ "$bt_hci_tries" -lt 7 ]; do + bt_hci_tries=$((bt_hci_tries + 1)) + sleep 1 + done + [ -d "$HCI_PATH" ] +} + +attach_hci() { + [ -d "$HCI_PATH" ] && return 0 + + if [ ! -x "$VENDOR_BT_SCRIPT" ]; then + log "Vendor Bluetooth script is missing or not executable: $VENDOR_BT_SCRIPT" + return 1 + fi + + # Recover from an interrupted init: the vendor script refuses to attach when + # its tmpfs lock exists, even if rtk_hciattach is no longer running. + if pidof rtk_hciattach >/dev/null 2>&1; then + log "rtk_hciattach is running without hci0; restarting it" + killall rtk_hciattach >> "$LOG_FILE" 2>&1 || true + sleep 1 + fi + rm -f "$VENDOR_LOCK" + + log "Attaching stock Bluetooth UART via $VENDOR_BT_SCRIPT" + : > "$HCI_LOG" + if ! "$VENDOR_BT_SCRIPT" init >> "$HCI_LOG" 2>&1; then + log "Vendor Bluetooth init command failed" + tail -n 80 "$HCI_LOG" >> "$LOG_FILE" 2>&1 || true + return 1 + fi + + if ! wait_for_hci; then + log "Timed out waiting for $HCI_PATH" + tail -n 80 "$HCI_LOG" >> "$LOG_FILE" 2>&1 || true + ps | grep rtk_hciattach | grep -v grep >> "$LOG_FILE" 2>&1 || true + return 1 + fi + + log "Bluetooth adapter appeared as hci0" + return 0 +} - hciconfig hci0 up 2>/dev/null || true +start_bluez() { + if systemctl is-active --quiet bluetooth 2>/dev/null; then + # BlueZ may have started before hci0 existed. Restart it once after a new + # attach so its initial adapter state is deterministic. + if [ "$bt_attached_now" = "1" ]; then + log "Restarting stock bluetooth.service after HCI attach" + systemctl restart bluetooth >> "$LOG_FILE" 2>&1 || return 1 + fi + else + log "Starting stock bluetooth.service" + systemctl start bluetooth >> "$LOG_FILE" 2>&1 || return 1 + fi + return 0 +} - if command -v bluealsa >/dev/null 2>&1 && ! pidof bluealsa >/dev/null 2>&1; then - bluealsa -p a2dp-source >/dev/null 2>&1 & +wait_for_bluez_adapter() { + bt_bluez_tries=0 + while [ "$bt_bluez_tries" -lt 5 ]; do + if "$BTCTL" show >/dev/null 2>&1; then + return 0 + fi + bt_bluez_tries=$((bt_bluez_tries + 1)) sleep 1 + done + return 1 +} + +start_bt() { + log "Starting Bluetooth for ${RGXX_MODEL:-unknown H700 model}" + + if [ ! -x "$VENDOR_BT_SCRIPT" ]; then + log "Vendor Bluetooth script is missing or not executable: $VENDOR_BT_SCRIPT" + return 1 + fi + if [ ! -x "$BTCTL" ]; then + log "Stock bluetoothctl is missing or not executable: $BTCTL" + return 1 + fi + btctl_version="$($BTCTL --version 2>&1)" + if [ $? -ne 0 ]; then + log "Stock bluetoothctl cannot run: $btctl_version" + return 1 + fi + log "Using stock $btctl_version" + + unblock_bt + + bt_attached_now=0 + if [ ! -d "$HCI_PATH" ]; then + attach_hci || return 1 + bt_attached_now=1 + fi + + if ! "$VENDOR_BT_SCRIPT" enable >> "$LOG_FILE" 2>&1; then + log "Vendor Bluetooth enable command failed" + return 1 + fi + + start_bluez || { + log "Failed to start stock bluetooth.service" + return 1 + } + + if ! wait_for_bluez_adapter; then + log "BlueZ did not expose hci0 through bluetoothctl" + return 1 fi - bluetoothctl power on >/dev/null 2>&1 || true - bluetoothctl discoverable on >/dev/null 2>&1 || true - bluetoothctl pairable on >/dev/null 2>&1 || true - bluetoothctl agent NoInputNoOutput >/dev/null 2>&1 || true - bluetoothctl default-agent >/dev/null 2>&1 || true - bluetoothctl system-alias "$DEVICE_NAME" >/dev/null 2>&1 || true + if ! "$BTCTL" power on >> "$LOG_FILE" 2>&1; then + log "Failed to power on the BlueZ adapter" + return 1 + fi + "$BTCTL" discoverable on >> "$LOG_FILE" 2>&1 || log "Failed to make the adapter discoverable" + "$BTCTL" pairable on >> "$LOG_FILE" 2>&1 || log "Failed to make the adapter pairable" + "$BTCTL" system-alias "$DEVICE_NAME" >> "$LOG_FILE" 2>&1 || log "Failed to set the adapter alias" + + if ! "$BTCTL" show 2>/dev/null | grep -q 'Powered: yes'; then + log "Bluetooth adapter exists but is not powered" + return 1 + fi + if ! "$BTCTL" show 2>/dev/null | grep -q 'Pairable: yes'; then + log "Adapter is powered; Settings will make it pairable while its persistent agent is open" + fi + + log "Bluetooth is ready" + return 0 } stop_bt() { - bluetoothctl power off >/dev/null 2>&1 || true + log "Stopping Bluetooth" + + if [ -x "$BTCTL" ]; then + "$BTCTL" scan off >> "$LOG_FILE" 2>&1 || true + "$BTCTL" power off >> "$LOG_FILE" 2>&1 || true + fi killall bluetoothctl 2>/dev/null || true + + # A2DP remains disabled for H700. Stop a stock or development bluealsa + # instance left by an older NextUI build, but do not restart it. killall bluealsa 2>/dev/null || true - hciconfig hci0 down 2>/dev/null || true - systemctl stop bluetooth 2>/dev/null || killall bluetoothd 2>/dev/null || true - rfkill.elf block bluetooth 2>/dev/null || rfkill block bluetooth 2>/dev/null || true + + systemctl stop bluetooth >> "$LOG_FILE" 2>&1 || killall bluetoothd 2>/dev/null || true + hciconfig hci0 down >> "$LOG_FILE" 2>&1 || true + if pidof rtk_hciattach >/dev/null 2>&1; then + killall rtk_hciattach >> "$LOG_FILE" 2>&1 || true + sleep 1 + fi + rm -f "$VENDOR_LOCK" + block_bt + + log "Bluetooth is stopped" + return 0 } +if ! acquire_lock; then + exit 1 +fi + case "$1" in start|"") start_bt @@ -39,9 +242,7 @@ case "$1" in stop_bt ;; restart) - stop_bt - sleep 1 - start_bt + stop_bt && start_bt ;; *) echo "Usage: $0 {start|stop|restart}" From bf362cde0e9bd3ba8959a68dc0802fc18ba0897b Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 17 Jul 2026 00:21:56 +0200 Subject: [PATCH 45/76] feat(h700): enable stock Bluetooth audio Start the firmware BlueALSA daemon only after the H700 adapter and stock BlueZ service are ready. Enable native A2DP volume so headsets do not connect at zero transport volume, and expose the existing Bluetooth sample-rate setting. Keep the shared audio monitor behavior unchanged except for a compile-time H700 omission of the unsupported delay option. Do not bundle BlueALSA, ALSA plugins, SBC, or any BlueZ component, leaving tg5040 and tg5050 output unchanged. Document the AirPods playback findings and the remaining reconnect and suspend validation. --- docs/h700-port/00-device-facts.md | 10 ++- docs/h700-port/01-toolchain-and-build.md | 4 +- docs/h700-port/05-audio.md | 47 +++++++---- docs/h700-port/07-wifi-bluetooth.md | 14 ++-- docs/h700-port/08-testing-status.md | 8 +- docs/h700-port/09-roadmap.md | 20 +++-- docs/h700-port/README.md | 10 ++- skeleton/BASE/README.txt | 2 +- skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh | 83 ++++++++++++++++++- workspace/all/audiomon/Makefile | 3 + workspace/all/audiomon/audiomon.cpp | 8 +- workspace/all/settings/makefile | 2 +- 12 files changed, 162 insertions(+), 49 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 892d8899e..3e08c1da0 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -128,10 +128,12 @@ Anbernic stock-firmware update — paths have historically been stable, but the `rtk_hciattach -n -s 115200 ttyS1 rtk_h5`, but NextUI replaces that frontend before it performs the attach, so the H700 init script must invoke the vendor `setBluetooth.sh` path itself. -- The clean 2026 RG40XXV image contains bluealsa and its ALSA plugins, contrary to - the earlier probe recorded here. H700 A2DP remains deliberately gated off and - NextUI does not depend on or start bluealsa. Ubuntu has no `udhcpc` (DHCP = - `dhclient`). +- The clean 2026 RG40XXV image contains BlueALSA 4.2.0, its ALSA PCM/control + plugins, ALSA configuration, and D-Bus policy, contrary to the earlier probe + recorded here. Its `a2dp-source` profile successfully registers SBC media + endpoints with stock BlueZ. NextUI uses these stock components directly and does + not bundle or replace BlueALSA, its ALSA plugins, SBC, or BlueZ. Ubuntu has no + `udhcpc` (DHCP = `dhclient`). ### Storage & partitions (TF1 = the stock OS card) ``` diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 488a5653b..496639b3d 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -110,7 +110,9 @@ future stock-OS port: The reuse costs above are all *solved*, and the SDL2 build is pinned and cached. A thin image `FROM tg5040-toolchain` pre-baking SDL2 + a jammy-matched libasound would remove pitfall classes 1–3 structurally and speed CI — worth doing if the platform accumulates -more external deps (e.g. shipping bluealsa, see 07/09-roadmap), not before. +more external deps. Bluetooth audio uses the stock H700 BlueALSA daemon, ALSA plugins, +SBC runtime, and BlueZ without copying them from the shared toolchain (see +05/07/09-roadmap). ## Build outputs diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md index 6d8c9c945..35e11a10e 100644 --- a/docs/h700-port/05-audio.md +++ b/docs/h700-port/05-audio.md @@ -53,20 +53,39 @@ speaker/HP (possibly hardware auto-mute, in which case nothing is needed). To investigate: diff `amixer contents` and watch input devices while plugging headphones on a live device. Until then: no jack-based switching in NextUI. -## Bluetooth audio — deliberately disabled this beta - -The clean 2026 RG40XXV stock image contains bluealsa 4.1 and its ALSA plugins, while -earlier firmware probing reported it absent. **The shipped decision remains to gate -BT audio off** until the stock stack is validated across supported firmware: -- settings built with `-DNO_BT_AUDIO` for h700 → BT samplerate menu hidden - (`btmenu.cpp` made null-safe for the missing item) -- `audiomon` refuses A2DP sinks unless a `bluealsa` binary exists -- `bt_init.sh` does not start bluealsa even when the stock image contains it -- `skeleton/BASE/README.txt` tells users BT audio is off in this beta - -BT controller input still works through SDL (07). Validate the stock BlueZ controller -path first, then separately decide whether to rely on the stock bluealsa stack or ship -it — see 09-roadmap. +## Bluetooth audio — stock-first A2DP enabled + +The clean 2026 RG40XXV stock image contains BlueALSA 4.2.0, its ALSA PCM/control +plugins, `/etc/alsa/conf.d/20-bluealsa.conf`, and the system D-Bus policy. A live +startup probe confirmed that `bluealsa -p a2dp-source` acquires `org.bluealsa` and +registers two SBC source endpoints below `/org/bluez/hci0`. + +H700 now follows the tg5040 lifecycle with a stock-only implementation: +- `bt_init.sh` starts BlueALSA only after `hci0` and stock BlueZ are ready, waits for + its D-Bus name, enables native A2DP volume, initializes the remote transport at a + nonzero volume, and logs useful startup failures +- `/usr/bin/bluealsa`, the ALSA PCM/control plugins, SBC runtime, ALSA configuration, + and BlueZ all come from the stock firmware; none are bundled or replaced +- settings exposes the existing maximum-sampling-rate control (the H700-specific + `NO_BT_AUDIO` build gate is removed) +- shared `audiomon` selects the connected device and writes `$HOME/.asoundrc`; MinArch's + existing device watcher then reopens SDL audio against the stock `bluealsa` PCM. The + H700 build alone omits the `delay 0` option rejected by its stock BlueALSA plugin; + tg5040 and tg5050 output is unchanged +- disabling Bluetooth stops BlueALSA before BlueZ; no `bluetoothd`, `bluetoothctl`, + or other BlueZ component is bundled or replaced + +AirPods 4 ANC pairing, A2DP connection, automatic internal-speaker muting/restoration, +SBC transport, and user-audible game audio are verified on RG40XXV. The original silent +stream was not a 44.1/48 kHz problem: BlueZ created the AirPods transport with absolute +volume zero. Setting its `MediaTransport1.Volume` to 127 made the already-running stream +audible. The shipped daemon flags now initialize that value natively. An A2DP PCM +publication race was also observed during an artificial daemon restart while the device +remained logically connected; it is not handled by an H700-only shared-code workaround +unless a normal connection flow reproduces it. Final automatic reconnect, game-switching, +and suspend/resume passes are still pending because the shared test unit was returned to +HDMI testing. Firmware without a runnable stock BlueALSA is logged as controller-only +rather than augmented with another userspace stack; see 09-roadmap. ## Sample rates diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index 900992efa..d45f38966 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -36,7 +36,7 @@ RetroAchievements login and unlock work on RG34XXSP, including credential entry the on-screen keyboard. Pak Store and OTA update are explicitly excluded from the alpha scope; testing is not applicable and they are not alpha release gates. -## Bluetooth (as shipped — system BlueZ, controller transport working, audio gated off) +## Bluetooth (as shipped — system BlueZ, controller transport and stock A2DP enabled) - NextUI uses the stock BlueZ stack → no `btmanager`/upgrade-pakz. A clean 2026 RG40XXV reports 5.66 for both `bluetoothd` and `bluetoothctl`; earlier firmware @@ -51,10 +51,14 @@ scope; testing is not applicable and they are not alpha release gates. links fine, loads on device). It is the persistent pairing agent and owns the pairable window; the init script does not create a short-lived `bluetoothctl` agent. -- **BT audio: deliberately not shipped this beta** — the clean 2026 RG40XXV stock - image does contain bluealsa 4.1 and its ALSA plugins, contrary to the earlier - probe, but `-DNO_BT_AUDIO` remains and `bt_init.sh` does not start it. Controller - pairing is the first validation gate; full story in 05 and 09-roadmap. +- **BT audio: stock-first A2DP enabled** — the clean 2026 RG40XXV stock image has + BlueALSA 4.2.0, its ALSA plugins/configuration, and its D-Bus policy. `bt_init.sh` + starts `bluealsa -p a2dp-source --a2dp-volume --initial-volume=100` after BlueZ is + ready and verifies `org.bluealsa`. The H700 `audiomon` build omits only the + `delay 0` setting rejected by the stock plugin; its remaining behavior is shared. + BlueALSA, its ALSA plugins, SBC, and BlueZ all remain stock and are not bundled or + replaced. AirPods 4 ANC playback is verified; automatic reconnect and suspend/resume + are tracked in 05/08. - BT controller transport is verified on RG40XXV: Settings discovers, pairs, trusts, connects, and exposes a DualSense as an SDL joystick and evdev input device. Button semantics are not fully normalized because the shared tg5040/tg5050/H700 diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index cb7ce17d0..570c04298 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -53,11 +53,11 @@ | RetroAchievements login + unlock | ✅ works on RG34XXSP; on-screen credential keyboard also verified | | Pak Store install | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | | OTA update flow | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | -| BT controller pairing + input | ⬜ | +| BT controller semantic mapping | ⚠ pairing and input attachment pass; raw button indices vary by controller and require a later cross-platform tg5040/tg5050/H700 normalization change | | Bootlogo pak, RG40XXV 640×480 | ✅ carousel/apply/backup tested; restore inferred via same apply path | | Bootlogo pak, RG34XXSP 720×480 | ✅ fixed 2026-07-13 — all 23 presets load and render with the current build (verified via SSH-driven run + framebuffer capture; the failing binary was alpha1.1-era). Pak now logs path/count/load errors and shows the searched path on screen when empty; apply guarded against an empty list | | Bootlogo pak, RG28XX 480×640 | ✅ apply user-tested: logo renders upright at boot. Previews were shown panel-native (90° off) and are now rotated to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`) | -| BT A2DP audio | ✖ gated off (`NO_BT_AUDIO`, no bluealsa shipped — 05/07) | +| BT A2DP audio | ⚠ AirPods 4 ANC pair/connect and user-audible SBC game audio pass on RG40XXV; internal speaker mutes/restores correctly. Confirmed blockers were the H700 stock plugin rejecting `delay 0` and BlueZ transport volume initializing to zero—not 44.1/48 kHz. H700 now uses only stock BlueALSA with native volume; final automatic reconnect/game-switch/suspend-resume tests remain (05/07) | | Headphone jack detection | ✖ not wired (05) | | RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus work well; resolution-specific overlays untested | | RG34XXSP: lid sleep/wake | ⚠️ lid close and open work; deep suspend requires power as expected, but power also wakes light sleep while the lid is closed | @@ -118,12 +118,12 @@ Detailed results and the remaining system backlog are tracked in - **Every h700 PR must list its `workspace/all/` touches and re-run `make PLATFORM=tg5040 build`** (both platforms build from the same shared tree). The branch's complete list of net shared-code touches, for reference: - 1. `workspace/all/audiomon/audiomon.cpp` — `bluetoothAudioAvailable()` guard (skip A2DP without bluealsa) (+Makefile dep fix) + 1. `workspace/all/audiomon/audiomon.cpp` — `bluetoothAudioAvailable()` guard (skip A2DP without bluealsa) plus an H700-only compile guard that omits the unsupported `delay 0` line (+Makefile dep fix) 2. `workspace/all/common/generic_video.c` — hard `exit(1)` on SDL/GL init failures 3. `workspace/all/minarch/makefile` — h700 added to tg5040-class feature filters (RA/CHD/SRM/samplerate) 4. `workspace/all/nextui/nextui.c` — startup LOG_info breadcrumbs 5. `workspace/all/settings/btmenu.cpp/.hpp` — `rateItem` made optional (`NO_BT_AUDIO`) - 6. `workspace/all/settings/makefile` — h700 block (`-DHAS_BTAGENT -DNO_BT_AUDIO`, btagent, glib) + 6. `workspace/all/settings/makefile` — h700 block (`-DHAS_BTAGENT`, btagent, glib; the temporary `NO_BT_AUDIO` gate was removed after stock BlueALSA validation) 7. `workspace/all/settings/settings.cpp` — Anbernic vendor/models, h700 platform + capability flags 8. `workspace/all/syncsettings/syncsettings.c` — also restore colortemp/contrast/saturation/exposure/displaycal on resume 9. `workspace/makefile` — rfkill for h700; ledcontrol gated to tg50x0, bootlogo to tg50x0+h700 diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index d126b7f10..237fb3293 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -86,12 +86,14 @@ Ordered by impact within each section. nit: syncsettings still "restores" the no-op enhance values on resume. Worth a systematic sweep: grep settings.cpp / paks for capability flags that default to "present" and decide each for h700. -9. **BT audio: validate stock bluealsa or formally drop it.** The clean 2026 - RG40XXV image already contains bluealsa 4.1 and its ALSA plugins, while earlier - firmware probing reported it absent. Controller discovery, pairing, connection, - and SDL attachment now pass on RG40XXV. Test A2DP across supported stock firmware; - only package bluealsa if the stock component is missing or incompatible. Until - then `NO_BT_AUDIO` remains and H700's init script does not start bluealsa. Raw +9. **BT audio: finish stock-first validation.** Clean RG40XXV stock provides + BlueALSA 4.2.0, ALSA plugins/configuration, and D-Bus policy. Daemon startup, + `org.bluealsa`, and SBC source endpoint registration pass; H700 now starts the + stock daemon and exposes the sampling-rate setting. No BlueALSA, ALSA plugin, SBC, + or BlueZ component is bundled. AirPods 4 ANC SBC playback now passes on RG40XXV; + the confirmed silence blockers were an unsupported `delay 0` ALSA option and zero + BlueZ transport volume. Complete automatic reconnect, game-switch, and + suspend/resume testing. Raw external-controller button normalization is shared with tg5040/tg5050 and belongs in a separate cross-platform change. 10. **480p UI polish pass** (04) — verdict from real use on RG40XXV and RG34XXSP: @@ -150,8 +152,8 @@ Ordered by impact within each section. `workspace/h700/shim-common.sh`, packaged in both the self-extracting boot shim payload and `.tmp_update/h700/`. 16. **Dedicated h700 toolchain image, revisited — deferred for alpha** (01) — a thin - `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 (and bluealsa if #9 - ships) removes the pitfall classes 1–3 in 01 structurally and cuts CI time. Do + `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 removes the pitfall + classes 1–3 in 01 structurally and cuts CI time. Do it when the next external dep lands. 17. **~~Trim remaining tg5040 residue in the skeleton~~ Done (2026-07-09)** — h700 paks/cfgs are clear of `default-brick`, `reboot_next`, `libUMP`, bundled @@ -171,6 +173,6 @@ Ordered by impact within each section. - Sleep/wake solid across a 20-cycle soak + overnight drain ≤ stock + 1% (P0 #1) - Every 08-matrix row ✅ on RG40XXV, lid fixed on RG34XXSP, and the functional set ✅ on RG34XXSP + RG28XX -- BT audio shipped or explicitly descoped in README +- BT audio headset playback/reconnect/suspend matrix passes on supported stock firmware - No debug behaviors in the release path; docs (README.txt) match actual behavior - CI: h700 + tg5040 both build on every PR touching shared code, with the ldd check diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 339efb0f5..fc325ff07 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -16,8 +16,10 @@ scaling sensitivity, POWER waking through a closed lid, and charging remaining in light sleep by current shared policy. Screenshots, resolution-specific overlays, battery accuracy/overnight drain, recovery paths, and RGcubexx hardware coverage remain untested. The cube is intentionally an -external alpha-validation target. BT audio, Pak Store, and OTA update are explicitly -outside this alpha scope. Full status is in [08](08-testing-status.md), priorities in +external alpha-validation target. BT audio now uses the stock BlueALSA stack without +bundling a second userspace implementation and is under hardware validation; +Pak Store and OTA update are explicitly outside this alpha +scope. Full status is in [08](08-testing-status.md), priorities in [09](09-roadmap.md), and emulator coverage in [10](10-core-game-matrix.md). These docs began as the implementation plan and were restructured after the @@ -34,7 +36,7 @@ and the lessons that transfer to future platform ports. | [02-boot-and-installer.md](02-boot-and-installer.md) | dmenu.bin hijack, boot shim, installer, SD layout, uninstall | | [03-platform-layer.md](03-platform-layer.md) | `workspace/h700/`: platform.c/h, input (evdev-primary), libmsettings, keymon, cores | | [04-video-display.md](04-video-display.md) | SDL2+Mali/GLES stack, geometry, rotation, HDMI, displaycal, the alpha-blit question | -| [05-audio.md](05-audio.md) | ALSA path, the dlopen'd-libasound bug story, volume/mute quirks, BT-audio gating | +| [05-audio.md](05-audio.md) | ALSA path, the dlopen'd-libasound bug story, volume/mute quirks, BT-audio lifecycle | | [06-power-sleep-battery.md](06-power-sleep-battery.md) | Sleep design, lid/charging edge cases, battery, governors | | [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | NextUI-owned wpa_supplicant, DHCP/creds handling, BT status | | [08-testing-status.md](08-testing-status.md) | Validation matrix with real results, regression guardrails, shared-code touch list | @@ -62,7 +64,7 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; 720×480 UI and box art pass, resolution-specific overlays untested | | **Input** | SDL joystick route | **Deviation:** raw evdev primary (SDL js enumeration unreliable on stock image); SDL kept for BT pads (03) | | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | -| **BT audio** | build + ship bluealsa | **Deviation:** gated off this alpha (`NO_BT_AUDIO`); clean 2026 RG40XXV stock already contains bluealsa, but cross-firmware validation is still required (05/07) | +| **BT audio** | build + ship bluealsa | **Deviation:** use stock BlueALSA 4.2.0, ALSA plugins, SBC, and BlueZ without bundling replacements; AirPods 4 ANC SBC playback passes on RG40XXV after an H700-only ALSA-option omission and native-volume initialization, with automatic reconnect/suspend validation pending (05/07) | | Sleep | `echo mem` + tg5040-style wrapper | ⚠ repeated sleep/wake, in-game resume, and power-off auto-resume pass; charging intentionally stays in light sleep (06) | | Lid | hallkey → PLAT lid API | ⚠ close/open works, but POWER can wake RG34XXSP while the lid remains closed | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | diff --git a/skeleton/BASE/README.txt b/skeleton/BASE/README.txt index aa79505be..7aa53e14c 100644 --- a/skeleton/BASE/README.txt +++ b/skeleton/BASE/README.txt @@ -44,7 +44,7 @@ Then copy "h700/dmenu.bin" to the root of the stock TF1 card's user-visible ROMs If your stock card has a stockmod or muOS boot selector, choose the stock frontend target before testing NextUI. muOS override files can prevent the stock dmenu hijack from running. -This H700 alpha includes Bluetooth controller pairing. Bluetooth audio is not enabled; Pak Store and OTA updating are outside this alpha's scope. +This H700 alpha includes Bluetooth controller pairing and uses the stock firmware's BlueALSA components for Bluetooth audio; BlueALSA and BlueZ are not bundled or replaced. Pak Store and OTA updating are outside this alpha's scope. Known RG34XXSP alpha issues: PlayStation games currently return to Home on launch; the Bootlogo tool shows no previews at 720x480; an FBNeo launch with missing BIOS can leave MinArch unable to open its menu or exit; the power button can wake the device while the lid is closed; and Mega Drive performance with the Auto CPU profile can depend on shader/scaling settings. Charging uses light sleep rather than deep suspend by design. These issues do not affect the tested GB, GBC, GBA, FC, or SFC paths. diff --git a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh index 57c328f8e..e2ab64f62 100755 --- a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh +++ b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh @@ -10,10 +10,12 @@ fi DEVICE_NAME="Anbernic ${RGXX_MODEL:-RG XX} (NextUI)" VENDOR_BT_SCRIPT="/mnt/vendor/ctrl/setBluetooth.sh" BTCTL="/usr/bin/bluetoothctl" +BLUEALSA="/usr/bin/bluealsa" HCI_PATH="/sys/class/bluetooth/hci0" VENDOR_LOCK="/tmp/.init_bt" NEXTUI_LOCK="/tmp/nextui-bt-init.lock" HCI_LOG="/tmp/nextui-rtk_hciattach.log" +BLUEALSA_LOG="/tmp/nextui-bluealsa.log" LOG_DIR="${LOGS_PATH:-/mnt/SDCARD/.userdata/h700/logs}" LOG_FILE="$LOG_DIR/bluetooth.txt" @@ -143,6 +145,81 @@ wait_for_bluez_adapter() { return 1 } +power_on_adapter() { + bt_power_tries=0 + while [ "$bt_power_tries" -lt 5 ]; do + if "$BTCTL" show 2>/dev/null | grep -q 'Powered: yes'; then + return 0 + fi + if "$BTCTL" power on >> "$LOG_FILE" 2>&1; then + sleep 1 + if "$BTCTL" show 2>/dev/null | grep -q 'Powered: yes'; then + return 0 + fi + fi + bt_power_tries=$((bt_power_tries + 1)) + sleep 1 + done + return 1 +} + +bluealsa_dbus_ready() { + if command -v busctl >/dev/null 2>&1; then + busctl --system list 2>/dev/null | grep -q 'org\.bluealsa' + else + pidof bluealsa >/dev/null 2>&1 + fi +} + +start_bluealsa() { + if [ ! -x "$BLUEALSA" ]; then + log "Stock bluealsa is missing or not executable; Bluetooth audio will be disabled" + return 1 + fi + + if pidof bluealsa >/dev/null 2>&1; then + if bluealsa_dbus_ready; then + return 0 + fi + log "bluealsa is running without its D-Bus service; restarting it" + killall bluealsa >> "$LOG_FILE" 2>&1 || true + sleep 1 + fi + + bt_bluealsa_version="$($BLUEALSA --version 2>&1)" + if [ $? -ne 0 ]; then + log "Stock bluealsa cannot run: $bt_bluealsa_version" + return 1 + fi + log "Starting bluealsa $bt_bluealsa_version with A2DP source and native volume support" + : > "$BLUEALSA_LOG" + # Some headsets (including AirPods 4) create their BlueZ transport at + # absolute volume zero. Let BlueALSA initialize and control that transport + # volume instead of relying only on the local ALSA mixer. + "$BLUEALSA" -p a2dp-source --a2dp-volume --initial-volume=100 < /dev/null >> "$BLUEALSA_LOG" 2>&1 & + bt_bluealsa_pid=$! + + bt_bluealsa_tries=0 + while [ "$bt_bluealsa_tries" -lt 5 ]; do + if ! kill -0 "$bt_bluealsa_pid" 2>/dev/null; then + log "bluealsa exited during startup" + tail -n 80 "$BLUEALSA_LOG" >> "$LOG_FILE" 2>&1 || true + return 1 + fi + if bluealsa_dbus_ready; then + log "Bluetooth A2DP source is ready" + return 0 + fi + bt_bluealsa_tries=$((bt_bluealsa_tries + 1)) + sleep 1 + done + + log "Timed out waiting for the bluealsa D-Bus service" + tail -n 80 "$BLUEALSA_LOG" >> "$LOG_FILE" 2>&1 || true + kill "$bt_bluealsa_pid" 2>/dev/null || true + return 1 +} + start_bt() { log "Starting Bluetooth for ${RGXX_MODEL:-unknown H700 model}" @@ -184,7 +261,7 @@ start_bt() { return 1 fi - if ! "$BTCTL" power on >> "$LOG_FILE" 2>&1; then + if ! power_on_adapter; then log "Failed to power on the BlueZ adapter" return 1 fi @@ -199,6 +276,7 @@ start_bt() { if ! "$BTCTL" show 2>/dev/null | grep -q 'Pairable: yes'; then log "Adapter is powered; Settings will make it pairable while its persistent agent is open" fi + start_bluealsa || log "Controller Bluetooth is ready, but Bluetooth audio is unavailable" log "Bluetooth is ready" return 0 @@ -213,8 +291,7 @@ stop_bt() { fi killall bluetoothctl 2>/dev/null || true - # A2DP remains disabled for H700. Stop a stock or development bluealsa - # instance left by an older NextUI build, but do not restart it. + # Stop the stock A2DP media endpoint before stopping BlueZ. killall bluealsa 2>/dev/null || true systemctl stop bluetooth >> "$LOG_FILE" 2>&1 || killall bluetoothd 2>/dev/null || true diff --git a/workspace/all/audiomon/Makefile b/workspace/all/audiomon/Makefile index d39be288c..aad2d5784 100644 --- a/workspace/all/audiomon/Makefile +++ b/workspace/all/audiomon/Makefile @@ -28,6 +28,9 @@ CCXX= $(CROSS_COMPILE)g++ CXXFLAGS += -Wall -O2 -I. -I../common/ -I../../$(PLATFORM)/platform/ -I$(PREFIX)/include/dbus-1.0 -I$(PREFIX)/lib/dbus-1.0/include LDFLAGS += $$(pkg-config --libs dbus-1 libudev) CXXFLAGS += -I$(PREFIX_LOCAL)/include -DPLATFORM=\"$(PLATFORM)\" $$(pkg-config --cflags dbus-1 libudev) +ifeq ($(PLATFORM),h700) +CXXFLAGS += -DH700_BLUEALSA_NO_DELAY +endif LDFLAGS += -L$(PREFIX_LOCAL)/lib -lmsettings SRCS = audiomon.cpp diff --git a/workspace/all/audiomon/audiomon.cpp b/workspace/all/audiomon/audiomon.cpp index 8e70c961b..0815982ea 100644 --- a/workspace/all/audiomon/audiomon.cpp +++ b/workspace/all/audiomon/audiomon.cpp @@ -70,9 +70,11 @@ void writeAudioFile(const std::string& device_identifier, DeviceType type) { << " slave.pcm {\n" << " type bluealsa\n" << " device \"" << device_identifier << "\"\n" - << " profile \"a2dp\"\n" - << " delay 0\n" - << " }\n" + << " profile \"a2dp\"\n"; +#ifndef H700_BLUEALSA_NO_DELAY + f << " delay 0\n"; +#endif + f << " }\n" << "}\n" << "ctl.!default {\n" << " type bluealsa\n" diff --git a/workspace/all/settings/makefile b/workspace/all/settings/makefile index ada51e15e..4924f7576 100644 --- a/workspace/all/settings/makefile +++ b/workspace/all/settings/makefile @@ -46,7 +46,7 @@ CXXFLAGS += $$(pkg-config --cflags --libs gio-2.0 glib-2.0) endif ifeq ($(PLATFORM), h700) # drop as soon as we use btagent on all platforms -CXXFLAGS += -DHAS_BTAGENT -DNO_BT_AUDIO +CXXFLAGS += -DHAS_BTAGENT CXXSOURCE += btagent.cpp CXXFLAGS += $$(pkg-config --cflags --libs gio-2.0 glib-2.0) endif From e50ac7c7d049bcb87af990c9d5c711b6045d2ccc Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 17 Jul 2026 00:55:08 +0200 Subject: [PATCH 46/76] docs(h700): define alpha3 beta-entry gates --- docs/h700-port/03-platform-layer.md | 5 +-- docs/h700-port/08-testing-status.md | 36 +++++++++++++++++++--- docs/h700-port/09-roadmap.md | 44 +++++++++++++++++++++------ docs/h700-port/10-core-game-matrix.md | 12 +++----- docs/h700-port/README.md | 13 ++++---- 5 files changed, 81 insertions(+), 29 deletions(-) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 70d653ec7..91af8246c 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -154,8 +154,9 @@ open/closed per poll and could drop the wake press between polls. - **DisplayCal**: same gamma-LUT ioctls as tg5040 (0x10b/0x10c/0x10d) — worked 1:1 as predicted; tested passing on RG40XXV including persistence across sleep and game launch. -- **HDMI**: `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state,...}` so - detection works; **`SetHDMI()` is an empty no-op** — no output switching (04). +- **HDMI**: `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state,...}` and + `SetHDMI()` switches disp0, framebuffer/layer geometry, and the ALSA route. Menu, + game, audio, and in-game hotplug in both directions pass on RG40XXV (04). - **Jack detection**: not wired (path exists but historically dead — 00). - Debug printfs were stripped/commented for release; remaining prints are error paths. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 570c04298..593cf0510 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -17,7 +17,7 @@ - Repeated `nextui.elf` crashes now log the crash limit and power off. Use TF2 logs for crash-loop debugging; the release runtime powers off instead of starting SSH. -## Validation matrix (status as of 2026-07-13, RG40XXV unless noted) +## Validation matrix (status as of 2026-07-17, RG40XXV unless noted) ✅ tested & passed ⚠️ tested, has issues ⬜ untested ➖ explicitly out of alpha scope ✖ not implemented @@ -46,6 +46,7 @@ | Recently Played + game switcher | ✅ tested on RG40XXV and RG34XXSP | | Screenshots | ⬜ testing planned | | Box art | ✅ tested at 720×480 on RG34XXSP | +| HDMI output | ⚠️ RG40XXV + TV passes menu/game output and in-game hotplug in both directions, including audio routing. Boot-with-cable, other H700 models, and displays that reject the fixed 1080p60 mode remain untested; HDMI is a stretch feature rather than a beta gate (04) | | Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | | Battery % accuracy vs stock | ⬜ | | Charging detection/indicator; sleep while charging | ⚠️ indicator works on RG34XXSP; charging permits light sleep but shared power code deliberately suppresses deep sleep | @@ -58,6 +59,7 @@ | Bootlogo pak, RG34XXSP 720×480 | ✅ fixed 2026-07-13 — all 23 presets load and render with the current build (verified via SSH-driven run + framebuffer capture; the failing binary was alpha1.1-era). Pak now logs path/count/load errors and shows the searched path on screen when empty; apply guarded against an empty list | | Bootlogo pak, RG28XX 480×640 | ✅ apply user-tested: logo renders upright at boot. Previews were shown panel-native (90° off) and are now rotated to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`) | | BT A2DP audio | ⚠ AirPods 4 ANC pair/connect and user-audible SBC game audio pass on RG40XXV; internal speaker mutes/restores correctly. Confirmed blockers were the H700 stock plugin rejecting `delay 0` and BlueZ transport volume initializing to zero—not 44.1/48 kHz. H700 now uses only stock BlueALSA with native volume; final automatic reconnect/game-switch/suspend-resume tests remain (05/07) | +| BT maximum sampling rate | ⚠ Matches tg5040 and defaults to 48000 Hz. AirPods accepted both 44100 and 48000 during probing, so the option is a compatibility escape hatch rather than a fix for the observed silence. Verify the rebuilt Settings UI changes and persists the value. The inherited connection test also sees controller-only ACL links; at the 48000 default this is harmless, while a future audio-specific detector is a cross-platform cleanup rather than an H700 beta blocker | | Headphone jack detection | ✖ not wired (05) | | RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus work well; resolution-specific overlays untested | | RG34XXSP: lid sleep/wake | ⚠️ lid close and open work; deep suspend requires power as expected, but power also wakes light sleep while the lid is closed | @@ -67,7 +69,8 @@ ### Performance | Item | Status | |---|---| -| GBA/SNES/PS1 full speed with vsync, no audio underruns | ✅ on RG40XXV; RG34XXSP PS1 currently crashes during launch | +| GBA/SNES full speed with vsync, no audio underruns | ✅ on RG40XXV and in tested RG34XXSP games | +| PS1 launch/performance | ✅ on RG40XXV and RG34XXSP. The apparent RG34XXSP launch regression was a stale/corrupted core artifact; a clean core rebuild fixed it | | Frame pacing / tearing / input lag vs stock RA | ✅ gameplay-tested on RG40XXV; no visible pacing, tearing, latency, or audio issues (not instrumented) | | Manual governor changes don't stutter audio | ✅ tested in-game on RG34XXSP | | Auto governor load/frequency selection | ⚠️ MD can remain near 480 MHz and slow down depending on shader/scaling; stock shader + 3× + linear raises ~720 MHz and is smooth. Powersave/performance are smooth; needs debugging | @@ -82,9 +85,33 @@ Detailed results and the remaining system backlog are tracked in | GB / GBC / GBA / FC / SFC | ✅ games launch and play perfectly | | MD / PicoDrive | ⚠️ launches, but some rendering combinations slow down with auto CPU near 480 MHz | | FBN / FBNeo | ⚠️ missing BIOS blocked game validation; the error path then left MinArch unable to open its menu or exit | -| PS / PCSX-ReARMed | ⚠️ crashes back to NextUI during launch for every tested game | +| PS / PCSX-ReARMed | ✅ launches and plays after a clean core rebuild; the earlier crashes were caused by a stale/corrupted core, not an H700 runtime defect | | Remaining shipped cores | ⬜ systematic coverage pending | +### Beta-entry gate summary + +The matrix does not require every long-tail row to turn green before beta. The beta +entry gates are the known user-facing regressions and the safety/lifecycle checks: + +- **Core regressions:** fix the FBNeo missing-BIOS lockup; either fix MD Auto CPU + slowdown or ship a proven safe default. Run at least + a launch/audio/input/menu/exit/save-state smoke test across the remaining shipped + core families. +- **Bluetooth audio lifecycle:** verify automatic reconnect, game-to-game and + menu-to-game switching, five suspend/resume cycles, case/disconnect speaker restore, + and Settings sample-rate selection/persistence. Controller mapping and the + controller-only sample-rate detector are shared-platform follow-ups, not H700 gates. +- **Power and reversibility:** complete battery-vs-stock accuracy and overnight-drain + measurements, decide the closed-lid POWER and charging/light-sleep policies, and + pass clean uninstall, SIGUSR1 shutdown, and dirty-card recovery. +- **Boot policy and basic I/O:** decide whether muOS/stockmod detection warns or + hard-stops, test screenshots and resolution-specific overlays, and determine whether + the headphone jack is hardware-auto-switched or needs software handling. + +RGcubexx/720×720 hardware coverage, HDMI boot/EDID/model expansion, cross-platform +controller normalization, Pak Store/OTA, per-panel calibration, and the dedicated +toolchain image remain explicit beta follow-ups unless their scope is promoted. + ### RG34XXSP remaining validation - To claim full parity rather than alpha coverage, repeat the RG40XXV-scoped rows on @@ -97,7 +124,8 @@ Detailed results and the remaining system backlog are tracked in - Test screenshots and overlays made for 720×480. - Retest FBNeo with the required BIOS, and separately preserve the missing-BIOS error case as a regression test after it is fixed. -- Diagnose PS1 launch and retest multiple formats/titles with the required BIOS. +- Preserve PS1 in the release-candidate smoke pass so a stale or corrupted packaged + core cannot recreate the resolved launch failure. - Reproduce the MD Auto CPU behavior with exact shader, scale, and interpolation combinations. - Test 720×480 Bootlogo backup and restore (previews and apply now work; the diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 237fb3293..afdb8d679 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,9 +1,28 @@ # 09 — Roadmap: from alpha candidate to a 9.5/10 port -Everything below is verified against branch tip `956ed34`, with hardware results -recorded through 2026-07-13. +Everything below is verified against branch tip `a08fbfec`, with hardware results +recorded through 2026-07-17. Ordered by impact within each section. +## Beta entry gates + +Beta does not require the full 9.5/10 target at the end of this document, but it should +not knowingly ship model-breaking core failures or untested recovery/reversibility +paths. Close these gates, or explicitly descope the affected feature/model: + +| Gate | Exit condition | +|---|---| +| RG34XXSP core correctness | FBNeo missing-BIOS failure returns control cleanly; MD Auto CPU has a fix or a tested safe default; remaining shipped core families receive a basic launch/audio/input/menu/exit/save smoke pass. PS1 must remain in the release-candidate smoke pass because its former failure was a stale/corrupted core artifact | +| Bluetooth audio lifecycle | AirPods reconnect without manual D-Bus commands; menu/game and game/game transitions work; speaker restores on disconnect; five suspend/resume cycles pass; the Settings 44100/48000 choice changes and persists | +| Power confidence | Battery percentage is compared with stock, overnight suspend drain is measured, and the closed-lid POWER plus charging/light-sleep behaviors are fixed or accepted as documented policy | +| Reversibility and recovery | Clean uninstall, SIGUSR1 shutdown, and dirty-card fsck recovery pass; muOS/stockmod behavior has an explicit warn-versus-stop decision | +| Release-candidate smoke | Screenshots and resolution-specific overlays pass; headphone-jack behavior is determined; clean H700 and tg5040 builds plus the Jammy `settings.elf` ldd check pass on the release candidate | + +Not beta gates unless scope changes: RGcubexx hardware availability, HDMI boot-with-cable +and odd-EDID/model expansion, cross-platform controller normalization, the inherited +controller-only sample-rate detector, Pak Store/OTA, per-panel display calibration, and +a dedicated H700 toolchain image. + ## P0 — Correctness / robustness 1. **~~Fix unreliable sleep/wake~~ Done (2026-07-09)** — was four stacked bugs, all @@ -39,8 +58,8 @@ Ordered by impact within each section. governor changes, displaycal persistence, RetroAchievements, Files, Recently Played, game switcher, and the primary 8/16-bit systems are hardware-tested. Remaining: fix POWER waking through a closed lid; decide whether charging should - continue to suppress deep sleep; diagnose PS1 - launch crashes, the FBNeo missing-BIOS lockup, and MD auto-governor/render-setting + continue to suppress deep sleep; fix the FBNeo missing-BIOS lockup and MD + auto-governor/render-setting sensitivity; decide whether per-Emu `default-rg34xx.cfg` files are needed. Track core coverage in [10](10-core-game-matrix.md). (~~720×480 Bootlogo previews~~ fixed 2026-07-13 — see #13a.) @@ -51,9 +70,9 @@ Ordered by impact within each section. (rotation is driver-level only now; postmortem in 04). UI, game scaling, and bootlogo apply are user-verified; bootlogo previews are rotated to boot orientation. Still open: decide whether `default-rg28xx.cfg` cfgs are needed. -7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch was rebased - onto main including the alpha-blending work. Upstream main has advanced since, so - rebase once more before the final merge/release candidate. (The alpha/tinted- +7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch includes + main through the current shared-code baseline; rebase again before the release + candidate only if main advances. (The alpha/tinted- bitmap question was solved: the glitches were the missing 64-bit libpng bundle, not main's alpha changes — 04.) Remaining: **confirm rendering stays clean on device with the rebased build**: the game switcher and box art are clean at @@ -93,7 +112,11 @@ Ordered by impact within each section. or BlueZ component is bundled. AirPods 4 ANC SBC playback now passes on RG40XXV; the confirmed silence blockers were an unsupported `delay 0` ALSA option and zero BlueZ transport volume. Complete automatic reconnect, game-switch, and - suspend/resume testing. Raw + suspend/resume testing. The exposed maximum-sampling-rate option intentionally + matches tg5040: 48000 is the default and avoids needless resampling, while 44100 is + only a compatibility escape hatch. AirPods negotiated both rates, so this setting + was not the fix. Verify its Settings UI/persistence, but keep the inherited + any-ACL/controller-only detection issue as a later cross-platform cleanup. Raw external-controller button normalization is shared with tg5040/tg5050 and belongs in a separate cross-platform change. 10. **480p UI polish pass** (04) — verdict from real use on RG40XXV and RG34XXSP: @@ -113,8 +136,9 @@ Ordered by impact within each section. input-lag, or audio concerns from tested gameplay. 12a. **Build out the core/game matrix** — the initial RG34XXSP results are now in - [10](10-core-game-matrix.md). GB/GBC/GBA/FC/SFC pass; PS1 crashes back to Home for - every tested title; FBNeo needs a valid BIOS retest and must not trap MinArch when + [10](10-core-game-matrix.md). GB/GBC/GBA/FC/SFC and PS1 pass; the former PS1 + launch failures were a stale/corrupted core artifact fixed by a clean rebuild. + FBNeo needs a valid BIOS retest and must not trap MinArch when BIOS is missing; MD needs the Auto-scaling investigation above. Expand coverage across the remaining shipped systems and at least one additional H700 model. 13. Later: RGcubexx bring-up (720×720, wired but no device is available locally; diff --git a/docs/h700-port/10-core-game-matrix.md b/docs/h700-port/10-core-game-matrix.md index f0619f6ac..4cd8c9407 100644 --- a/docs/h700-port/10-core-game-matrix.md +++ b/docs/h700-port/10-core-game-matrix.md @@ -19,7 +19,7 @@ repeated for that system. 5. Record the exact game, format, shader, scale, interpolation, CPU profile, and BIOS state for every failure. -## RG34XXSP results (2026-07-10) +## RG34XXSP results (updated 2026-07-17) | System | Core | Status | Evidence / issue | |---|---|---|---| @@ -30,7 +30,7 @@ repeated for that system. | SFC | Snes9x | ✅ | Launch and gameplay perfect | | MD | PicoDrive | ⚠️ | Launches, but some shader/scaling combinations leave Auto CPU near 480 MHz and cause slowdown. Stock shader + 3× scale + linear interpolation runs smoothly around 720 MHz; Powersave (~1.1 GHz observed) and Performance (~1.5 GHz) are smooth | | FBN | FBNeo | ⚠️ | Required BIOS was absent, so game execution is not validated. After the BIOS error, MinArch would not open its menu or exit; volume and brightness shortcuts still responded | -| PS | PCSX-ReARMed | ⚠️ | Every tested game crashed back to NextUI during launch. Tested 2–3 games including Tony Hawk's Pro Skater 2 and a Castlevania title | +| PS | PCSX-ReARMed | ✅ | Launch and gameplay pass after a clean core rebuild. The earlier crashes across 2–3 titles were caused by a stale/corrupted core, not a model-specific runtime defect | | 32X | PicoDrive | ⬜ | — | | A2600 | Stella 2014 | ⬜ | — | | A5200 | a5200 | ⬜ | — | @@ -63,13 +63,11 @@ repeated for that system. ## Open investigations -1. **PS1 launch crash:** collect `minarch.txt`, core stderr, ROM format, BIOS presence, - and the last log line before return to NextUI. -2. **FBNeo error recovery:** retest with the required BIOS, then separately reproduce +1. **FBNeo error recovery:** retest with the required BIOS, then separately reproduce the missing-BIOS path and determine why MinArch still processes system shortcuts but not MENU/exit. -3. **MD Auto CPU behavior:** reproduce with exact shader/scale/interpolation combinations +2. **MD Auto CPU behavior:** reproduce with exact shader/scale/interpolation combinations while logging `scaling_cur_freq`, governor, min/max frequency, frame time, and audio underruns. Manual governor switching itself is working. -4. Expand the table across RG40XXV, RG28XX, RGcubexx, and other RG XX variants during +3. Expand the table across RG40XXV, RG28XX, RGcubexx, and other RG XX variants during alpha testing, recording only device-specific differences once a core is known-good. diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index fc325ff07..ed2ed61dd 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,15 +4,16 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Status (2026-07-13): ready for an alpha release, with documented RG34XXSP issues.** +**Status (2026-07-17): ready for an alpha release, with documented RG34XXSP issues.** RG40XXV has broad hardware coverage. RG34XXSP now passes the complete 720×480 UI sweep, box art, Files, Input, Recently Played, game switcher, RetroAchievements, displaycal persistence, manual governor changes, lid sleep/wake, Bootlogo, and GB/GBC/GBA/FC/SFC. RG28XX is now user-tested: driver-level rotation validated, minarch Aspect/Fullscreen scaling fixed (a double-rotation bug), and Bootlogo apply + rotated previews working. -Open RG34XXSP issues are PS1 launch crashes, an FBNeo missing-BIOS lockup, MD Auto CPU -scaling sensitivity, POWER waking through a closed +The apparent RG34XXSP PS1 launch regression was a stale/corrupted core artifact and a +clean rebuild fixed it. Open RG34XXSP issues are an FBNeo missing-BIOS lockup, MD Auto +CPU scaling sensitivity, POWER waking through a closed lid, and charging remaining in light sleep by current shared policy. Screenshots, resolution-specific overlays, battery accuracy/overnight drain, recovery paths, and RGcubexx hardware coverage remain untested. The cube is intentionally an @@ -73,12 +74,12 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Install | TF1 gets one file; NextUI on TF2; no TF1-only mode | ✅ as planned; TF1 writes mountpoint+cmp guarded | | **Splash** | per-panel raw-BMP `dd` assets | **Deviation:** `fbsplash` text renderer — no per-resolution assets needed (02) | | RG28XX rotation | SDL-level first, GL hook fallback | ✅ SDL/driver level alone is correct; the GL hook double-rotated and broke minarch scaling — removed after hardware testing (04) | -| HDMI | stretch goal | Detection wired; `SetHDMI()` no-op — still a stretch goal (04) | +| HDMI | stretch goal | ✅ RG40XXV menu/game output, audio routing, and in-game hotplug pass in both directions; boot-with-cable, other models, and unusual EDIDs remain follow-ups (04) | ## Top open risks -1. **RG34XXSP runtime issues** — PS1 launch crashes, FBNeo can trap MinArch after a - missing-BIOS failure, MD Auto CPU scaling is render-setting-sensitive, and POWER +1. **RG34XXSP runtime issues** — FBNeo can trap MinArch after a missing-BIOS failure, + MD Auto CPU scaling is render-setting-sensitive, and POWER can wake through the closed lid. (Bootlogo previews at 720×480: fixed 2026-07-13.) 2. **Partially tested robustness matrix** — clean uninstall, dirty-SD recovery, SIGUSR1 shutdown, battery accuracy, screenshots, and overnight drain need runs. From 2e90e005932fe348a2416e13da69070c7d937b94 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 17 Jul 2026 01:10:26 +0200 Subject: [PATCH 47/76] fix(build): preserve PicoDrive libretro platform --- workspace/all/cores/makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/workspace/all/cores/makefile b/workspace/all/cores/makefile index 54b73c6ed..37df36e4c 100644 --- a/workspace/all/cores/makefile +++ b/workspace/all/cores/makefile @@ -22,6 +22,12 @@ endif PATCH = git apply PROCS = -j4 +# The top-level PLATFORM command-line variable propagates through recursive make +# calls and otherwise overrides PicoDrive's internal `PLATFORM = libretro` +# assignment. Pass the intended value explicitly so its libretro frontend/VFS +# objects are included in clean builds. +picodrive_FLAGS += PLATFORM=libretro + ############################### BUILD_ROOT=../../$(PLATFORM)/cores @@ -77,4 +83,4 @@ clean: $(foreach CORE,$(CORES),clean-$(CORE)) nuke: rm -rf ./output - rm -rf ./src \ No newline at end of file + rm -rf ./src From e2394f88036d38f333dfff75bcd927d03d8fdcba Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 18:19:55 +0200 Subject: [PATCH 48/76] fix(h700): add missing FN button and USB platform stubs Upstream FN action (#788) and USB keep-awake (#783) APIs require platform definitions that were only added for other platforms. Provide H700 FN stubs (no assignable buttons) and a zeroing PLAT_isUSBConnected so the post-rebase build links again. Document that FN1/FN2/HOME pak actions and USB keep-awake are not supported on H700. --- docs/h700-port/03-platform-layer.md | 4 ++++ docs/h700-port/06-power-sleep-battery.md | 3 +++ docs/h700-port/08-testing-status.md | 13 +++++++------ workspace/h700/platform/platform.c | 6 ++++++ workspace/h700/platform/platform.h | 10 ++++++++++ 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 91af8246c..9029f2aa9 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -107,6 +107,10 @@ Button semantics: `BTN_RESUME=BTN_X`, `BTN_SLEEP/WAKE=BTN_POWER`, `BTN_MOD_BRIGHTNESS=BTN_MENU`, `BTN_MOD_COLORTEMP=BTN_SELECT`, dedicated `BTN_MOD_PLUS/MINUS` on the volume keys — parity with tg5040 conventions. +**Not supported:** user-assignable FN1/FN2/HOME pak-launch actions (upstream #788). +H700 has no dedicated FN1/FN2/HOME buttons, so `BTN_FN*` are `BTN_NONE` with empty +names (Settings hides the Assignments menu; main-menu FN presses are no-ops). + `PLAT_shouldWake` keeps a **persistent** `wake_fd` on event0 (opened once O_NONBLOCK|O_CLOEXEC, drained per poll, closed in `PLAT_quitInput`) — an early version open/closed per poll and could drop the wake press between polls. diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index 02437c3fe..d794e98af 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -99,6 +99,9 @@ light sleep anyway. The cause is unresolved. - `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, coarse bucketing in shared code — same paths as tg5040, copied verbatim. Charging detection and the UI indicator work on RG34XXSP; percentage accuracy vs stock remains untested. +- **Not supported:** “Keep awake over USB” (upstream #783). `PLAT_isUSBConnected()` is + a stub returning 0; the Settings toggle remains tg5040-only. Charging already blocks + deep sleep via `is_charging`; gadget/data keep-awake is not implemented. - While charging, lid or power sleep reaches screen-off/light sleep only. This matches shared `PWR_waitForWake()` behavior: the charging check deliberately skips `PWR_deepSleep()` and checks again a minute later. Decide separately whether H700 diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 593cf0510..363d2c055 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -34,6 +34,8 @@ | Fresh-install defaults: brightness 4, displaycal off/neutral | ✅ verified on RG40XXV (deleted msettings.bin + reboot) | | Dead enhance controls (contrast/saturation/exposure) hidden on h700 | ✅ code-gated and visually verified on RG40XXV 2026-07-09 | | Fn-switch settings hidden on h700 | ✅ capability-gated; RG XX devices have no Fn switch | +| FN1/FN2/HOME assignable pak actions | ➖ not supported (no dedicated keys; `BTN_FN*` stubs) | +| Keep awake over USB | ➖ not supported (`PLAT_isUSBConnected` stub; tg5040-only UI) | | Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | | Volume UI + levels, mute through 100% | ✅ tested on RG40XXV and RG34XXSP; no known issues | | Rumble (moto on/off) | ✅ | @@ -163,12 +165,11 @@ toolchain image remain explicit beta follow-ups unless their scope is promoted. empty-state, empty-list apply guard, and the optional `BOOTLOGO_PREVIEW_ROTATE_CW` preview-rotation hook (defaults off; only h700's platform.h defines it, for the RG28XX). -- **New-button defines must land in every platform.h.** The tg5050 L4/R4 work added - `CODE_L4/R4` + `JOY_L4/R4` references to shared `api.c` and `BUTTON_L4/R4` to - `minput.c`; h700 didn't build until the `*_NA` defines were added (`d738014`, - `956ed34`). When main grows a button, grep every `platform/platform.h` for the - new `BUTTON_/CODE_/JOY_` names — and verify with a full `make PLATFORM=h700` - (single-pak builds don't compile `minput.c` and will miss `BUTTON_*` gaps). +- **New-button / platform-API stubs must land on every platform.** The tg5050 L4/R4 + work and later main features (`BTN_FN*` #788, `PLAT_isUSBConnected` #783) break + h700 until matching defines/stubs exist. When main grows a button or `PLAT_*` + hook, grep every `platform/platform.h` / `platform.c` — and verify with a full + `make PLATFORM=h700` (single-pak builds miss some translation units). - **Re-run the 00-device-facts probes after each Anbernic stock-firmware update.** Paths have been stable historically, but `dmenu_ln`/muOS hooks are stockmod-version-dependent, and the model-string detector reads a stock binary. diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index c2171b371..35c2c95fa 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -608,6 +608,12 @@ void PLAT_getBatteryStatusFine(int *is_charging, int *charge) } } +int PLAT_isUSBConnected(void) +{ + // Not implemented for this platform yet. + return 0; +} + void PLAT_enableBacklight(int enable) { if (enable) { putInt("/sys/class/power_supply/axp2202-battery/work_led", 0); diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 53f97cba6..bba166c45 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -108,6 +108,16 @@ extern int dev_has_rstick; #define JOY_PLUS 16 #define JOY_MINUS 15 +/////////////////////////////// +// USER-ASSIGNABLE BUTTONS +// H700 devices have no dedicated FN1/FN2/HOME buttons for pak launch actions. +#define BTN_FN1 BTN_NONE +#define BTN_FN2 BTN_NONE +#define BTN_FN3 BTN_NONE +#define BTN_FN1_NAME "" +#define BTN_FN2_NAME "" +#define BTN_FN3_NAME "" + /////////////////////////////// #define AXIS_L2 AXIS_NA From b5c6607a0156fae22ea1303a39dccb7c0e7719a3 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 18:43:03 +0200 Subject: [PATCH 49/76] docs(h700): simplify README.txt section No need to add development process info for end users. Also added button shortcuts info like the other devices. --- skeleton/BASE/README.txt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/skeleton/BASE/README.txt b/skeleton/BASE/README.txt index 7aa53e14c..93d9d6993 100644 --- a/skeleton/BASE/README.txt +++ b/skeleton/BASE/README.txt @@ -36,17 +36,13 @@ TRIMUI SMART PRO / TRIMUI BRICK Copy the "trimui" folder and "MinUI.zip" (without unzipping) to the root of the SD card. -ANBERNIC RG XX H700 (ALPHA) +ANBERNIC RG XX (H700) DEVICES -For RG40XXV/RG40XXH-style two-card stock OS setups, copy "MinUI.zip" (without unzipping) to the root of the TF2 card that contains your Roms. +Copy "MinUI.zip" (without unzipping) to the root of the SD card. -Then copy "h700/dmenu.bin" to the root of the stock TF1 card's user-visible ROMs partition. Removing that "dmenu.bin" file uninstalls the boot hijack and returns the device to stock boot. +Copy the "dmenu.bin" file (found inside the "h700" folder) to the root of your stock OS card's ROMS partition. You can delete it later to uninstall and return to stock. -If your stock card has a stockmod or muOS boot selector, choose the stock frontend target before testing NextUI. muOS override files can prevent the stock dmenu hijack from running. - -This H700 alpha includes Bluetooth controller pairing and uses the stock firmware's BlueALSA components for Bluetooth audio; BlueALSA and BlueZ are not bundled or replaced. Pak Store and OTA updating are outside this alpha's scope. - -Known RG34XXSP alpha issues: PlayStation games currently return to Home on launch; the Bootlogo tool shows no previews at 720x480; an FBNeo launch with missing BIOS can leave MinArch unable to open its menu or exit; the power button can wake the device while the lid is closed; and Mega Drive performance with the Auto CPU profile can depend on shader/scaling settings. Charging uses light sleep rather than deep suspend by design. These issues do not affect the tested GB, GBC, GBA, FC, or SFC paths. +IMPORTANT: In the stock OS, set the user interface theme to "old style" (default) — not "MU style 1" or "MU style 2", otherwise NextUI will not start. MIYOO FLIP @@ -72,6 +68,11 @@ TRIMUI BRICK / BRICK PRO / SMART PRO S Buttons with no action of their own can be assigned a pak to launch: L3/R3 on the Brick, L4/R4 on the Brick Pro, and HOME on the Brick Pro and Smart Pro S. Assign them under Settings > Assignments. Assignments only apply in the main menu, not in-game. HOME no longer acts as a second menu button. +ANBERNIC RG XX + + Menu button: Quick menu + Select button: Game switcher + ---------------------------------------- Quicksave & auto-resume From 4c308650dcadbb23d4ebc98c06ab5047d5c10d75 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 19:48:33 +0200 Subject: [PATCH 50/76] docs(h700): beta1 test walkthrough and RC gates Record hardware validation through 2026-07-20 and scope beta1 vs RC: FBNeo missing-BIOS hard-lock as beta1 known issue / RC must-fix; remove clean uninstall from the matrix; defer SIGUSR1 and dirty-card recovery to RC polish; close accepted power policies and other closed test items. --- docs/h700-port/00-device-facts.md | 26 ++-- docs/h700-port/02-boot-and-installer.md | 27 ++-- docs/h700-port/03-platform-layer.md | 4 +- docs/h700-port/04-video-display.md | 21 ++- docs/h700-port/05-audio.md | 44 ++++--- docs/h700-port/06-power-sleep-battery.md | 38 ++++-- docs/h700-port/07-wifi-bluetooth.md | 6 +- docs/h700-port/08-testing-status.md | 122 +++++++++-------- docs/h700-port/09-roadmap.md | 158 +++++++++++++---------- docs/h700-port/10-core-game-matrix.md | 24 ++-- docs/h700-port/README.md | 59 +++++---- 11 files changed, 306 insertions(+), 223 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 3e08c1da0..8034bc9ee 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -99,9 +99,9 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `echo mem` suspend works; wake source is the **power button** (AXP2202 PEK). **RTC alarm wake does NOT fire** — no timed wake; don't build features on it. The shipped sleep/wake path is reliable in repeated RG40XXV/RG34XXSP testing, - including in-game resume and power-off auto-resume. RG34XXSP exception: the power - button currently wakes light sleep while the lid is closed despite the software - lid gate (see 06). Charging intentionally prevents deep sleep in shared code. + including in-game resume and power-off auto-resume. RG34XXSP accepted policy: POWER + can wake light sleep while the lid is closed; deep sleep re-sleeps if the lid is + still closed (06). Charging intentionally prevents deep sleep in shared code. - PMIC: **AXP2202** — `/sys/class/power_supply/axp2202-battery/` and `axp2202-usb/` - Battery: `capacity`, `status`, `voltage_now`, `temp`, `time_to_empty_now`, `time_to_full_now`, `charge_counter`, `health` @@ -112,7 +112,8 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `lowpwr_led`, `led_test` - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — polarity verified (`1` = open); lid close sleeps and lid open wakes screen-off. Deep suspend still - requires power, but power also wakes light sleep while closed (unexpected; open). + requires power. POWER can wake light sleep while closed; deep sleep re-sleeps if + lid still closed — accepted documented policy (06). - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` - `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) @@ -169,9 +170,11 @@ Consequences: 1. Dropping an executable named **`dmenu.bin` onto the FAT ROMs partition (`/mnt/mmc`)** makes the stock OS run it instead of its own frontend. No reflashing. This is how the shipped port (and old MinUI, and muOS "in-place") installs. -2. **stockmod caveat:** `muos1.ini`/`muos2.ini` in `/mnt/vendor` *override* the - `/mnt/mmc/dmenu.bin` check. The boot shim detects this and shows a "STOCK TARGET - REQUIRED" splash (currently non-blocking — see 09-roadmap). +2. **MU-style theme caveat:** selecting stock/stockmod **MU style 1/2** drops + `muos1.ini`/`muos2.ini` under `/mnt/vendor`, which *override* the + `/mnt/mmc/dmenu.bin` check so the MU frontend runs instead. NextUI never starts + and cannot show a warning from that path. Install requires stock **old style** + theme (documented in `skeleton/BASE/README.txt`; see 02). 3. `/tmp/.next` chain-exec exists in the stock wrapper; NextUI runs its own launch loop. 4. `launcher.sh stop` kills via `SIGUSR1 dmenu.bin` — the shim `trap`s USR1. 5. Model detection: `strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG` → `RGXX_MODEL` @@ -219,11 +222,14 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf clone base. ## Facts still unverified (need hardware/testing) -1. Why RG34XXSP power-key release wakes light sleep while `hallkey=0` even though - `PLAT_shouldWake()` contains a closed-lid gate. +1. ~~Why RG34XXSP power-key release wakes light sleep while `hallkey=0`~~ Accepted + as beta policy (2026-07-20): light sleep can wake on POWER with lid closed; deep + sleep re-sleeps if lid still closed. Optional later hardening (06). 2. ~~RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path end-to-end.~~ Resolved 2026-07-12: SDL_ROTATION=1 rotates the whole GL frame at the driver; app space is 640×480 landscape (`should_rotate` must stay 0 — 04). -3. Headphone jack detection on 2026 firmware (old note: `jack_state` never changes). +3. ~~Headphone jack detection on 2026 firmware~~ Resolved for beta: hardware + auto-mutes speaker and routes to HP without NextUI. Software `SetJack`/icon + path remains unwired (optional polish — 05). 4. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. 5. Exact stock `RGXX_MODEL` strings for the RG35XX family and RG40XXH. diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md index 4d15d2af7..0c1fbdccf 100644 --- a/docs/h700-port/02-boot-and-installer.md +++ b/docs/h700-port/02-boot-and-installer.md @@ -6,6 +6,8 @@ The stock launcher wrapper `/mnt/vendor/ctrl/dmenu_ln` prefers **`/mnt/mmc/dmenu (the FAT32 ROMs partition of the boot SD, TF1) over the built-in frontend (verified, full chain in 00). Placing our own `dmenu.bin` there hijacks boot; deleting it restores pure stock. This shipped as designed and is the entire install/uninstall story on TF1. +No separate uninstall soak test is required: absence of that file is design-guaranteed +to prevent NextUI from starting on RG XX. ``` stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_ln @@ -15,14 +17,23 @@ stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_l NO → /mnt/vendor/bin/dmenu.bin (stock UI) ``` -### stockmod / muOS caveat -`dmenu_ln` checks `/mnt/vendor/muos1.ini` / `muos2.ini` **first** and boots the bundled -muOS instead if present. The boot shim detects this, logs it, and shows a -**"STOCK TARGET REQUIRED"** splash; `launch.sh` additionally drops a -`stockmod-warning.txt` on the SD card. It is currently a warning, **not** a hard fail — -the user must switch the boot target back to "stock" (or delete the ini) themselves. -`skeleton/BASE/README.txt` documents this in the H700 install section. -(Whether to hard-fail instead is an open call — see 09-roadmap.) +### Stock “MU style” theme caveat (install prerequisite) +The real hijack break is a **stock UI theme setting**, not a separate muOS install. +In stock (and stockmod) Settings, **MU style 1 / MU style 2** causes `dmenu_ln` to +prefer the MU frontend (`muos1.bin` / `muos2.bin`, gated by `/mnt/vendor/muos*.ini`) +**before** `/mnt/mmc/dmenu.bin` ever runs. Result on hardware: the device boots the +stock/MU UI normally; NextUI never starts; no splash or warning appears — our shim +is simply not executed. + +There is nothing useful to do from inside NextUI for that path. The install docs +already state the requirement (`skeleton/BASE/README.txt`): set the stock theme to +**“old style” (default)**, not MU style. Beta treats this as a documented +prerequisite, not an open warn-vs-hard-stop decision. + +Note: `boot/boot.sh` still has a `muos1.ini`/`muos2.ini` → “STOCK TARGET REQUIRED” +check (and `launch.sh` can drop `stockmod-warning.txt`), but that path is only +reachable if our `dmenu.bin` was already selected — which the same override prevents. +Treat the splash as defensive dead code unless stock’s `dmenu_ln` logic changes. ## SD card layout: TF1 stays stock, NextUI lives on TF2 diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 9029f2aa9..b5031c542 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -121,14 +121,14 @@ open/closed per poll and could drop the wake press between polls. |---|---| | Video | `#include "generic_video.c"` — custom SDL2 mali driver does the rest (04) | | Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, coarse bucketing in shared code — identical to tg5040 | -| CPU speed | `governor.sh` via `system()`: auto=schedutil, performance=max 1512000, powersave=conservative capped mid-range. Manual changes work. RG34XXSP MD testing exposed render-setting-sensitive auto frequencies (often 480 MHz when slow; ~720 MHz when smooth), still under investigation. Single A53 cluster → `PLAT_pinToCores` no-op | +| CPU speed | `governor.sh` via `system()`: auto=schedutil, performance=max 1512000, powersave=conservative capped mid-range. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | | CPU temp | thermal_zone0 | | GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | | GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | | Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | | LEDs | `MAX_LIGHTS 0`, all `PLAT_setLed*` stubs — hardware has no RGB LEDs. `work_led` used only as sleep/backlight indicator | | Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | -| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP issue: power also wakes light sleep while the lid is closed despite the intended gate. | +| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP: POWER can wake light sleep with lid closed; deep sleep re-sleeps if lid still closed — accepted beta policy (06). | | Model | `PLAT_getModel` → "Anbernic " + `RGXX_MODEL` (copied into a static buffer, not a raw getenv pointer) | | Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezones via `timedatectl set-timezone`/`list-timezones`, NTP via `set-ntp` (systemd-timesyncd) — much cleaner than tg5040's uci | | Turbo | `PLAT_canTurbo()=false`, no-ops (tg5040's turbo rides trimui_inputd; no H700 equivalent wired) | diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index aea8145fb..ef37eac13 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -26,16 +26,22 @@ The stack: | Device | Panel | FIXED_W×H | Status | |---|---|---|---| | RG40XXV | 640×480 4:3 | 640×480 | ✅ shipped, tested | -| RG34XXSP | 720×480 3:2 | 720×480 | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus tested-good; resolution-specific overlays untested | +| RG34XXSP | 720×480 3:2 | 720×480 | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher, in-game menus; UI scaling tested-good | | RG28XX | 480×640 portrait | 640×480 logical | ✅ user-tested — driver-level rotation, UI + game scaling verified (below) | -| RGcubexx | 720×720 | 720×720 | wired (`is_cube`), untested | +| RGcubexx | 720×720 | 720×720 | wired (`is_cube`); general UI scaling community-validated; full matrix not walked locally | ### 480p UI — mostly fine, polish pass pending These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't rendered at 480p for ~2 years. Real-use verdict on RG40XXV and RG34XXSP: **no systemic breakage — OK for alpha**. The broad 720×480 surface sweep is now clean, including the -keyboard used for RetroAchievements credentials. Screenshots and resolution-specific -overlays remain untested; no suitable 720×480 overlay asset was available. Related but +keyboard used for RetroAchievements credentials. Screenshots pass on RG34XXSP. +**UI scaling** across panels is good: 640×480, 720×480, and rotated 480×640 tested +locally; 720×720 (RGcubexx) confirmed by a Discord community tester — no graphical +issues worth tracking. **Panel-matched overlay assets** are a separate content gap: +the release only ships empty `Overlays//` dirs plus two GBA PNGs at +**1024×768** (TrimUI Brick), not 640×480 / 720×480 / 480×640 / 720×720. The overlay +GLES path itself already runs on Mali (shaders/effects row); shipping H700-sized +overlay packs is optional content, not a beta code gate. Related but distinct: the Input tester is now device-aware, the dead display controls are hidden/verified, and Fn-switch settings are gated off on h700. The broader capability sweep remains a useful regression check (09-roadmap #8). @@ -180,7 +186,9 @@ pitfall #2 in 01). The alpha-blending code on main was never at fault. Consequence: the h700 branch was **rebased onto main with the alpha-blending work included** (done 2026-07-09). `workspace/all/` carried zero net change from the reverted experiment, so the rebase was clean on that front. Game switcher and box-art -rendering are clean at 720×480; screenshots and resolution-specific overlays remain to +rendering are clean at 720×480; screenshots pass on RG34XXSP; multi-panel UI scaling +passes (see geometry table); panel-matched overlay assets are not shipped (Brick-sized +GBA only); remaining polish items remain to be checked. Upstream main has since advanced, so rebase once more before final merge. ## Bootlogo preset previews — resolved (2026-07-13) @@ -196,7 +204,8 @@ search path, per-file `IMG_Load` failures, and the final count to the pak's `log.txt`, renders the searched path on screen when nothing loads, and guards scroll/apply against an empty preset list (apply previously dereferenced a NULL array). RG28XX previews are rotated to boot orientation (see rotation section -above). The 720×720 path still needs hardware testing (no cube available). +above). The 720×720 path has community UI-scaling validation; full cube UI/core matrix +still needs a local or broader external pass. ## Boot splash diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md index 35e11a10e..1894d6a62 100644 --- a/docs/h700-port/05-audio.md +++ b/docs/h700-port/05-audio.md @@ -45,13 +45,17 @@ for libraries that exist on the target. `before()` and **restores it in `after()`** on resume (an early version had the restore commented out; it's live now). -## Headphone jack — not wired (open) +## Headphone jack — hardware auto-route works; software detection unused -`snd_soc_sunxi_component_jack/parameters/jack_state` exists but was historically -"always 0"; never re-tested on 2026 firmware. Unknown how the stock OS switches -speaker/HP (possibly hardware auto-mute, in which case nothing is needed). To -investigate: diff `amixer contents` and watch input devices while plugging headphones -on a live device. Until then: no jack-based switching in NextUI. +**Hardware (tested):** plugging headphones auto-mutes the speaker and routes audio +to the jack with no NextUI involvement. Functional audio is correct. + +**Software:** Brick-style `SetJack` / separate speaker vs headphones volume / HP +volume icon are **not** wired on h700 — `keymon` never monitors a jack event, so +`GetJack()` stays 0 and the volume UI keeps the speaker path. That is cosmetic / +dual-volume polish only; routing does not depend on it. Optional follow-up if a +HP icon or independent HP volume is wanted later. (`jack_state` sysfs was +historically always 0 and was never needed once hardware auto-mute was confirmed.) ## Bluetooth audio — stock-first A2DP enabled @@ -75,17 +79,23 @@ H700 now follows the tg5040 lifecycle with a stock-only implementation: - disabling Bluetooth stops BlueALSA before BlueZ; no `bluetoothd`, `bluetoothctl`, or other BlueZ component is bundled or replaced -AirPods 4 ANC pairing, A2DP connection, automatic internal-speaker muting/restoration, -SBC transport, and user-audible game audio are verified on RG40XXV. The original silent -stream was not a 44.1/48 kHz problem: BlueZ created the AirPods transport with absolute -volume zero. Setting its `MediaTransport1.Volume` to 127 made the already-running stream -audible. The shipped daemon flags now initialize that value natively. An A2DP PCM -publication race was also observed during an artificial daemon restart while the device -remained logically connected; it is not handled by an H700-only shared-code workaround -unless a normal connection flow reproduces it. Final automatic reconnect, game-switching, -and suspend/resume passes are still pending because the shared test unit was returned to -HDMI testing. Firmware without a runnable stock BlueALSA is logged as controller-only -rather than augmented with another userspace stack; see 09-roadmap. +**Earlier validation (RG40XXV):** AirPods 4 ANC pairing, A2DP connection, automatic +internal-speaker muting/restoration, SBC transport, and user-audible game audio passed. +The original silent stream was not a 44.1/48 kHz problem: BlueZ created the AirPods +transport with absolute volume zero. Setting its `MediaTransport1.Volume` to 127 made +the already-running stream audible. The shipped daemon flags now initialize that value +natively. An A2DP PCM publication race was also observed during an artificial daemon +restart while the device remained logically connected; it is not handled by an +H700-only shared-code workaround unless a normal connection flow reproduces it. + +**Lifecycle remainder blocked (2026-07-20):** auto reconnect, menu/game and game/game +switching, five suspend/resume cycles, case/disconnect speaker-restore revalidation, +and Settings sample-rate change+persist were never completed. Revalidation is blocked +because BT powers on but scans no devices and cannot pair on **both stock OS and +BaseOS** — a device/firmware environment failure, not a NextUI-only regression. +Resume the full matrix once discovery works again. Firmware without a runnable stock +BlueALSA is logged as controller-only rather than augmented with another userspace +stack; see 09-roadmap. ## Sample rates diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index d794e98af..7a28d5e93 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -36,8 +36,9 @@ repeated power-tap sleep/wake cycles, screen-off → suspend two-stage escalatio (display settings, WiFi reconnect). In-game sleep/resume and in-game power-off → power-on → automatic resume of the running game are also verified. Long-press power-off is unaffected. Two RG34XXSP edge cases were found on 2026-07-10: a power-key -release wakes light sleep even while the lid remains closed, and charging keeps the -device in light sleep rather than deep suspend. +release can wake light sleep even while the lid remains closed (accepted beta +policy — deep sleep re-sleeps if lid still closed; see Lid below), and charging +keeps the device in light sleep rather than deep suspend (also accepted policy). Stockmod/logind interference was ruled out: `HandlePowerKey=ignore` is in place (our launch.sh drop-in), stockmod's `pwr_new.sh` is not running under NextUI, and no evdev @@ -91,25 +92,36 @@ suspend timeout). Lid open wakes from *screen-off* sleep (hallkey polled by `PLAT_shouldWake`); waking from *deep* suspend requires the power key because the hall sensor is not a kernel wake source — same as stock firmware, considered desirable. The intended software behavior is to ignore power while the lid is closed, and -`PLAT_shouldWake()` has that gate, but hardware testing shows power currently wakes -light sleep anyway. The cause is unresolved. +`PLAT_shouldWake()` has that gate. Hardware: POWER can still wake **light** sleep +while the lid is closed. In **deep** sleep, if POWER briefly wakes the unit and the +lid is still closed, the unit returns to sleep. **Accepted as documented beta +policy** (2026-07-20) — not a release blocker. Optional later hardening if a +stricter closed-lid gate for light sleep is desired. ## Battery - `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, coarse bucketing in shared code — same paths as tg5040, copied verbatim. Charging detection - and the UI indicator work on RG34XXSP; percentage accuracy vs stock remains untested. + and the UI indicator work on RG34XXSP; percentage accuracy vs stock passes on + RG34XXSP. After a ~9 h sleep/wake cycle the top-right battery icon and the Battery + pak were out of sync with each other (fresh boot keeps them aligned) — the reported + level itself is fine, but the two UI consumers of battery state need a hardening + look later (likely a stale cache / poll gap after long suspend). - **Not supported:** “Keep awake over USB” (upstream #783). `PLAT_isUSBConnected()` is a stub returning 0; the Settings toggle remains tg5040-only. Charging already blocks deep sleep via `is_charging`; gadget/data keep-awake is not implemented. - While charging, lid or power sleep reaches screen-off/light sleep only. This matches shared `PWR_waitForWake()` behavior: the charging check deliberately skips - `PWR_deepSleep()` and checks again a minute later. Decide separately whether H700 - should override that product policy; it is not a failed suspend attempt. + `PWR_deepSleep()` and checks again a minute later. **Accepted as documented beta + policy** (2026-07-20) — same shared product choice as other platforms; not a failed + suspend attempt and not an H700-specific override. - Richer metrics (`time_to_empty_now`, `voltage_now`, `temp`, `charge_counter`) are available for future batmon extensions; not wired. -- Standby drain: not yet measured (plan target is ≤ stock + ~1% over 8 h); the test - is now unblocked by reliable sleep/wake. +- Standby drain: first RG34XXSP data point — ~8.5 h deep sleep dropped capacity + 40% → 33% (~7%). Higher than the aspirational ≤ stock + ~1% over 8 h target, but + capacity % is coarse (and the icon/Battery-pak desync after long sleep may muddy + the reading). Re-test with `axp2202-battery/voltage_now` before/after, and run the + same interval on stock OS for a true baseline, before calling this pass or fail. ## Power off / reboot @@ -123,8 +135,6 @@ by u-boot/stock before our hijack, untouched. `governor.sh`: auto=`schedutil`, performance=`performance` @1512000, powersave=`conservative` capped mid-range. Menu vs in-game profiles ride the shared settings; performance is forced during game launch. Manual in-game changes are clean. -RG34XXSP MD testing exposed an auto-mode issue: slow cases sat near 480 MHz, while a -stock shader + 3× scale + linear interpolation drove ~720 MHz and ran smoothly; -powersave (~1.1 GHz observed) and performance (~1.5 GHz) were also smooth. The coupling -between render settings, workload detection, and schedutil needs debugging. Single -cluster → no core pinning. +~~RG34XXSP MD Auto CPU slowdown~~ Fixed (user-verified 2026-07-20): earlier, some +shader/scale combos left Auto near 480 MHz and felt slow; that no longer reproduces. +Manual powersave/performance were already smooth. Single cluster → no core pinning. diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index d45f38966..3448252bd 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -57,8 +57,10 @@ scope; testing is not applicable and they are not alpha release gates. ready and verifies `org.bluealsa`. The H700 `audiomon` build omits only the `delay 0` setting rejected by the stock plugin; its remaining behavior is shared. BlueALSA, its ALSA plugins, SBC, and BlueZ all remain stock and are not bundled or - replaced. AirPods 4 ANC playback is verified; automatic reconnect and suspend/resume - are tracked in 05/08. + replaced. AirPods 4 ANC playback was verified earlier on RG40XXV. Full lifecycle + remainder (reconnect, game-switch, suspend/resume, sample-rate Settings UI) is + **blocked** as of 2026-07-20: BT scan/pair broken on stock and BaseOS + (device/firmware) — tracked in 05/08. - BT controller transport is verified on RG40XXV: Settings discovers, pairs, trusts, connects, and exposes a DualSense as an SDL joystick and evdev input device. Button semantics are not fully normalized because the shared tg5040/tg5050/H700 diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 363d2c055..bc7412d7b 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -7,7 +7,7 @@ | RG40XXV | Probed live | Primary bring-up device | | RG34XXSP | User-tested | General parity with RG40XXV; sleep/wake + lid validated here | | RG28XX | User-tested | Rotation validated: UI, game scaling, bootlogo apply working | -| RGcubexx | No device available | External alpha-validation target | +| RGcubexx | Community-tested (Discord) | External validation target; general UI scaling confirmed 720×720 | | TrimUI Brick TG5040 | Probed live | Regression reference (behavioral 1:1 comparisons) | **Dev-loop tips:** @@ -17,7 +17,7 @@ - Repeated `nextui.elf` crashes now log the crash limit and power off. Use TF2 logs for crash-loop debugging; the release runtime powers off instead of starting SSH. -## Validation matrix (status as of 2026-07-17, RG40XXV unless noted) +## Validation matrix (status as of 2026-07-20, RG40XXV unless noted) ✅ tested & passed ⚠️ tested, has issues ⬜ untested ➖ explicitly out of alpha scope ✖ not implemented @@ -42,31 +42,32 @@ | WiFi scan/connect/forget | ✅ | | WiFi survives sleep; NTP sync | ✅ | | BT adapter init + controller pairing/attachment | ✅ RG40XXV: vendor UART attach creates `hci0`; stock BlueZ 5.66 discovers, pairs, trusts, and connects a DualSense; NextUI opens it as an SDL joystick plus `/dev/input/event3`; five restart cycles passed without duplicate attach/daemon processes. Raw button semantics remain a platform-agnostic tg5040/tg5050/H700 mapping issue and are out of scope for this branch | -| Deep sleep (auto/manual) + wake | ⚠️ core paths work on RG34XXSP and RG40XXV, including in-game resume and power-off auto-resume. RG34XXSP POWER can wake the device while the lid is closed; charging intentionally prevents deep sleep in shared code (06) | +| Deep sleep (auto/manual) + wake | ✅ core paths work on RG34XXSP and RG40XXV, including in-game resume and power-off auto-resume. RG34XXSP closed-lid POWER behavior accepted as policy (light sleep only — see lid row). Charging suppresses deep sleep by shared product policy — accepted for beta (06) | | Files app (NextCommander): input, scaling, first-frame render | ✅ tested on RG40XXV and RG34XXSP; PPU 2 retained for alpha | | Input pak: per-device stick layout | ✅ RG40XXV shows working L3 only; RG34XXSP shows working L3/R3. Analog movement is not visualized by the existing Input pak and is out of scope for this port | | Recently Played + game switcher | ✅ tested on RG40XXV and RG34XXSP | -| Screenshots | ⬜ testing planned | +| Screenshots | ✅ tested on RG34XXSP | | Box art | ✅ tested at 720×480 on RG34XXSP | | HDMI output | ⚠️ RG40XXV + TV passes menu/game output and in-game hotplug in both directions, including audio routing. Boot-with-cable, other H700 models, and displays that reject the fixed 1080p60 mode remain untested; HDMI is a stretch feature rather than a beta gate (04) | -| Clean uninstall (delete dmenu.bin → pristine stock) | ⬜ | -| Battery % accuracy vs stock | ⬜ | -| Charging detection/indicator; sleep while charging | ⚠️ indicator works on RG34XXSP; charging permits light sleep but shared power code deliberately suppresses deep sleep | -| Overnight drain (8 h mem-sleep vs stock baseline) | ⬜ (unblocked — sleep/wake now reliable) | +| Clean uninstall (delete dmenu.bin → pristine stock) | ➖ removed from test matrix — design-guaranteed: without `/mnt/mmc/dmenu.bin`, stock `dmenu_ln` never launches NextUI on RG XX (hijack is that one file). No separate end-to-end uninstall exercise required for beta/RC (02) | +| Battery % accuracy vs stock | ✅ percentage matches stock on fresh boot (RG34XXSP). After a ~9 h sleep/wake cycle the top-right battery icon and Battery pak were briefly out of sync with each other — level itself is fine; treat the dual-source desync as a future hardening item, not a beta gate | +| Charging detection/indicator; sleep while charging | ✅ indicator works on RG34XXSP; while charging, only light/screen-off sleep is allowed — shared product policy, **accepted for beta** (not a failed deep-sleep attempt) (06) | +| Overnight drain (8 h mem-sleep vs stock baseline) | ⚠️ partial — RG34XXSP deep sleep ~8.5 h: 40% → 33% (~7% capacity). Higher than hoped; re-test with `voltage_now` (not %) and a stock OS baseline before treating as pass/fail | | RetroAchievements login + unlock | ✅ works on RG34XXSP; on-screen credential keyboard also verified | | Pak Store install | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | | OTA update flow | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | | BT controller semantic mapping | ⚠ pairing and input attachment pass; raw button indices vary by controller and require a later cross-platform tg5040/tg5050/H700 normalization change | | Bootlogo pak, RG40XXV 640×480 | ✅ carousel/apply/backup tested; restore inferred via same apply path | -| Bootlogo pak, RG34XXSP 720×480 | ✅ fixed 2026-07-13 — all 23 presets load and render with the current build (verified via SSH-driven run + framebuffer capture; the failing binary was alpha1.1-era). Pak now logs path/count/load errors and shows the searched path on screen when empty; apply guarded against an empty list | +| Bootlogo pak, RG34XXSP 720×480 | ✅ fixed 2026-07-13 — all 23 presets load and render with the current build. First-apply `original.bmp` backup and restore also pass (user-verified 2026-07-20). Pak logs path/count/load errors and shows the searched path on screen when empty; apply guarded against an empty list | | Bootlogo pak, RG28XX 480×640 | ✅ apply user-tested: logo renders upright at boot. Previews were shown panel-native (90° off) and are now rotated to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`) | -| BT A2DP audio | ⚠ AirPods 4 ANC pair/connect and user-audible SBC game audio pass on RG40XXV; internal speaker mutes/restores correctly. Confirmed blockers were the H700 stock plugin rejecting `delay 0` and BlueZ transport volume initializing to zero—not 44.1/48 kHz. H700 now uses only stock BlueALSA with native volume; final automatic reconnect/game-switch/suspend-resume tests remain (05/07) | -| BT maximum sampling rate | ⚠ Matches tg5040 and defaults to 48000 Hz. AirPods accepted both 44100 and 48000 during probing, so the option is a compatibility escape hatch rather than a fix for the observed silence. Verify the rebuilt Settings UI changes and persists the value. The inherited connection test also sees controller-only ACL links; at the 48000 default this is harmless, while a future audio-specific detector is a cross-platform cleanup rather than an H700 beta blocker | -| Headphone jack detection | ✖ not wired (05) | -| RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher and in-game menus work well; resolution-specific overlays untested | -| RG34XXSP: lid sleep/wake | ⚠️ lid close and open work; deep suspend requires power as expected, but power also wakes light sleep while the lid is closed | +| BT A2DP audio | ⚠ partial — earlier RG40XXV pass: AirPods 4 ANC pair/connect + user-audible SBC game audio; internal speaker mutes/restores correctly (blockers were stock `delay 0` rejection + zero BlueZ transport volume; fixed with stock BlueALSA + native volume). **Auto reconnect, menu/game and game/game switching, five suspend/resume cycles, and case/disconnect speaker-restore revalidation are blocked** as of 2026-07-20: BT powers on but scans no devices / cannot pair on **both stock OS and BaseOS** (device/firmware environment issue, not NextUI-specific). Re-run the full lifecycle matrix once scanning works again (05/07) | +| BT maximum sampling rate | ⚠ Matches tg5040 and defaults to 48000 Hz. AirPods accepted both 44100 and 48000 during probing (escape hatch, not the silence fix). **Settings 44100/48000 change+persist revalidation blocked** by the same device-wide scan/pair outage (stock + BaseOS). The inherited connection test also sees controller-only ACL links; at the 48000 default this is harmless; audio-specific detector is a cross-platform cleanup, not an H700 beta blocker | +| Headphone jack detection | ✅ hardware path pass — plug-in auto-mutes the speaker and routes audio to headphones with no software help (RG34XXSP / H700 line). NextUI software jack state (`SetJack` / separate HP volume / HP icon) is **not** wired on h700 (keymon never monitors jack; `GetJack` stays 0). That is Brick-style polish only; correct routing does not depend on it. Optional follow-up if HP-icon or dual-volume is desired (05) | +| RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher, and in-game menus work well; UI scaling good at 720×480 | +| RG34XXSP: lid sleep/wake | ✅ accepted documented policy — lid close/open work. POWER can wake **light** sleep while the lid is closed; in **deep** sleep, POWER that briefly wakes the unit returns it to sleep if the lid is still closed. Not treated as a beta defect (06) | | RG28XX: rotated UI + games | ✅ user-tested — UI correct; minarch Aspect/Fullscreen were broken by app-side double-rotation, fixed by removing `should_rotate` (rotation is driver-level only — 04) | -| RGcubexx: 720×720 | ⬜ no device available; intentionally an external alpha-validation target | +| RGcubexx: 720×720 | ⚠️ partial external validation only — general UI scaling passes (Discord). No local device; no further testing as of 2026-07-20. Full functional matrix remains open for external testers | +| Resolution-specific overlays (panel-matched assets) | ➖ no H700 panel-sized overlay pack ships today. Tree has empty per-system folders plus two GBA PNGs at **1024×768** (Brick). Overlay *pipeline* already ✅ under shaders/effects; panel-matched content is a content follow-up, not a beta gate | ### Performance | Item | Status | @@ -75,7 +76,7 @@ | PS1 launch/performance | ✅ on RG40XXV and RG34XXSP. The apparent RG34XXSP launch regression was a stale/corrupted core artifact; a clean core rebuild fixed it | | Frame pacing / tearing / input lag vs stock RA | ✅ gameplay-tested on RG40XXV; no visible pacing, tearing, latency, or audio issues (not instrumented) | | Manual governor changes don't stutter audio | ✅ tested in-game on RG34XXSP | -| Auto governor load/frequency selection | ⚠️ MD can remain near 480 MHz and slow down depending on shader/scaling; stock shader + 3× + linear raises ~720 MHz and is smooth. Powersave/performance are smooth; needs debugging | +| Auto governor load/frequency selection | ✅ MD Auto CPU slowdown fixed (user-verified 2026-07-20); manual powersave/performance remain smooth | ### RG34XXSP core/game bring-up @@ -85,34 +86,41 @@ Detailed results and the remaining system backlog are tracked in | System/core | Status | |---|---| | GB / GBC / GBA / FC / SFC | ✅ games launch and play perfectly | -| MD / PicoDrive | ⚠️ launches, but some rendering combinations slow down with auto CPU near 480 MHz | -| FBN / FBNeo | ⚠️ missing BIOS blocked game validation; the error path then left MinArch unable to open its menu or exit | +| A2600 / MGBA / SMS | ✅ launch and play (2026-07-20 smoke) | +| MD / PicoDrive | ✅ launches and plays; former Auto CPU slowdown near 480 MHz is fixed (user-verified 2026-07-20) | +| FBN / FBNeo | ⚠️ partial — with required BIOS, launch and play are OK (user-verified 2026-07-20). Missing-BIOS path still hard-locks MinArch (no menu/exit). **beta1:** ship as known issue (most users on happy path with BIOS). **RC gate:** must fix error recovery before release candidate | | PS / PCSX-ReARMed | ✅ launches and plays after a clean core rebuild; the earlier crashes were caused by a stale/corrupted core, not an H700 runtime defect | -| Remaining shipped cores | ⬜ systematic coverage pending | - -### Beta-entry gate summary - -The matrix does not require every long-tail row to turn green before beta. The beta -entry gates are the known user-facing regressions and the safety/lifecycle checks: - -- **Core regressions:** fix the FBNeo missing-BIOS lockup; either fix MD Auto CPU - slowdown or ship a proven safe default. Run at least - a launch/audio/input/menu/exit/save-state smoke test across the remaining shipped - core families. -- **Bluetooth audio lifecycle:** verify automatic reconnect, game-to-game and - menu-to-game switching, five suspend/resume cycles, case/disconnect speaker restore, - and Settings sample-rate selection/persistence. Controller mapping and the - controller-only sample-rate detector are shared-platform follow-ups, not H700 gates. -- **Power and reversibility:** complete battery-vs-stock accuracy and overnight-drain - measurements, decide the closed-lid POWER and charging/light-sleep policies, and - pass clean uninstall, SIGUSR1 shutdown, and dirty-card recovery. -- **Boot policy and basic I/O:** decide whether muOS/stockmod detection warns or - hard-stops, test screenshots and resolution-specific overlays, and determine whether - the headphone jack is hardware-auto-switched or needs software handling. - -RGcubexx/720×720 hardware coverage, HDMI boot/EDID/model expansion, cross-platform -controller normalization, Pak Store/OTA, per-panel calibration, and the dedicated -toolchain image remain explicit beta follow-ups unless their scope is promoted. +| Remaining shipped cores | ⚠️ expanded 2026-07-20: A2600, MGBA, SMS pass in addition to GB/GBC/GBA/FC/SFC/MD/PS. Full EXTRAS long-tail still pending (see 10) | + +### Beta1 vs RC gate summary + +The matrix does not require every long-tail row to turn green before beta1. + +**beta1 may ship with:** +- FBNeo missing-BIOS hard-lock as a **known issue** (happy path with BIOS is fine; + most users will not hit it). Document in release notes. +- SIGUSR1 shutdown and dirty-card `fsck` recovery still untested (RC polish). +- BT audio lifecycle incomplete where device/firmware scan is broken. +- Overnight drain partial (voltage/stock re-test when convenient). +- Remaining EXTRAS cores untested beyond the green rows in 10. + +**RC must close (or explicitly re-descope):** +- **FBNeo missing-BIOS recovery** — major bug; fix so MinArch returns control + without a power cycle. Preserve the case as a regression test afterward. +- SIGUSR1 end-to-end + dirty-card recovery smoke (RC polish gauntlet). +- Prefer BT lifecycle revalidation once device BT scan works again. +- Prefer overnight drain voltage-vs-stock pass. + +**Closed / not required as test rows:** +- Clean uninstall — design-guaranteed by deleting `dmenu.bin` (removed from matrix). +- MU-style theme — install prerequisite only. +- Closed-lid POWER, charging→light-sleep, headphone hardware route — accepted policy. +- MD Auto CPU — fixed. + +RGcubexx full hardware coverage, HDMI boot/EDID/model expansion, cross-platform +controller normalization, Pak Store/OTA, per-panel calibration, H700-sized overlay +content packs, and the dedicated toolchain image remain post-beta / optional unless +scope is promoted. ### RG34XXSP remaining validation @@ -123,25 +131,27 @@ toolchain image remain explicit beta follow-ups unless their scope is promoted. clean exit, save/load state, sustained Auto CPU play, sleep/resume, and power-off auto-resume. The initial green results establish launch/gameplay, not every one of those checks for every system. -- Test screenshots and overlays made for 720×480. -- Retest FBNeo with the required BIOS, and separately preserve the missing-BIOS error - case as a regression test after it is fixed. +- Screenshots pass on RG34XXSP. UI scaling good at 720×480. Panel-matched overlay + assets are not shipped for H700 (only Brick-sized GBA PNGs exist). +- FBNeo with BIOS: pass. Missing-BIOS hard-lock: **known issue for beta1**; **RC + must fix**, then preserve as a regression test. - Preserve PS1 in the release-candidate smoke pass so a stale or corrupted packaged core cannot recreate the resolved launch failure. -- Reproduce the MD Auto CPU behavior with exact shader, scale, and interpolation - combinations. -- Test 720×480 Bootlogo backup and restore (previews and apply now work; the - first-apply `original.bmp` backup and restoring it haven't been exercised on SP). -- Test BT controller pairing/input, battery percentage accuracy, and overnight drain. -- Run clean uninstall, SIGUSR1 shutdown, dirty-card recovery, and muOS/stockmod - coexistence on this hardware where practical. +- ~~Reproduce the MD Auto CPU behavior~~ Fixed (user-verified 2026-07-20). +- ~~Test 720×480 Bootlogo backup and restore~~ Pass on RG34XXSP (2026-07-20). +- Test BT controller pairing/input when device BT scan works. Overnight drain + partial on RG34XXSP (~7% over 8.5 h); re-test with voltage_now vs stock (RC + polish). Battery % vs stock passes; icon-vs-Battery-pak desync is a follow-up. +- ~~Clean uninstall~~ removed from matrix (delete `dmenu.bin` is sufficient by + design). SIGUSR1 + dirty-card recovery: **RC polish**, untested OK for beta1. + MU-style theme is a documented stock-side install prerequisite only. ### Robustness | Item | Status | |---|---| -| SIGUSR1 from `launcher.sh stop` doesn't corrupt | ⬜ (shim traps USR1; end-to-end untested) | -| SD dirty-card recovery (`fsck.fat -a` hook in boot shim) | ⬜ (code in place) | -| muOS/stockmod coexistence: detected + splash warning | ⬜ (code in place; warn-only by design so far) | +| SIGUSR1 from `launcher.sh stop` doesn't corrupt | ⬜ RC polish — shim traps USR1; end-to-end untested; not a beta1 gate | +| SD dirty-card recovery (`fsck.fat -a` hook in boot shim) | ⬜ RC polish — code in place; not a beta1 gate | +| Stock “MU style” theme vs NextUI hijack | ➖ closed — not a NextUI runtime test. Selecting stock/stockmod **MU style 1/2** makes `dmenu_ln` prefer the MU frontend over `/mnt/mmc/dmenu.bin`, so NextUI never starts and no “STOCK TARGET REQUIRED” splash can appear. Confirmed: device just boots stock/MU UI. Nothing the shim can do from outside that path; install docs already require **old style** theme (`skeleton/BASE/README.txt`). The boot-shim `muos1.ini`/`muos2.ini` warning is effectively unreachable for the same reason (override happens before our `dmenu.bin` runs) | ## Regression guardrails diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index afdb8d679..e75f2e8b4 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,27 +1,41 @@ -# 09 — Roadmap: from alpha candidate to a 9.5/10 port +# 09 — Roadmap: beta1 → RC → 9.5/10 port -Everything below is verified against branch tip `a08fbfec`, with hardware results -recorded through 2026-07-17. +Hardware results recorded through 2026-07-20 (beta-prep test walkthrough). +Branch tip note may lag; treat the matrix in 08/10 as source of truth for status. Ordered by impact within each section. -## Beta entry gates +## beta1 vs RC gates -Beta does not require the full 9.5/10 target at the end of this document, but it should -not knowingly ship model-breaking core failures or untested recovery/reversibility -paths. Close these gates, or explicitly descope the affected feature/model: +beta1 is allowed to ship with documented known issues and incomplete RC polish. +RC must clear the major defects below (or explicitly re-descope in writing). +### beta1 (ship now) +| Item | Status for beta1 | +|---|---| +| FBNeo missing-BIOS hard-lock | **Known issue** — happy path with BIOS OK; most users fine. Call out in release notes. Fix is **RC**, not beta1-blocking | +| MD Auto CPU | ✅ fixed | +| Screenshots, multi-panel UI scaling, headphone hardware route | ✅ | +| Closed-lid POWER, charging→light-sleep | ✅ accepted policy | +| Clean uninstall | ➖ not a test row — delete `dmenu.bin` is design-guaranteed reverse install | +| SIGUSR1 shutdown, dirty-card fsck | ⬜ untested OK for beta1 → **RC polish** | +| BT audio lifecycle remainder | ⚠ blocked by device BT scan; earlier AirPods playback pass stands | +| Overnight drain | ⚠ partial first data point; voltage/stock re-test is RC polish | +| Long-tail EXTRAS cores | ⬜ partial smoke only (see 10) | +| MU-style theme | ➖ install prerequisite only | + +### RC (must close before release candidate) | Gate | Exit condition | |---|---| -| RG34XXSP core correctness | FBNeo missing-BIOS failure returns control cleanly; MD Auto CPU has a fix or a tested safe default; remaining shipped core families receive a basic launch/audio/input/menu/exit/save smoke pass. PS1 must remain in the release-candidate smoke pass because its former failure was a stale/corrupted core artifact | -| Bluetooth audio lifecycle | AirPods reconnect without manual D-Bus commands; menu/game and game/game transitions work; speaker restores on disconnect; five suspend/resume cycles pass; the Settings 44100/48000 choice changes and persists | -| Power confidence | Battery percentage is compared with stock, overnight suspend drain is measured, and the closed-lid POWER plus charging/light-sleep behaviors are fixed or accepted as documented policy | -| Reversibility and recovery | Clean uninstall, SIGUSR1 shutdown, and dirty-card fsck recovery pass; muOS/stockmod behavior has an explicit warn-versus-stop decision | -| Release-candidate smoke | Screenshots and resolution-specific overlays pass; headphone-jack behavior is determined; clean H700 and tg5040 builds plus the Jammy `settings.elf` ldd check pass on the release candidate | +| FBNeo error recovery | Missing-BIOS (and similar core hard-fail) returns control to MinArch menu/exit without power cycle; regression test preserved | +| Robustness polish | SIGUSR1 from `launcher.sh stop` end-to-end; dirty-card `fsck.fat` recovery smoke | +| Prefer | BT lifecycle revalidation when device scan works; overnight drain voltage vs stock; more EXTRAS core smoke; PS1 stays in RC smoke (stale-core regression) | +| Build | clean H700 + tg5040 builds + Jammy `settings.elf` ldd check on the candidate | -Not beta gates unless scope changes: RGcubexx hardware availability, HDMI boot-with-cable -and odd-EDID/model expansion, cross-platform controller normalization, the inherited -controller-only sample-rate detector, Pak Store/OTA, per-panel display calibration, and -a dedicated H700 toolchain image. +Not beta1 or RC gates unless scope changes: full RGcubexx matrix walk, H700-sized +overlay content packs, HDMI boot/EDID/model expansion, cross-platform controller +normalization, the inherited controller-only sample-rate detector, Pak Store/OTA, +per-panel display calibration, software HP jack icon, and a dedicated H700 toolchain +image. ## P0 — Correctness / robustness @@ -35,19 +49,24 @@ a dedicated H700 toolchain image. `PWR_enterSleep`; plus wifi/bt restart moved to `after_async &`). Unblocks the overnight-drain test. RG40XXV re-test, in-game sleep/resume, and power-off → power-on → running-game resume have since been verified too. Two RG34XXSP edge - cases remain: POWER currently wakes the unit while its lid is closed, and charging - intentionally keeps the shared power path in light sleep instead of deep suspend. -2. **Decide muOS/stockmod coexistence policy** (`boot/boot.sh` — currently shows - "STOCK TARGET REQUIRED" splash but *continues booting*; launch.sh drops - stockmod-warning.txt). Either hard-fail with the splash held on screen, or - document why continuing is safe. A user with stockmod installed currently gets a - confusing half-boot. -3. **Run the remaining robustness gauntlet** (08 matrix ⬜ rows): clean uninstall, - SIGUSR1 quit, dirty-SD fsck recovery, battery accuracy, screenshots, and overnight - drain. Box art, RetroAchievements, Recently Played, and the game switcher are - tested-good on RG34XXSP. - Pak Store and OTA update are explicitly excluded from the alpha scope; testing is - not applicable and they are not alpha release gates. + cases: POWER-while-closed is accepted policy (wakes light sleep only; deep sleep + re-sleeps if lid still closed). Charging→light-sleep-only is accepted shared product + policy for beta (2026-07-20). +2. **~~Decide muOS/stockmod coexistence policy~~ Closed (2026-07-20)** — reframed. + The practical break is the stock **MU style** theme (not a separate product + install): it makes `dmenu_ln` skip `/mnt/mmc/dmenu.bin`, so NextUI never starts + and no in-shim warning can appear. Documented install prerequisite: use **old + style** theme (`skeleton/BASE/README.txt`). The boot-shim “STOCK TARGET + REQUIRED” path is effectively unreachable for the same override; leave it as + defensive code, no further policy work for beta. +3. **Robustness gauntlet — scoped 2026-07-20.** Clean uninstall **removed** from the + test matrix (delete `dmenu.bin` is sufficient by design). SIGUSR1 quit and + dirty-SD `fsck` recovery are **RC polish** (untested OK for beta1). Overnight + drain is partial (RG34XXSP ~7% over 8.5 h; voltage/stock re-test = RC polish). + Battery % vs stock passes on RG34XXSP; icon-vs-Battery-pak desync after long sleep + is post-RC hardening. Screenshots, box art, RetroAchievements, Recently Played, + and the game switcher are tested-good on RG34XXSP. Pak Store and OTA remain out + of scope. 4. **~~Document the `digital volume` inversion~~ Done (2026-07-09)** — `100 - val` is intentional because the control is an attenuator. Volume UI and levels are tested-good on RG40XXV and RG34XXSP from mute through 100% (05). @@ -57,12 +76,12 @@ a dedicated H700 toolchain image. 5. **RG34XXSP polish and runtime fixes** — the 720×480 UI, lid sleep/wake, manual governor changes, displaycal persistence, RetroAchievements, Files, Recently Played, game switcher, and the primary 8/16-bit systems are hardware-tested. - Remaining: fix POWER waking through a closed lid; decide whether charging should - continue to suppress deep sleep; fix the FBNeo missing-BIOS lockup and MD - auto-governor/render-setting - sensitivity; decide whether per-Emu `default-rg34xx.cfg` files are needed. Track - core coverage in [10](10-core-game-matrix.md). (~~720×480 Bootlogo previews~~ - fixed 2026-07-13 — see #13a.) + Remaining for **RC**: fix FBNeo missing-BIOS hard-lock (happy path OK — known + issue for beta1). Decide whether per-Emu `default-rg34xx.cfg` files are needed. + Track core coverage in [10](10-core-game-matrix.md). (~~MD Auto CPU~~ fixed + 2026-07-20. ~~POWER through closed lid~~ and ~~charging suppresses deep sleep~~ + accepted policy 2026-07-20. ~~720×480 Bootlogo previews~~ fixed 2026-07-13 — + see #13a.) 6. **~~RG28XX rotation validation~~ Done (2026-07-12)** — hardware answered both questions: the malifbdev-rot driver *does* rotate the GL path (SDL_ROTATION=1 suffices end-to-end), and the two layers *did* double-rotate — the app-side @@ -76,7 +95,8 @@ a dedicated H700 toolchain image. bitmap question was solved: the glitches were the missing 64-bit libpng bundle, not main's alpha changes — 04.) Remaining: **confirm rendering stays clean on device with the rebased build**: the game switcher and box art are clean at - 720×480. Screenshots and resolution-specific overlays remain to be checked. + 720×480. Screenshots pass on RG34XXSP; multi-panel UI scaling passes (incl. + community 720×720). Panel-matched overlay assets remain unshipped content. 8. **Audit Brick-era feature assumptions in shared UI** — NextUI only ever targeted the Brick / Smart Pro, and several UI pieces hardcode that hardware. Known cases on RG XX: @@ -105,44 +125,43 @@ a dedicated H700 toolchain image. nit: syncsettings still "restores" the no-op enhance values on resume. Worth a systematic sweep: grep settings.cpp / paks for capability flags that default to "present" and decide each for h700. -9. **BT audio: finish stock-first validation.** Clean RG40XXV stock provides - BlueALSA 4.2.0, ALSA plugins/configuration, and D-Bus policy. Daemon startup, - `org.bluealsa`, and SBC source endpoint registration pass; H700 now starts the - stock daemon and exposes the sampling-rate setting. No BlueALSA, ALSA plugin, SBC, - or BlueZ component is bundled. AirPods 4 ANC SBC playback now passes on RG40XXV; - the confirmed silence blockers were an unsupported `delay 0` ALSA option and zero - BlueZ transport volume. Complete automatic reconnect, game-switch, and - suspend/resume testing. The exposed maximum-sampling-rate option intentionally - matches tg5040: 48000 is the default and avoids needless resampling, while 44100 is - only a compatibility escape hatch. AirPods negotiated both rates, so this setting - was not the fix. Verify its Settings UI/persistence, but keep the inherited - any-ACL/controller-only detection issue as a later cross-platform cleanup. Raw - external-controller button normalization is shared with tg5040/tg5050 and belongs - in a separate cross-platform change. +9. **BT audio: finish stock-first validation (partial / blocked).** Clean RG40XXV + stock provides BlueALSA 4.2.0, ALSA plugins/configuration, and D-Bus policy. + Daemon startup, `org.bluealsa`, and SBC source endpoint registration pass; H700 + starts the stock daemon and exposes the sampling-rate setting. No BlueALSA, ALSA + plugin, SBC, or BlueZ component is bundled. AirPods 4 ANC SBC playback passed on + RG40XXV earlier (silence blockers: unsupported `delay 0` + zero BlueZ transport + volume). **Auto reconnect was not tested.** As of 2026-07-20 BT powers on but + scans nothing / cannot pair on stock and BaseOS — treat as device/firmware until + proven otherwise; do not file as NextUI-only. When discovery works again: complete + reconnect, game-switch, and suspend/resume. Settings 44100/48000 is a compatibility + escape hatch (AirPods negotiated both). Keep controller-only sample-rate detection + and raw controller button normalization as later cross-platform cleanups. 10. **480p UI polish pass** (04) — verdict from real use on RG40XXV and RG34XXSP: **good for alpha**. The 720×480 Home UI, Battery, Game Tracker, Input, Clock, Settings, on-screen keyboard, Files, and in-game menus all work well. Box art is - clean. Screenshots and resolution-specific overlays remain untested. Keep Files + clean. Screenshots pass on RG34XXSP; multi-panel UI scaling passes + (640×480 / 720×480 / 480×640 local; 720×720 community). Panel-matched + overlay assets are not shipped for H700 (only Brick 1024×768 GBA PNGs). Keep Files at PPU 2 for now; PPU 3 may be evaluated later for the RG34XX/SP panel density. -11. **Headphone jack detection** (05) — investigate how stock switches speaker/HP on - a live device; may be hardware auto-mute (= nothing to do). Cheap to answer, - closes a matrix row either way. -12. **Investigate RG34XXSP auto CPU scaling** — manual in-game governor changes work, - but MD can slow down when Auto settles near 480 MHz with some shader/render - combinations. Stock shader + 3× scale + linear interpolation raised Auto to about - 720 MHz and ran smoothly; Powersave and Performance selected about 1100/1500 MHz - and were also smooth. Determine whether this is workload detection, a core/render - interaction, or an Auto policy bug. There are no general frame-pacing, tearing, - input-lag, or audio concerns from tested gameplay. +11. **~~Headphone jack detection~~ Closed for beta (2026-07-20)** (05) — hardware + auto-mutes speaker and routes to headphones without NextUI. Software + `SetJack` / HP icon / dual volume remains unwired on h700 (Brick has keymon + jack monitoring; h700 does not). Treat HP-icon polish as optional post-beta. +12. **~~Investigate RG34XXSP auto CPU scaling~~ Fixed (2026-07-20)** — MD no longer + slows down under Auto; former 480 MHz stall with some render settings is resolved + (user-verified). Manual powersave/performance were already fine. No general + frame-pacing, tearing, input-lag, or audio concerns from tested gameplay. 12a. **Build out the core/game matrix** — the initial RG34XXSP results are now in - [10](10-core-game-matrix.md). GB/GBC/GBA/FC/SFC and PS1 pass; the former PS1 + [10](10-core-game-matrix.md). GB/GBC/GBA/FC/SFC, MD, and PS1 pass; the former PS1 launch failures were a stale/corrupted core artifact fixed by a clean rebuild. - FBNeo needs a valid BIOS retest and must not trap MinArch when - BIOS is missing; MD needs the Auto-scaling investigation above. Expand coverage - across the remaining shipped systems and at least one additional H700 model. -13. Later: RGcubexx bring-up (720×720, wired but no device is available locally; - external validation is an explicit purpose of the alpha), HDMI out (done, + FBNeo with BIOS is OK; missing-BIOS hard-lock is a **beta1 known issue** and an + **RC must-fix**. A2600, MGBA, and SMS also pass (2026-07-20). Expand coverage + across remaining EXTRAS systems when practical (not beta1-blocking). +13. Later: RGcubexx bring-up (720×720 wired; general UI scaling already + community-validated — expand to a fuller functional/core walk when a device is + available), optional H700-sized overlay content packs, HDMI out (done, user-validated on RG40XXV incl. in-game hotplug both directions; remaining: other models, boot-with-cable, odd EDIDs — 04), RG35XX-family variants (displaycal presets @@ -163,8 +182,9 @@ a dedicated H700 toolchain image. (2026-07-13, verified on-device — 04) and the pak now has load/path diagnostics, an on-screen empty state, and an empty-list apply guard. RG28XX 480×640 apply is user-verified (logo upright at boot) and previews are now rotated to match boot - orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`, 04). Remaining: SP backup/restore - exercise, and the 720×720 path (no cube device available). + orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`, 04). SP backup/restore pass + (user-verified 2026-07-20). Remaining: the 720×720 path (no local cube device; + community UI scaling only so far). ## P2 — Cleanup / refactors / simplifications diff --git a/docs/h700-port/10-core-game-matrix.md b/docs/h700-port/10-core-game-matrix.md index 4cd8c9407..9bf508cb5 100644 --- a/docs/h700-port/10-core-game-matrix.md +++ b/docs/h700-port/10-core-game-matrix.md @@ -19,7 +19,7 @@ repeated for that system. 5. Record the exact game, format, shader, scale, interpolation, CPU profile, and BIOS state for every failure. -## RG34XXSP results (updated 2026-07-17) +## RG34XXSP results (updated 2026-07-20) | System | Core | Status | Evidence / issue | |---|---|---|---| @@ -28,11 +28,11 @@ repeated for that system. | GBA | gpSP | ✅ | Launch and gameplay perfect | | FC | FCEUmm | ✅ | Launch and gameplay perfect | | SFC | Snes9x | ✅ | Launch and gameplay perfect | -| MD | PicoDrive | ⚠️ | Launches, but some shader/scaling combinations leave Auto CPU near 480 MHz and cause slowdown. Stock shader + 3× scale + linear interpolation runs smoothly around 720 MHz; Powersave (~1.1 GHz observed) and Performance (~1.5 GHz) are smooth | -| FBN | FBNeo | ⚠️ | Required BIOS was absent, so game execution is not validated. After the BIOS error, MinArch would not open its menu or exit; volume and brightness shortcuts still responded | +| MD | PicoDrive | ✅ | Launch and gameplay good. Former Auto CPU slowdown (some shader/scale combos stuck near 480 MHz) is fixed — user-verified 2026-07-20 | +| FBN | FBNeo | ⚠️ | With required BIOS: launch and play OK (2026-07-20). Without BIOS: still hard-locks MinArch (no menu/exit; device effectively stuck until power cycle). **beta1:** known issue (happy path). **RC gate:** fix error recovery | | PS | PCSX-ReARMed | ✅ | Launch and gameplay pass after a clean core rebuild. The earlier crashes across 2–3 titles were caused by a stale/corrupted core, not a model-specific runtime defect | | 32X | PicoDrive | ⬜ | — | -| A2600 | Stella 2014 | ⬜ | — | +| A2600 | Stella 2014 | ✅ | Launch and gameplay pass (2026-07-20) | | A5200 | a5200 | ⬜ | — | | A7800 | ProSystem | ⬜ | — | | C128 | VICE x128 | ⬜ | — | @@ -42,7 +42,7 @@ repeated for that system. | FDS | FCEUmm | ⬜ | — | | GG | PicoDrive | ⬜ | — | | LYNX | Handy | ⬜ | — | -| MGBA | mGBA | ⬜ | Alternate GBA core | +| MGBA | mGBA | ✅ | Alternate GBA core — launch and gameplay pass (2026-07-20) | | MSX | blueMSX | ⬜ | — | | NGP | RACE | ⬜ | — | | NGPC | RACE | ⬜ | — | @@ -56,18 +56,18 @@ repeated for that system. | SEGACD | PicoDrive | ⬜ | — | | SG1000 | PicoDrive | ⬜ | — | | SGB | mGBA | ⬜ | — | -| SMS | PicoDrive | ⬜ | — | +| SMS | PicoDrive | ✅ | Launch and gameplay pass (2026-07-20) | | SUPA | Supafaust | ⬜ | Alternate SNES core | | VB | Mednafen VB | ⬜ | — | | VIC | VICE xvic | ⬜ | — | ## Open investigations -1. **FBNeo error recovery:** retest with the required BIOS, then separately reproduce - the missing-BIOS path and determine why MinArch still processes system shortcuts but - not MENU/exit. -2. **MD Auto CPU behavior:** reproduce with exact shader/scale/interpolation combinations - while logging `scaling_cur_freq`, governor, min/max frequency, frame time, and audio - underruns. Manual governor switching itself is working. +1. **FBNeo error recovery (RC must-fix; beta1 known issue):** with BIOS = pass. + Missing-BIOS still hard-locks MinArch completely. Determine why the core/error + path never returns control (menu/exit dead) and fix recovery without requiring a + power cycle. Ship beta1 with release-note callout; do not tag RC until fixed. +2. **~~MD Auto CPU behavior~~ Fixed (2026-07-20):** former slowdown when Auto settled + near 480 MHz with some render settings is resolved; MD is green in the matrix. 3. Expand the table across RG40XXV, RG28XX, RGcubexx, and other RG XX variants during alpha testing, recording only device-specific differences once a core is known-good. diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index ed2ed61dd..1c09cd842 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,24 +4,27 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Status (2026-07-17): ready for an alpha release, with documented RG34XXSP issues.** +**Status (2026-07-20): ready for beta1 with documented known issues; RC gates listed +in [09](09-roadmap.md).** RG40XXV has broad hardware coverage. RG34XXSP now passes the complete 720×480 UI sweep, box art, Files, Input, Recently Played, game switcher, RetroAchievements, displaycal persistence, manual governor changes, lid sleep/wake, Bootlogo, and -GB/GBC/GBA/FC/SFC. RG28XX is now user-tested: driver-level rotation validated, +GB/GBC/GBA/FC/SFC (plus A2600/MGBA/SMS and MD/PS). RG28XX is now user-tested: driver-level rotation validated, minarch Aspect/Fullscreen scaling fixed (a double-rotation bug), and Bootlogo apply + rotated previews working. The apparent RG34XXSP PS1 launch regression was a stale/corrupted core artifact and a -clean rebuild fixed it. Open RG34XXSP issues are an FBNeo missing-BIOS lockup, MD Auto -CPU scaling sensitivity, POWER waking through a closed -lid, and charging remaining in light sleep by current shared policy. Screenshots, -resolution-specific overlays, battery accuracy/overnight drain, recovery paths, and -RGcubexx hardware coverage remain untested. The cube is intentionally an -external alpha-validation target. BT audio now uses the stock BlueALSA stack without -bundling a second userspace implementation and is under hardware validation; -Pak Store and OTA update are explicitly outside this alpha -scope. Full status is in [08](08-testing-status.md), priorities in -[09](09-roadmap.md), and emulator coverage in [10](10-core-game-matrix.md). +clean rebuild fixed it. MD Auto CPU is fixed. FBNeo plays OK with BIOS; missing-BIOS +hard-lock is a **beta1 known issue** and an **RC must-fix**. Closed-lid POWER and +charging→light-sleep-only are accepted policies. Screenshots and multi-panel UI +scaling pass. Battery % vs stock passes (icon-vs-Battery-pak desync after long sleep +is follow-up). Overnight drain partial (~7% / 8.5 h; voltage/stock re-test = RC +polish). Clean uninstall removed from the test matrix (delete `dmenu.bin` is +design-guaranteed). SIGUSR1 and dirty-card recovery are **RC polish** (untested OK +for beta1). Panel-matched overlay assets not shipped for H700 sizes. Full RGcubexx +matrix remains external. BT audio used stock BlueALSA with an earlier AirPods pass; +lifecycle revalidation blocked by device-wide BT scan failure. Pak Store and OTA +out of scope. Full status: [08](08-testing-status.md), [09](09-roadmap.md), +[10](10-core-game-matrix.md). These docs began as the implementation plan and were restructured after the implementation landed (branch `h700`) into reference documentation: @@ -62,12 +65,12 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Platform | one `h700`, `DEVICE` env per device | ✅ as planned | | Arch / toolchain | 64-bit, reuse tg5040 image | ✅ as planned — with real costs; pitfalls catalogued in 01 | | SDL2 | in-tree malifbdev-rot build | ✅ as planned, pinned + config-asserted | -| Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; 720×480 UI and box art pass, resolution-specific overlays untested | +| Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; multi-panel UI scaling + box art pass; panel-matched overlay assets not shipped | | **Input** | SDL joystick route | **Deviation:** raw evdev primary (SDL js enumeration unreliable on stock image); SDL kept for BT pads (03) | | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | -| **BT audio** | build + ship bluealsa | **Deviation:** use stock BlueALSA 4.2.0, ALSA plugins, SBC, and BlueZ without bundling replacements; AirPods 4 ANC SBC playback passes on RG40XXV after an H700-only ALSA-option omission and native-volume initialization, with automatic reconnect/suspend validation pending (05/07) | -| Sleep | `echo mem` + tg5040-style wrapper | ⚠ repeated sleep/wake, in-game resume, and power-off auto-resume pass; charging intentionally stays in light sleep (06) | -| Lid | hallkey → PLAT lid API | ⚠ close/open works, but POWER can wake RG34XXSP while the lid remains closed | +| **BT audio** | build + ship bluealsa | **Deviation:** use stock BlueALSA 4.2.0, ALSA plugins, SBC, and BlueZ without bundling replacements; AirPods 4 ANC SBC playback passed on RG40XXV after H700-only ALSA-option omission + native-volume init; auto reconnect untested; revalidation blocked by device-wide BT scan/pair failure on stock and BaseOS (05/07) | +| Sleep | `echo mem` + tg5040-style wrapper | ✅ repeated sleep/wake, in-game resume, and power-off auto-resume pass; charging→light-sleep-only accepted policy (06) | +| Lid | hallkey → PLAT lid API | ✅ close/open works; POWER-while-closed accepted policy (light sleep only; deep re-sleeps if lid closed) | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | | Rumble / LEDs | moto sysfs; MAX_LIGHTS 0 | ✅ as planned; rumble tested-good | | Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | @@ -78,20 +81,22 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively ## Top open risks -1. **RG34XXSP runtime issues** — FBNeo can trap MinArch after a missing-BIOS failure, - MD Auto CPU scaling is render-setting-sensitive, and POWER - can wake through the closed lid. (Bootlogo previews at 720×480: fixed 2026-07-13.) -2. **Partially tested robustness matrix** — clean uninstall, dirty-SD recovery, - SIGUSR1 shutdown, battery accuracy, screenshots, and overnight drain need runs. +1. **FBNeo missing-BIOS hard-lock** — major; **RC must-fix**. beta1 ships as known + issue (happy path with BIOS OK). MD Auto CPU fixed. Closed-lid POWER and + charging→light-sleep accepted policy. +2. **RC polish (untested OK for beta1)** — SIGUSR1 shutdown, dirty-SD recovery; + overnight drain voltage/stock re-test. Clean uninstall not a test row (delete + `dmenu.bin`). 3. **Partially tested device matrix** — RG40XXV, RG34XXSP, and RG28XX are working - (RG28XX rotation/scaling validated 2026-07-12); RGcubexx is an external alpha - target. -4. **Stock-OS coupling** — model detection, hijack point, and muOS interplay all read - Anbernic's binaries/scripts; a firmware update can move them (guardrails in 08). + (RG28XX rotation/scaling validated 2026-07-12); RGcubexx has community UI-scaling + validation, with full matrix still external. +4. **Stock-OS coupling** — model detection and the `dmenu.bin` hijack read Anbernic + binaries/scripts; a firmware update can move them. Stock **MU style** themes + bypass the hijack entirely (install requires **old style** — 02/08). 5. **Shared-UI capability regressions** — the Input tester is device-aware, dead display controls are hidden/verified, and Fn-switch settings are now gated off. Keep the systematic capability sweep as shared UI continues to evolve. (Formerly listed here: the alpha-blit unknown — resolved; it was the missing 64-bit libpng. The branch includes main's alpha blending; game switcher/overlay - rendering is clean, with screenshots and resolution-specific overlays still to - check, 04.) + rendering is clean; screenshots and multi-panel UI scaling pass + (incl. community 720×720); panel-matched overlay assets not shipped, 04.) From 2dfded6cfc1dc4554f53a8be83c07bfc4ed424f9 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 19:54:29 +0200 Subject: [PATCH 51/76] fix(tg5040): skip BlueZ upgrade on h700 Export the H700 platform and model during package installation. Have the tg5040 BlueZ post-install exit immediately when invoked from H700, before probing TrimUI state or modifying the root filesystem. Leave the existing tg5040 and tg5050 installer behavior unchanged. --- workspace/h700/install/boot.sh | 2 ++ workspace/tg5040/btmanager/support/upgrade_bluez.sh | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/workspace/h700/install/boot.sh b/workspace/h700/install/boot.sh index 3ca45ef07..96e35ea22 100755 --- a/workspace/h700/install/boot.sh +++ b/workspace/h700/install/boot.sh @@ -26,6 +26,8 @@ ensure_compat_path "$REAL_SDCARD_PATH" "$SDCARD_PATH" export LD_LIBRARY_PATH="$SYSTEM_PATH/$PLATFORM/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" export PATH="$SYSTEM_PATH/$PLATFORM/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" +export PLATFORM +export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" cd "$SCRIPT_DIR/$PLATFORM" || exit 1 diff --git a/workspace/tg5040/btmanager/support/upgrade_bluez.sh b/workspace/tg5040/btmanager/support/upgrade_bluez.sh index dc8d38b8f..b00349252 100755 --- a/workspace/tg5040/btmanager/support/upgrade_bluez.sh +++ b/workspace/tg5040/btmanager/support/upgrade_bluez.sh @@ -1,5 +1,10 @@ #! /bin/sh +if [ "$PLATFORM" = "h700" ]; then + echo "Skipping tg5040 BlueZ update on h700" + exit 0 +fi + TRIMUI_MODEL=`strings /usr/trimui/bin/MainUI | grep ^Trimui` if [ "$TRIMUI_MODEL" = "Trimui Smart Pro S" ]; then return 0 From 4b626b969ff1cca90d51717855a551d569be3dce Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 22:02:35 +0200 Subject: [PATCH 52/76] docs(h700): reorganize release and testing guidance Make the testing status the canonical evidence ledger with stable test IDs and device-specific results, and make the roadmap the owner of Alpha, Beta, RC, and Release gates. Convert the subsystem chapters into maintainer knowledge-base references, document representative-family testing, record HDMI and Bluetooth audio results, and reconcile implementation claims against the current build, input, display, audio, power, and connectivity code. Mark the unexercised crash-loop cutoff as RC qualification work and align the platform input comment with the current SDL classification and evdev design. --- docs/h700-port/00-device-facts.md | 58 ++-- docs/h700-port/01-toolchain-and-build.md | 35 ++- docs/h700-port/02-boot-and-installer.md | 40 ++- docs/h700-port/03-platform-layer.md | 77 +++-- docs/h700-port/04-video-display.md | 109 +++---- docs/h700-port/05-audio.md | 66 +++-- docs/h700-port/06-power-sleep-battery.md | 76 ++--- docs/h700-port/07-wifi-bluetooth.md | 75 +++-- docs/h700-port/08-testing-status.md | 341 +++++++++++----------- docs/h700-port/09-roadmap.md | 346 +++++++++-------------- docs/h700-port/10-core-game-matrix.md | 21 +- docs/h700-port/README.md | 100 +++---- workspace/h700/platform/platform.c | 6 +- 13 files changed, 651 insertions(+), 699 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 8034bc9ee..a55687cd8 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -1,6 +1,8 @@ # 00 — Device & OS Facts -Ground truth for the H700 platform. Everything here was verified live on hardware +Ground truth and probe notebook for the H700 platform. Current pass/fail results live +in [08](08-testing-status.md); release decisions live in [09](09-roadmap.md). +Everything here was verified live on hardware over SSH (probed 2026-07-08, corrections folded in from the implementation/review cycle through 2026-07-10) or recovered from git history. Re-run the probes after any Anbernic stock-firmware update — paths have historically been stable, but the @@ -11,9 +13,9 @@ Anbernic stock-firmware update — paths have historically been stable, but the | Device | Evidence | Role | |---|---|---| | TrimUI Brick (TG5040, A133P) | Probed live | Reference — NextUI runs perfectly | -| Anbernic RG40XXV (H700) | Probed live | Port target #1 (was running stockmod) — **primary tested device** | -| Anbernic RG34XXSP (H700) | User-tested | Port target #2 (clamshell, lid sensor) — strong 720×480/UI parity; core and lid edge cases tracked in 08 | -| Anbernic RG28XX (H700) | User-tested | Port target #3 (rotated 480×640 panel) — rotation, game scaling, and bootlogo validated 2026-07-12 | +| Anbernic RG40XXV (H700) | Probed live | 640×480, one stick, HDMI; primary probe device | +| Anbernic RG34XXSP (H700) | User-tested | 720×480, dual sticks, clamshell lid sensor | +| Anbernic RG28XX (H700) | User-tested | Rotated 480×640 panel | ## RG40XXV (H700) — probed live @@ -63,8 +65,9 @@ Anbernic stock-firmware update — paths have historically been stable, but the 0.9 API and clamped the codec to 192 kHz while SDL believed 32.768 kHz → sliced/glitchy audio. Fix: build SDL2 with `--enable-alsa-shared` so it **dlopens** the device libasound (dlsym picks the default/new-API symbols). See 05. -- Headphone jack: `snd_soc_sunxi_component_jack/parameters/jack_state` existed on the old - port and was "always 0"; **still unverified on 2026 firmware** — jack detection is not wired. +- Headphone jack: the codec/hardware auto-mutes the speaker and routes audio without + NextUI. The old `snd_soc_sunxi_component_jack/parameters/jack_state` software path + was historically always 0 and remains unused; see 05. ### Input - `event0` — `axp2202-pek` (power button, PMIC). KEY_POWER = 116. @@ -72,13 +75,15 @@ Anbernic stock-firmware update — paths have historically been stable, but the - KEY bits: {1, 114, 115, 304–316, 354} — **no d-pad keycodes**; the d-pad is delivered as ABS_HAT0X/Y (the old port's UP 103 / DOWN 108 / LEFT 105 / RIGHT 106 codes do **not** appear on current firmware) - - ABS bits `0x3003c` = ABS_Z, ABS_RX, ABS_RY, ABS_RZ (analog sticks, raw 0..4096, - scale ×32767/4096) + ABS_HAT0X/Y (d-pad) + - ABS bits `0x3003c` = ABS_Z, ABS_RX, ABS_RY, ABS_RZ (analog sticks; H700 scales + the signed values by ×32767/4096) + ABS_HAT0X/Y (d-pad) - FF bits present (input-FF rumble is theoretically available; port uses `moto` sysfs instead) - `event2` — `dierct-keys-polled` (volume keys: PLUS 115, MINUS 114) -- `/dev/input/js0` exists; **SDL joystick enumeration of the built-in pad is unreliable on - the stock image** (udev interplay) — the shipped port reads evdev directly for built-in - controls and keeps SDL joystick (with `SDL_JOYSTICK_DISABLE_UDEV=1`) for BT controllers. +- `/dev/input/js0` exists. The in-tree SDL patch restores no-udev classification of + the built-in pad, but the H700 platform deliberately skips it as an SDL joystick: + raw evdev already supplies those events, and SDL's built-in ordering does not match + the external-pad `JOY_*` mapping. SDL joystick input remains enabled for external + controllers (`SDL_JOYSTICK_DISABLE_UDEV=1`). - Verified evdev button codes (event1): A 304, B 305, Y 306, X 307, L1 308, R1 309, SELECT 310, START 311, MENU 312, L3 313, L2 314, R2 315, R3 316, PLUS 115, MINUS 114. @@ -90,8 +95,11 @@ Anbernic stock-firmware update — paths have historically been stable, but the BTN_MENU** — doing so extends every tap past the 250 ms long-press threshold (tap misread as hold → brightness overlay instead of shortcuts). The extra KEY_ESC (code 1) capability bit has not been observed to fire. -- SDL joystick indices for the built-in pad (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 - SELECT=6 START=7 MENU=8, L3=9 L2=10 R2=11 R3=12, MINUS=15 PLUS=16; axes LX=0 LY=1 RX=2 RY=3. +- After the no-udev classification patch, SDL orders the built-in pad by evdev key + code: ESC/VOL−/VOL+ occupy indices 0–2 and the gamepad cluster starts at A=3 + through MENU=11. This ordering is diagnostic only; the runtime skips this SDL + device and reads it through evdev. The `JOY_*` constants in `platform.h` describe + the expected external-pad mapping, not the built-in pad. - `evtest` is available on the device for mapping discovery. ### Power / battery / sleep @@ -99,9 +107,9 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `echo mem` suspend works; wake source is the **power button** (AXP2202 PEK). **RTC alarm wake does NOT fire** — no timed wake; don't build features on it. The shipped sleep/wake path is reliable in repeated RG40XXV/RG34XXSP testing, - including in-game resume and power-off auto-resume. RG34XXSP accepted policy: POWER - can wake light sleep while the lid is closed; deep sleep re-sleeps if the lid is - still closed (06). Charging intentionally prevents deep sleep in shared code. + including in-game resume and power-off auto-resume. On RG34XXSP, POWER can wake + light sleep while the lid is closed; deep sleep re-sleeps if the lid remains closed + (06). Charging intentionally prevents deep sleep in shared code. - PMIC: **AXP2202** — `/sys/class/power_supply/axp2202-battery/` and `axp2202-usb/` - Battery: `capacity`, `status`, `voltage_now`, `temp`, `time_to_empty_now`, `time_to_full_now`, `charge_counter`, `health` @@ -113,7 +121,7 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — polarity verified (`1` = open); lid close sleeps and lid open wakes screen-off. Deep suspend still requires power. POWER can wake light sleep while closed; deep sleep re-sleeps if - lid still closed — accepted documented policy (06). + the lid remains closed (06). - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` - `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) @@ -221,15 +229,7 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf (SDL_Renderer compositing, 32-bit, pre-shader APIs) is obsolete. tg5040 was the code clone base. -## Facts still unverified (need hardware/testing) -1. ~~Why RG34XXSP power-key release wakes light sleep while `hallkey=0`~~ Accepted - as beta policy (2026-07-20): light sleep can wake on POWER with lid closed; deep - sleep re-sleeps if lid still closed. Optional later hardening (06). -2. ~~RG28XX fb0 reporting `480x640` on current firmware, and the SDL rotation path - end-to-end.~~ Resolved 2026-07-12: SDL_ROTATION=1 rotates the whole GL frame at - the driver; app space is 640×480 landscape (`should_rotate` must stay 0 — 04). -3. ~~Headphone jack detection on 2026 firmware~~ Resolved for beta: hardware - auto-mutes speaker and routes to HP without NextUI. Software `SetJack`/icon - path remains unwired (optional polish — 05). -4. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. -5. Exact stock `RGXX_MODEL` strings for the RG35XX family and RG40XXH. +## Known hardware unknowns + +1. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. +2. Exact stock `RGXX_MODEL` strings for the RG35XX family and RG40XXH. diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 496639b3d..b41d722d8 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -1,9 +1,15 @@ # 01 — Toolchain & Build System +Build architecture, dependency decisions, and cross-toolchain lessons. Test results +live in [08](08-testing-status.md); promotion requirements live in +[09](09-roadmap.md). + ## How the h700 build works -`make PLATFORM=h700 all` builds like any other platform, with one twist: **there is no -dedicated h700 toolchain image — the build runs inside the existing +The CI-supported single-platform staging sequence is `make setup` followed by +`make h700`. (`make all` builds every configured platform; adding `PLATFORM=h700` +does not narrow it.) H700 has one build-system twist: **there is no dedicated h700 +toolchain image — the build runs inside the existing `ghcr.io/loveretro/tg5040-toolchain` image.** Same arch (aarch64/cortex-a53), same `-mcpu=cortex-a53` tuning, and the image's glibc (2.33) is older than the target's (Ubuntu 22.04, glibc 2.35) — forward-compatible by construction. This was empirically @@ -11,7 +17,8 @@ validated before any code was written (a tg5040-built displaycal.elf ran unmodif RG40XXV stockmod and an RG34XXSP running Knulli) and has held up in production. Integration points: -- Root `makefile`: `PLATFORMS = tg5050 tg5040 h700`; `make shell` passes +- Root `makefile`: `PLATFORMS = tg5050 tg5040 h700`; the `make h700` dispatcher runs + the full `common` staging target for H700, while `make shell` passes `PLATFORM=$(PLATFORM)` through (and `makefile.toolchain` injects `-e PLATFORM -e UNION_PLATFORM` into the container). - `makefile.toolchain`: maps h700 → the tg5040 image. @@ -105,26 +112,30 @@ future stock-OS port: must be added to those filter lists or minarch silently builds featureless (or not at all). -## Dedicated `h700-toolchain` image: still deferred, deliberately +## Decision: reuse the tg5040 image instead of a dedicated H700 image The reuse costs above are all *solved*, and the SDL2 build is pinned and cached. A thin image `FROM tg5040-toolchain` pre-baking SDL2 + a jammy-matched libasound would remove pitfall classes 1–3 structurally and speed CI — worth doing if the platform accumulates more external deps. Bluetooth audio uses the stock H700 BlueALSA daemon, ALSA plugins, -SBC runtime, and BlueZ without copying them from the shared toolchain (see -05/07/09-roadmap). +SBC runtime, and BlueZ without copying them from the shared toolchain (see 05 and 07; +09 classifies the release implications). ## Build outputs -`make PLATFORM=h700 all` produces in `build/`: -- `.system/h700/bin/*` — nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, +After `make setup && make h700`, the staging tree contains: +- `build/SYSTEM/h700/bin/*` — nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf, clock, … (tg5040 list minus ledcontrol, which is gated to tg50x0; bootlogo.elf builds for h700 too and ships in `EXTRAS/Tools/h700/Bootlogo.pak`) plus `rfkill` (h700 builds its own minimal `/dev/rfkill` ioctl tool — stock rfkill may be absent) -- `.system/h700/lib/` — libmsettings.so, libbatmondb.so, libgametimedb.so, … +- `build/SYSTEM/h700/lib/` — libmsettings.so, libbatmondb.so, libgametimedb.so, … plus the bundled SDL2/tinyalsa/libpng12 set above -- `.system/h700/cores/*.so` — full tg5040-parity core list -- `.system/h700/shaders/` — tg5040 `.glsl` set (ES 3.0, portable) -- `.tmp_update/h700.sh` (installer), `h700/dmenu.bin` (boot shim — see 02), +- `build/SYSTEM/h700/cores/*.so` — full tg5040-parity core list +- `build/SYSTEM/h700/shaders/` — tg5040 `.glsl` set (ES 3.0, portable) +- `build/BOOT/common/h700.sh` (installer), `build/BASE/h700/dmenu.bin` (boot shim — see 02), NextCommander built via `patches/NextCommander-h700.patch` + +The later `make special && make package` steps rename `build/SYSTEM` to +`build/PAYLOAD/.system`, move the updater tree to `.tmp_update`, and create the +release archives. diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md index 0c1fbdccf..bf15da4e9 100644 --- a/docs/h700-port/02-boot-and-installer.md +++ b/docs/h700-port/02-boot-and-installer.md @@ -1,13 +1,17 @@ # 02 — Boot Hijack, Installer & SD Layout +Reference for the stock boot chain, takeover mechanism, storage policy, installer, +and runtime launcher. Current tests live in [08](08-testing-status.md); lifecycle +gates live in [09](09-roadmap.md). + ## How NextUI takes over the stock OS (no reflash, fully reversible) The stock launcher wrapper `/mnt/vendor/ctrl/dmenu_ln` prefers **`/mnt/mmc/dmenu.bin`** (the FAT32 ROMs partition of the boot SD, TF1) over the built-in frontend (verified, full chain in 00). Placing our own `dmenu.bin` there hijacks boot; deleting it restores pure stock. This shipped as designed and is the entire install/uninstall story on TF1. -No separate uninstall soak test is required: absence of that file is design-guaranteed -to prevent NextUI from starting on RG XX. +The rollback invariant is simple: when that file is absent, `dmenu_ln` cannot select +NextUI. BOOT-04 records the corresponding design inspection; 09 owns its gate policy. ``` stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_ln @@ -27,8 +31,8 @@ is simply not executed. There is nothing useful to do from inside NextUI for that path. The install docs already state the requirement (`skeleton/BASE/README.txt`): set the stock theme to -**“old style” (default)**, not MU style. Beta treats this as a documented -prerequisite, not an open warn-vs-hard-stop decision. +**“old style” (default)**, not MU style. The maintained decision is to document this +as an install prerequisite; a warn-or-hard-stop path cannot run before the override. Note: `boot/boot.sh` still has a `muos1.ini`/`muos2.ini` → “STOCK TARGET REQUIRED” check (and `launch.sh` can drop `stockmod-warning.txt`), but that path is only @@ -78,8 +82,9 @@ Notable implementation details (`boot/boot.sh`): - Logs to `/tmp/nextui-h700.log` by default; only writes a log to TF1 if it is a real mountpoint, truncating per boot (no unbounded growth on the stock card). - **Splash**: `fbsplash` (`boot/fbsplash.c`, ~180 lines) mmaps `/dev/fb0` and renders - text with a built-in 5×7 bitmap font — zero library dependencies, works before - anything is extracted. Messages: `INSTALLING NEXTUI`, `UPDATING NEXTUI`, + text with a built-in 5×7 bitmap font. It is statically bundled and safe for early + boot; the shim extracts the embedded payload before invoking it. Messages: + `INSTALLING NEXTUI`, `UPDATING NEXTUI`, `INSERT NEXTUI TF2 CARD`, `NEXTUI INSTALL MISSING`, `STOCK TARGET REQUIRED`. (The old port's per-panel raw-BMP `dd` scheme was dropped — rendered text needs no per-resolution assets. Post-install, SDL-based `show2.elf` takes over as usual.) @@ -88,11 +93,12 @@ Notable implementation details (`boot/boot.sh`): compatibility, and logging helpers. - **TF2 mount**: tries vfat → exfat → auto; on failure runs `repair_tf2()` — `fsck.fat -a` or `fsck.exfat -a` chosen by `blkid` — then retries once. -- **Update trigger**: boots into the installer when `MinUI.zip` **or any `*.pakz`** is - present at the SD root. If `.tmp_update/h700.sh` is missing (fresh card), it - bootstrap-extracts only `.tmp_update/*` from the zip first, then delegates — **the - zip is left in place for the installer to own** (an early version deleted the zip - before the installer ran, which left stale files forever). +- **Update trigger**: `MinUI.zip` always enters the update path. If + `.tmp_update/h700.sh` is missing (fresh card), the shim bootstrap-extracts only + `.tmp_update/*` from that zip first, then delegates — **the zip is left in place for + the installer to own**. Root-level `*.pakz` files also invoke the installer when an + executable `.tmp_update/h700.sh` is already present; a pakz alone cannot bootstrap + a fresh card. - Then `exec`s `.system/h700/paks/MinUI.pak/launch.sh`; any failure falls back to the stock frontend. - Prefers the stock OS's `unzip` when present; the embedded static helper is the @@ -110,7 +116,7 @@ Notable implementation details (`boot/boot.sh`): ## `MinUI.pak/launch.sh` (the master runtime script) -Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~206 lines): +Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~225 lines): - `export PLATFORM=h700`, path exports, `/mnt/SDCARD` compat symlink. - **Device detection**: `RGXX_MODEL=$(strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG)` → `DEVICE` case (rg28xx / rg34xx / cube / rg40xx default). Confirmed working on 2026 @@ -131,3 +137,13 @@ Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~2 - Crash-loop handling: after 5 consecutive `nextui.elf` crashes, the loop logs the crash limit, removes `/tmp/nextui_exec`, and falls through to poweroff. H700 does not ship an automatic WiFi/SSH rescue path in the release runtime. + +## Maintainer development loop + +- The stock OS runs sshd with a full Ubuntu userland. After the first install, copy + freshly built `.elf` files into `.system/h700/bin` and restart the launch loop; + routine iteration does not require moving SD cards. +- The bounded crash loop writes its diagnostics before powering off. Retrieve logs + from TF2, or use stock SSH while the device is already reachable. +- Test the self-extracting shim and installer as separate layers: the shim owns early + mount/repair/fallback, while `.tmp_update/h700.sh` owns the update transaction. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index b5031c542..5c60e9ec0 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -1,5 +1,9 @@ # 03 — Platform Layer (`workspace/h700/`) +Reference map for the platform API, device detection, input architecture, settings +backend, and H700-specific tools. Evidence is indexed in [08](08-testing-status.md) +and release classification in [09](09-roadmap.md). + Strategy, as planned and executed: **clone `workspace/tg5040/`**, keep the `generic_video.c`/`generic_wifi.c`/`generic_bt.c` includes and the current `PLAT_*` API surface, repoint hardware access to the H700 paths (00), borrowing only hardware @@ -30,36 +34,37 @@ model string). No H700 Anbernic device has an Fn switch. Exact `RGXX_MODEL` stri still unconfirmed for the RG35xx family and RG40xxH (same caveat as msettings' displaycal presets). -The Input pak intentionally visualizes digital button/click state only. It detects -stick availability and draws L3/R3, but `minput.c` has no rendering path for analog -axis movement; RG34XXSP showing working L3/R3 without moving-stick graphics is expected -and is not an H700 regression. +The Input pak uses the per-device capability flags to show only the sticks that exist, +including their analog axis movement and L3/R3 click state. This is verified on the +single-stick RG40XXV and dual-stick RG34XXSP: movement is visualized correctly for the +left stick on RG40XXV and for both sticks on RG34XXSP. ## platform.h (as shipped) ```c extern int is_rg28xx, is_rg34xx, is_cube; +extern int hdmi_active; extern int dev_has_lstick, dev_has_rstick; +#define HDMI_WIDTH 1280 +#define HDMI_HEIGHT 720 #define FIXED_SCALE 2 -#define FIXED_WIDTH (is_cube?720:(is_rg34xx?720:640)) -#define FIXED_HEIGHT (is_cube?720:480) +#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:(is_rg34xx?720:640))) +#define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:(is_cube?720:480)) #define FIXED_BPP 2 #define SCREEN_FPS 60.0 // ⚠ assumed, never measured per panel #define SDCARD_PATH "/mnt/SDCARD" // symlink to the real TF2 mountpoint (02) #define MAX_LIGHTS 0 // no RGB LEDs on RG XX (work_led is on/off only) -#define MAIN_ROW_COUNT (is_cube?8:6) // 480px-tall screens fit 6 rows +#define MAIN_ROW_COUNT (hdmi_active?10:(is_cube?8:6)) ``` ## Input — dual path, evdev primary (deviation from plan) The plan preferred the tg5040-style pure-SDL-joystick route. **Shipped: raw evdev is the primary path for built-in controls**, with SDL joystick as a secondary path for -Bluetooth controllers. Reasons discovered during bring-up: -- SDL joystick enumeration of the built-in pad is unreliable on the stock image - (udev interplay); SDL is built without udev and `SDL_JOYSTICK_DISABLE_UDEV=1` is - exported — that fixed startup hangs but made js enumeration of gpio-keys flaky. - Root cause found later (2026-07-09, Files-app freeze): the SDL fork's Batocera +external controllers. Reasons discovered during bring-up: +- SDL is built without udev and `SDL_JOYSTICK_DISABLE_UDEV=1` is exported. During + bring-up the built-in pad did not enumerate because the SDL fork's Batocera patches deleted the joystick heuristic in `SDL_EVDEV_GuessDeviceClass()`, so the no-udev fallback path never classified any device as a joystick. Fixed by `workspace/h700/patches/sdl2-h700.patch` (see 01); SDL joystick enumeration of @@ -94,7 +99,7 @@ Verified mappings (also recorded in 00): shortcuts overlay into brightness mode. Fix: `button_from_code()` no longer maps `CODE_MENU_ALT` to `BTN_MENU` (keymon likewise ignores it); tap-vs-hold is derived from the clean 312 timing. The SDL path was never affected (`JOY_MENU_ALT = JOY_NA`). -- Analog sticks: ABS_Z/RX/RY/RZ, raw 0..4096, scaled ×32767/4096. Presence varies +- Analog sticks: ABS_Z/RX/RY/RZ; signed values are scaled ×32767/4096. Presence varies per model (see the stick matrix above); `dev_has_lstick`/`dev_has_rstick` gate CODE_L3/R3, JOY_L3/R3, and AXIS_LX/LY/RX/RY to NA where the stick is absent, so the Input pak and shared input code adapt without platform-independent changes. @@ -120,23 +125,23 @@ open/closed per poll and could drop the wake press between polls. | Subsystem | Implementation | |---|---| | Video | `#include "generic_video.c"` — custom SDL2 mali driver does the rest (04) | -| Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, coarse bucketing in shared code — identical to tg5040 | -| CPU speed | `governor.sh` via `system()`: auto=schedutil, performance=max 1512000, powersave=conservative capped mid-range. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | +| Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, with coarse bucketing in shared code. Unlike tg5040, H700 charging detection uses `online` alone | +| CPU speed | `governor.sh` via `system()`: auto=schedutil at the second-highest advertised frequency, performance at the greatest advertised frequency, powersave=conservative capped mid-range. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | | CPU temp | thermal_zone0 | | GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | | GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | | Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | | LEDs | `MAX_LIGHTS 0`, all `PLAT_setLed*` stubs — hardware has no RGB LEDs. `work_led` used only as sleep/backlight indicator | | Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | -| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP: POWER can wake light sleep with lid closed; deep sleep re-sleeps if lid still closed — accepted beta policy (06). | -| Model | `PLAT_getModel` → "Anbernic " + `RGXX_MODEL` (copied into a static buffer, not a raw getenv pointer) | -| Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezones via `timedatectl set-timezone`/`list-timezones`, NTP via `set-ntp` (systemd-timesyncd) — much cleaner than tg5040's uci | +| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP: POWER can wake light sleep with lid closed; deep sleep re-sleeps if the lid remains closed (06). | +| Model | `PLAT_getModel` copies the raw `RGXX_MODEL` into a static buffer; when unavailable it returns `Anbernic RG XX` | +| Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezone choices are parsed from `/usr/share/zoneinfo/zone.tab`, setting uses `timedatectl set-timezone`, and NTP uses `set-ntp` (systemd-timesyncd) | | Turbo | `PLAT_canTurbo()=false`, no-ops (tg5040's turbo rides trimui_inputd; no H700 equivalent wired) | | Deep sleep | `PLAT_supportsDeepSleep()=1`; `suspend` script wraps `echo mem` (06) | | Sample rate | tg5040 logic; consults `PLAT_bluetoothConnected()` only — calling `GetAudioSink()` here segfaulted minarch pre-`InitSettings()` (shm not yet mapped) | | WiFi/BT | generic_wifi.c / generic_bt.c + init scripts (07) | -## libmsettings (`workspace/h700/libmsettings/msettings.c`, ~1300 lines) +## libmsettings (`workspace/h700/libmsettings/msettings.c`, ~1600 lines) - **Brightness**: `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS (0x102)`, args `{0, raw, 0, 0}`; level curve `0→4, 1→6, 2→10, 3→16, 4→32, 5→48, 6→64, 7→96, @@ -152,7 +157,7 @@ open/closed per poll and could drop the wake press between polls. - **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — works (tested ✅). The sibling `enhance_contrast` / `enhance_saturation` / `enhance_bright` attrs are also written, **but have no visible effect on RG XX - panels** — those settings are gated off for h700 (09-roadmap #8). All + panels** — those settings are gated off for h700 (04). All `scale*()` switches carry `default:` cases (a draft could hit uninitialized values on out-of-range input). - **DisplayCal**: same gamma-LUT ioctls as tg5040 (0x10b/0x10c/0x10d) — worked 1:1 as @@ -162,7 +167,8 @@ open/closed per poll and could drop the wake press between polls. `SetHDMI()` switches disp0, framebuffer/layer geometry, and the ALSA route. Menu, game, audio, and in-game hotplug in both directions pass on RG40XXV (04). - **Jack detection**: not wired (path exists but historically dead — 00). -- Debug printfs were stripped/commented for release; remaining prints are error paths. +- Debug printfs were stripped/commented from the runtime path; remaining prints are + error paths. ## keymon (`workspace/h700/keymon/keymon.c`) @@ -176,8 +182,35 @@ code 312 only — the synthetic 354 post-tap pulse is ignored (see MENU quirk ab tg5040's list verbatim — the full 28-core set builds and ships (same aarch64/a53 target), with the picodrive LTO/patch-hygiene fixes noted in 01. +## Shared-code integration surface + +Most H700 code is platform-local, but these shared areas knowingly carry H700 +integration. Review them when rebasing or adding another platform: + +- `workspace/all/common/generic_video.c` fails fast on SDL/window/GL initialization + errors instead of continuing into a black screen. +- `workspace/all/common/api.c` / `api.h` expose `PWR_requestSleep()` for lid-driven + sleep and close audio with `SND_quit()` before suspend. +- `workspace/all/audiomon/audiomon.cpp` checks BlueALSA availability; its Makefile + gives H700 the compile-time omission for the unsupported `delay 0` option. +- `workspace/all/minarch/makefile` includes H700 in the tg5040-class RA/CHD/SRM/ + sample-rate feature filters. +- `workspace/all/settings/settings.cpp`, `btmenu.*`, and the settings Makefile carry + the Anbernic vendor/model capabilities and stock-Bluetooth-audio integration. +- `workspace/all/syncsettings/syncsettings.c` restores the display settings and gamma + LUT after suspend. +- `workspace/all/bootlogo/bootlogo.c` contains the diagnostic empty-state handling + and the optional `BOOTLOGO_PREVIEW_ROTATE_CW` hook used by RG28XX. +- Root/workspace makefiles register the H700 platform, tg5040-image reuse, rfkill, + and the H700 Bootlogo build. + +Any change in this surface requires the H700 build plus the tg5040 regression build +recorded as BUILD-01 and BUILD-02 in 08. A new shared button or `PLAT_*` hook must be +defined on every platform; a full build is required because single-pak builds omit +some translation units. + ## What disappeared vs tg5040 (as planned) -- `btmanager/` (BlueZ-upgrade pakz — H700 Ubuntu has BlueZ 5.64) +- `btmanager/` (BlueZ-upgrade pakz — H700 uses firmware-provided BlueZ) - `poweroff_next/`, `reboot_next` (systemd poweroff/reboot work fine) - LED animation wiring (`led_anim`), ledcontrol.elf (gated to tg50x0 in `workspace/makefile`) — bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index ef37eac13..511de901b 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -1,6 +1,11 @@ # 04 — Video, Display, Rotation, HDMI, DisplayCal -## Architecture (worked exactly as designed) +This chapter records the H700 display stack, the decisions behind it, and the +hardware evidence that established those decisions. The current test results and +per-device coverage live in [08 — Testing status](08-testing-status.md); release +criteria and deferrals live in [09 — Roadmap](09-roadmap.md). + +## Rendering architecture NextUI renders via `workspace/all/common/generic_video.c`: SDL2 window → `SDL_GL_CreateContext` → GLES 3 shader pipeline → `SDL_GL_SwapWindow`. The H700 @@ -19,34 +24,32 @@ The stack: trap, see 01). `generic_video.c` gained hard error checks: SDL init / window / renderer / GL-context failures now `exit(1)` instead of limping on — on a device with no display fallback, failing loudly into the bounded crash-restart loop beats - a black screen; the release path powers off after the crash limit. + a black screen; the launcher powers off after the crash limit. -## Per-device geometry +## Panel geometry and scaling context -| Device | Panel | FIXED_W×H | Status | +| Device | Panel | FIXED_W×H | Implementation / evidence | |---|---|---|---| -| RG40XXV | 640×480 4:3 | 640×480 | ✅ shipped, tested | -| RG34XXSP | 720×480 3:2 | 720×480 | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher, in-game menus; UI scaling tested-good | -| RG28XX | 480×640 portrait | 640×480 logical | ✅ user-tested — driver-level rotation, UI + game scaling verified (below) | -| RGcubexx | 720×720 | 720×720 | wired (`is_cube`); general UI scaling community-validated; full matrix not walked locally | +| RG40XXV | 640×480 4:3 | 640×480 | Native landscape reference panel | +| RG34XXSP | 720×480 3:2 | 720×480 | Broad UI and scaling evidence gathered during bring-up | +| RG28XX | 480×640 portrait | 640×480 logical | Driver-level rotation; see the rotation decision below | +| RGcubexx | 720×720 | 720×720 | `is_cube` geometry path; community scaling feedback available | -### 480p UI — mostly fine, polish pass pending +### 480p UI observations and overlay assets These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't -rendered at 480p for ~2 years. Real-use verdict on RG40XXV and RG34XXSP: **no systemic -breakage — OK for alpha**. The broad 720×480 surface sweep is now clean, including the -keyboard used for RetroAchievements credentials. Screenshots pass on RG34XXSP. -**UI scaling** across panels is good: 640×480, 720×480, and rotated 480×640 tested -locally; 720×720 (RGcubexx) confirmed by a Discord community tester — no graphical -issues worth tracking. **Panel-matched overlay assets** are a separate content gap: -the release only ships empty `Overlays//` dirs plus two GBA PNGs at +rendered at 480p for ~2 years. Bring-up on RG40XXV and RG34XXSP found no systemic +scaling breakage; the 720×480 sweep included the RetroAchievements keyboard and +screenshots. Local observations also cover 640×480 and rotated 480×640; a community +tester reported normal general UI scaling on the 720×720 RGCubeXX. Refer to the test +report for the maintained coverage record. + +**Panel-matched overlay assets** are a separate content question. The H700 tree ships +empty `Overlays//` directories plus two GBA PNGs at **1024×768** (TrimUI Brick), not 640×480 / 720×480 / 480×640 / 720×720. The overlay -GLES path itself already runs on Mali (shaders/effects row); shipping H700-sized -overlay packs is optional content, not a beta code gate. Related but -distinct: the Input tester is now device-aware, the dead -display controls are hidden/verified, and Fn-switch settings are gated off on h700. -The broader capability sweep remains a useful regression check (09-roadmap #8). +GLES path itself runs on Mali. The Input tester is device-aware, ineffective display +controls are hidden, and Fn-switch settings are disabled on H700. -## RG28XX rotation — validated: driver-level only (2026-07-12) +## RG28XX rotation decision (2026-07-12) Hardware testing answered both open questions, and the answer retired one of the two planned layers: @@ -75,7 +78,7 @@ space. The pak now rotates previews 90° CW on the RG28XX carousel shows what the panel will actually display at boot; apply itself was already correct (user-verified: applied logo renders upright at power-on). -## HDMI — hotplug output switching, user-validated ✅ (RG40XXV + TV, 2026-07-16) +## HDMI output switching Plug-and-play design: when a cable is (dis)connected the running app quits via the existing `GFX_hdmiChanged()` plumbing (nextui inline, minarch `hdmimon()`, settings @@ -83,9 +86,10 @@ main loop), the relauncher restarts it, and `PLAT_initPlatform()` converges the output to the cable state *before* SDL video comes up. Boot-with-cable works the same way for free. -- `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state}` — hotplug - detection (verified: `cable.0/state` is a bare 0/1; the top-level `state` file is - `HDMI=n` text which `getInt` parses as 0, so `cable.0` is the effective check). +- `GetHDMI()` probes `/sys/class/extcon/hdmi/state` plus `cable.0/state` and + `cable.1/state` — hotplug detection (verified: `cable.0/state` is a bare 0/1; the + top-level `state` file is `HDMI=n` text which `getInt` parses as 0, so a cable-state + file is the effective check). - `SetHDMI()` (libmsettings) now performs the proven old-port sequence in C: blank fb0 → zero fb → `/sys/kernel/debug/dispdbg` `disp0/switch` with param `"4 10 0 0 0x4 0x101 0 0 0 8"` (HDMI type 4, mode 10 = **1080p60 signal**) → @@ -126,23 +130,25 @@ same way for free. whichever commit lands last wins against the attach path's restore; commit again after unblank. The blob's pans then keep the crop in sync (they copy the committed config). -- Validated end-to-end: plug/unplug in launcher and in-game (autosave → - auto-resume), repeated cycles, game scaling correct at 1280×720. An earlier +- **Hardware evidence (RG40XXV + TV, 2026-07-16):** plug/unplug in launcher and + in-game (autosave → + auto-resume), repeated cycles, game scaling correct at 1280×720, and HDMI audio + routing all worked. An earlier "audio stutter on TV" symptom was collateral from the stale-layer DE errors, - not GPU load. Not yet covered: RG28XX/cube/SP models, boot-with-cable, odd - EDIDs (if a display rejects mode 10, mode 5 = 720p60 is the one-line - fallback). Old reference: + not GPU load. If a display rejects mode 10, mode 5 = 720p60 is the known one-line + fallback; broader EDID evidence is tracked in 09. Old reference: `git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`. -- Unplug takes ~4-5s to restore: the deliberate `sleep(4)` debounce in the - shared hdmimon/nextui handlers plus the switch itself. Could be tuned later. +- Observed unplug-to-panel restore is ~4–5s. The current shared MinArch/NextUI + handlers contribute a 1s cable-seating debounce; the remaining time is the output + switch and panel restore. -## DisplayCal — ported 1:1, tested ✅ +## DisplayCal implementation and evidence Same `/dev/disp` gamma-LUT ioctls as tg5040 (`0x10b` set / `0x10c` enable / `0x10d` disable). On RG40XXV: RGB gain sliders visibly act, persist, and **survive sleep and game launch** (syncsettings.elf re-applies the LUT after resume — 06). `settings.cpp` -gained the Anbernic vendor + RG XX models and enables -colortemp/displaycal/mute/analog-stick/wifi/bt capability flags for h700. +gained the Anbernic vendor + RG XX models. H700 enables color-temperature, +DisplayCal, WiFi, and Bluetooth settings; the FN/mute-toggle menu remains disabled. **Reboot persistence — fixed 2026-07-09.** `InitSettings()` used to call `applyDisplayCalDefaultsForDevice()` unconditionally *after* loading the persisted @@ -173,7 +179,7 @@ The libmsettings plumbing remains (harmless no-ops; the shared API keeps the symbols), and syncsettings still "restores" them on resume — a cosmetic cleanup at most. -## Alpha/tinted-bitmap blits — resolved (it was libpng all along) +## Incident: alpha/tinted-bitmap blits (libpng, not blending) During bring-up, graphical glitches were blamed on main's alpha-blending work; a compat experiment (`GFX_needsBitmapBlendCompat()` gated in shared `api.c`) was @@ -185,18 +191,17 @@ pitfall #2 in 01). The alpha-blending code on main was never at fault. Consequence: the h700 branch was **rebased onto main with the alpha-blending work included** (done 2026-07-09). `workspace/all/` carried zero net change from the -reverted experiment, so the rebase was clean on that front. Game switcher and box-art -rendering are clean at 720×480; screenshots pass on RG34XXSP; multi-panel UI scaling -passes (see geometry table); panel-matched overlay assets are not shipped (Brick-sized -GBA only); remaining polish items remain to -be checked. Upstream main has since advanced, so rebase once more before final merge. - -## Bootlogo preset previews — resolved (2026-07-13) - -The 640×480 catalog works on RG40XXV. The RG34XXSP "no visible presets" issue is -fixed: driving the pak remotely over SSH on the SP with the current branch build -showed all 23 `720x480/` presets loading and the carousel rendering correctly -(verified via framebuffer capture); user-confirmed working. The failing binary was +reverted experiment, so the rebase was clean on that front. Game-switcher and box-art +checks at 720×480 and RG34XXSP screenshots supported the conclusion; retained +coverage details belong in the testing report. Panel-matched overlay assets remain +Brick-sized GBA only. + +## Incident: Bootlogo preset previews (2026-07-13) + +The RG34XXSP "no visible presets" issue was traced by driving the pak remotely over +SSH on the SP with the current branch build: all 23 `720x480/` presets loaded and +the carousel rendered correctly in a framebuffer capture, which the user also +confirmed. The failing binary was the alpha1.1-era `bootlogo.elf` (built from a pre-commit working tree); the exact defect in that binary was never pinned because current source no longer reproduces it. To keep this class of failure diagnosable, `bootlogo.c` now logs the preset @@ -204,10 +209,10 @@ search path, per-file `IMG_Load` failures, and the final count to the pak's `log.txt`, renders the searched path on screen when nothing loads, and guards scroll/apply against an empty preset list (apply previously dereferenced a NULL array). RG28XX previews are rotated to boot orientation (see rotation section -above). The 720×720 path has community UI-scaling validation; full cube UI/core matrix -still needs a local or broader external pass. +above). Community feedback covers the 720×720 scaling path; maintained cube coverage +belongs in the testing report. -## Boot splash +## Boot splash decision Deviation from plan: instead of per-panel raw-BMP `dd` assets, the shim ships `fbsplash` — a dependency-free fb0 text renderer (02). Post-install, SDL-based diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md index 1894d6a62..21dadd90b 100644 --- a/docs/h700-port/05-audio.md +++ b/docs/h700-port/05-audio.md @@ -1,15 +1,20 @@ # 05 — Audio -## Playback path (as shipped, tested ✅) +This chapter records the H700 audio architecture, decisions, and diagnostic evidence. +The maintained test report is [08 — Testing status](08-testing-status.md); release +criteria and deferred work are in [09 — Roadmap](09-roadmap.md). + +## Playback architecture `SND_init` (shared `api.c`) → SDL audio → **ALSA backend → card 0 `audiocodec`**. `SDL_AUDIODRIVER=alsa` exported by launch.sh. GBA/SNES/PS1 run full speed with clean -audio, no underruns, on RG40XXV; RG34XXSP behaves the same in user testing. +audio and no underruns in H700 bring-up observations; see the testing report for the +current device coverage. ``` card 0: audiocodec ← speaker / lineout / headphone (the one we use) card 1: ahubdam -card 2: ahubhdmi ← HDMI audio (unused until HDMI out lands) +card 2: ahubhdmi ← HDMI audio ``` ## The dlopen'd-ALSA fix (the port's hardest bug — full story) @@ -32,29 +37,29 @@ version. The bundled libasound copy was removed. Only `libtinyalsa` (used direct libmsettings) is bundled. Lesson generalized in 01: prefer dlopen over cross-linking for libraries that exist on the target. -## Volume / mute (libmsettings — details in 03) +## Volume and mute behavior (libmsettings — details in 03) - Master: `digital volume`, a 0–63 **attenuator with a reversed scale** — code writes `100 - val` percent. Confirmed correct by listening; the control's TLV metadata is garbage, so don't trust `amixer` ranges here. `lineout volume` secondary. - Mute: `SPK` switch off + saved/restored volume (H700 has no - `/sys/class/speaker/mute`). Mute toggle enabled for h700 in settings. Tested ✅. -- Validation: no known issues on RG40XXV or RG34XXSP. The volume UI behaves correctly, - and audible levels are as expected across the full range from mute through 100%. + `/sys/class/speaker/mute`). The settings application enables the mute toggle. +- Bring-up evidence: on RG40XXV and RG34XXSP, the volume UI and audible level range + behaved as intended from mute through 100%. - Suspend: the `suspend` script saves the full mixer state (`alsactl store`) in - `before()` and **restores it in `after()`** on resume (an early version had the - restore commented out; it's live now). + `before()` and **restores it in `after_sync()`** on resume (an early version had + the restore commented out; it's live now). -## Headphone jack — hardware auto-route works; software detection unused +## Headphone jack routing and detection -**Hardware (tested):** plugging headphones auto-mutes the speaker and routes audio -to the jack with no NextUI involvement. Functional audio is correct. +**Hardware behavior:** plugging headphones auto-mutes the speaker and routes audio +to the jack with no NextUI involvement. **Software:** Brick-style `SetJack` / separate speaker vs headphones volume / HP volume icon are **not** wired on h700 — `keymon` never monitors a jack event, so `GetJack()` stays 0 and the volume UI keeps the speaker path. That is cosmetic / -dual-volume polish only; routing does not depend on it. Optional follow-up if a -HP icon or independent HP volume is wanted later. (`jack_state` sysfs was +dual-volume behavior only; routing does not depend on it. The HP-icon/independent- +volume enhancement is classified in 09. (`jack_state` sysfs was historically always 0 and was never needed once hardware auto-mute was confirmed.) ## Bluetooth audio — stock-first A2DP enabled @@ -66,8 +71,9 @@ registers two SBC source endpoints below `/org/bluez/hci0`. H700 now follows the tg5040 lifecycle with a stock-only implementation: - `bt_init.sh` starts BlueALSA only after `hci0` and stock BlueZ are ready, waits for - its D-Bus name, enables native A2DP volume, initializes the remote transport at a - nonzero volume, and logs useful startup failures + its D-Bus name, uses BlueALSA's default volume mode with `--initial-volume=100`, + and logs useful startup failures. It deliberately omits `--a2dp-volume`, which can + leave AirPods at absolute volume zero on this firmware - `/usr/bin/bluealsa`, the ALSA PCM/control plugins, SBC runtime, ALSA configuration, and BlueZ all come from the stock firmware; none are bundled or replaced - settings exposes the existing maximum-sampling-rate control (the H700-specific @@ -79,23 +85,27 @@ H700 now follows the tg5040 lifecycle with a stock-only implementation: - disabling Bluetooth stops BlueALSA before BlueZ; no `bluetoothd`, `bluetoothctl`, or other BlueZ component is bundled or replaced -**Earlier validation (RG40XXV):** AirPods 4 ANC pairing, A2DP connection, automatic -internal-speaker muting/restoration, SBC transport, and user-audible game audio passed. +### Evidence and observed behavior + +**RG40XXV / AirPods 4 ANC:** pairing, remembered pairing, +manual connection, A2DP routing, SBC transport, and user-audible game audio pass. +Putting the AirPods back in their case disconnects them and restores audio to the +internal speaker as expected. The original silent stream was not a 44.1/48 kHz problem: BlueZ created the AirPods transport with absolute volume zero. Setting its `MediaTransport1.Volume` to 127 made -the already-running stream audible. The shipped daemon flags now initialize that value -natively. An A2DP PCM publication race was also observed during an artificial daemon +the already-running stream audible. The shipped path instead starts BlueALSA with an +initial mixer volume and has libmsettings update the connected A2DP mixer control. +An A2DP PCM publication race was also observed during an artificial daemon restart while the device remained logically connected; it is not handled by an H700-only shared-code workaround unless a normal connection flow reproduces it. -**Lifecycle remainder blocked (2026-07-20):** auto reconnect, menu/game and game/game -switching, five suspend/resume cycles, case/disconnect speaker-restore revalidation, -and Settings sample-rate change+persist were never completed. Revalidation is blocked -because BT powers on but scans no devices and cannot pair on **both stock OS and -BaseOS** — a device/firmware environment failure, not a NextUI-only regression. -Resume the full matrix once discovery works again. Firmware without a runnable stock -BlueALSA is logged as controller-only rather than augmented with another userspace -stack; see 09-roadmap. +### Connection policy and operating limits + +AirPods auto-connect is intentionally outside NextUI's control: they commonly connect +to a nearby paired iPhone or Mac instead. NextUI retains the pairing and provides the +reliable manual Connect path. If the stock firmware lacks runnable BlueALSA, the +device remains controller-only rather than receiving a replacement Bluetooth audio +stack from NextUI. ## Sample rates diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index 7a28d5e93..c3333a422 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -1,6 +1,12 @@ # 06 — Power, Sleep, Battery, Lid -## ✅ Sleep/wake fixed (2026-07-09, verified on RG34XXSP and RG40XXV) +This is the H700 power-management knowledge base: platform behavior, implementation +decisions, incident analysis, and diagnostic leads. The current test evidence and +device results are in [08-testing-status.md](08-testing-status.md#power-sleep-and-battery); +stage requirements and accepted product behavior are in +[09-roadmap.md](09-roadmap.md). + +## Sleep/wake incident and resolution (2026-07-09) The former "#1 open defect" turned out to be four separate bugs, all found and fixed: @@ -30,22 +36,17 @@ The former "#1 open defect" turned out to be four separate bugs, all found and f (wifi/bt/hooks). Measured wake-to-responsive: ~0.5–1.2 s (audio reinit 150–200 ms, formerly 9–10 s). -Verified by physical testing on RG34XXSP (stockmod OS) and re-tested on RG40XXV: -repeated power-tap sleep/wake cycles, screen-off → suspend two-stage escalation with -10 s/10 s timers, suspend → power-key wake, lid-close → sleep, and state restore -(display settings, WiFi reconnect). In-game sleep/resume and in-game power-off → -power-on → automatic resume of the running game are also verified. Long-press -power-off is unaffected. Two RG34XXSP edge cases were found on 2026-07-10: a power-key -release can wake light sleep even while the lid remains closed (accepted beta -policy — deep sleep re-sleeps if lid still closed; see Lid below), and charging -keeps the device in light sleep rather than deep suspend (also accepted policy). +Physical evidence for the resolved paths—including repeated cycles, autosleep, +in-game resume, lid handling, and state restoration—is recorded in POWER-01 through +POWER-04 of the [test report](08-testing-status.md#power-sleep-and-battery). The +implementation leaves long-press power-off unchanged. Stockmod/logind interference was ruled out: `HandlePowerKey=ignore` is in place (our launch.sh drop-in), stockmod's `pwr_new.sh` is not running under NextUI, and no evdev device exposes a lid switch (`sw=0` everywhere) — the hall sensor exists *only* as the AXP2202 `hallkey` sysfs node that our code polls, so nothing else can react to it. -## Verified hardware facts (00 has the full list) +## Hardware facts (00 has the full list) - `/sys/power/state` = `freeze mem`; `echo mem` suspend works - Wake source: **power button only** (AXP2202 PEK). RTC alarm wake does not fire. @@ -73,9 +74,10 @@ Two layers, as on tg5040: - `after_async()` (backgrounded, `&`): restart wifi/bt services, then `post-resume.d` hooks — takes ~5 s and must not delay the script's exit or the caller's input handling freezes for that long. - - systemd is bypassed on purpose (direct sysfs write); launch.sh installs a logind - drop-in (`HandlePowerKey=ignore`, `HandlePowerKeyLongPress=ignore`) and restarts - logind so systemd never handles the power key (02) + - systemd is bypassed on purpose (direct sysfs write); when logind is present, + launch.sh best-effort installs a drop-in (`HandlePowerKey=ignore`, + `HandlePowerKeyLongPress=ignore`) and restarts logind so it does not handle the + power key (02) ### Wake & autosleep - `PLAT_shouldWake`: power-key (code 116) read from a persistent non-blocking fd on @@ -83,7 +85,7 @@ Two layers, as on tg5040: above); lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled while charging/HDMI) works unchanged on top. -## Lid (RG34XXSP) — working with one wake-gate issue +## Lid (RG34XXSP) `LID_PATH = axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if the file exists (absent on RG40XXV). Polarity verified on hardware: 1 = open. Lid close → @@ -94,34 +96,34 @@ sensor is not a kernel wake source — same as stock firmware, considered desira The intended software behavior is to ignore power while the lid is closed, and `PLAT_shouldWake()` has that gate. Hardware: POWER can still wake **light** sleep while the lid is closed. In **deep** sleep, if POWER briefly wakes the unit and the -lid is still closed, the unit returns to sleep. **Accepted as documented beta -policy** (2026-07-20) — not a release blocker. Optional later hardening if a -stricter closed-lid gate for light sleep is desired. +lid is still closed, the unit returns to sleep. Its lifecycle disposition is in the +[roadmap](09-roadmap.md#accepted-behavior-and-non-gates). ## Battery -- `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, coarse - bucketing in shared code — same paths as tg5040, copied verbatim. Charging detection - and the UI indicator work on RG34XXSP; percentage accuracy vs stock passes on - RG34XXSP. After a ~9 h sleep/wake cycle the top-right battery icon and the Battery - pak were out of sync with each other (fresh boot keeps them aligned) — the reported - level itself is fine, but the two UI consumers of battery state need a hardening - look later (likely a stale cache / poll gap after long suspend). +- `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, with + coarse bucketing in shared code. H700 uses the USB `online` value directly; unlike + tg5040 it does not also require a positive `time_to_full_now`. The recorded + RG34XXSP evidence is in POWER-04 and POWER-05. One long-suspend observation found the + top-right battery icon and Battery pak temporarily out of sync, despite a sensible + reported level after a fresh boot. Investigate a stale cache or polling gap after + long suspend. - **Not supported:** “Keep awake over USB” (upstream #783). `PLAT_isUSBConnected()` is a stub returning 0; the Settings toggle remains tg5040-only. Charging already blocks deep sleep via `is_charging`; gadget/data keep-awake is not implemented. - While charging, lid or power sleep reaches screen-off/light sleep only. This matches shared `PWR_waitForWake()` behavior: the charging check deliberately skips - `PWR_deepSleep()` and checks again a minute later. **Accepted as documented beta - policy** (2026-07-20) — same shared product choice as other platforms; not a failed - suspend attempt and not an H700-specific override. + `PWR_deepSleep()` and checks again a minute later. It is a shared product behavior, + not a failed suspend attempt or an H700-specific override; see POWER-04 and the + [roadmap](09-roadmap.md#accepted-behavior-and-non-gates). - Richer metrics (`time_to_empty_now`, `voltage_now`, `temp`, `charge_counter`) are available for future batmon extensions; not wired. -- Standby drain: first RG34XXSP data point — ~8.5 h deep sleep dropped capacity - 40% → 33% (~7%). Higher than the aspirational ≤ stock + ~1% over 8 h target, but - capacity % is coarse (and the icon/Battery-pak desync after long sleep may muddy - the reading). Re-test with `axp2202-battery/voltage_now` before/after, and run the - same interval on stock OS for a true baseline, before calling this pass or fail. +- Standby-drain investigation: the first RG34XXSP observation was a capacity change + from 40% to 33% over about 8.5 hours of deep sleep. Capacity is coarse, and the UI + desynchronization above may muddy the observation. Re-test with + `axp2202-battery/voltage_now` before/after and run the same interval on stock OS + for a baseline. POWER-06 records the evidence; the follow-up is tracked in the + [roadmap](09-roadmap.md#future-hardening). ## Power off / reboot @@ -132,9 +134,11 @@ by u-boot/stock before our hijack, untouched. ## CPU governor -`governor.sh`: auto=`schedutil`, performance=`performance` @1512000, -powersave=`conservative` capped mid-range. Menu vs in-game profiles ride the shared -settings; performance is forced during game launch. Manual in-game changes are clean. +`governor.sh` reads the available frequency list: auto=`schedutil` at the +second-highest advertised frequency, performance=`performance` at the greatest +advertised frequency, and powersave=`conservative` capped mid-range. Menu vs in-game +profiles ride the shared settings; performance is forced during game launch. Manual +in-game changes are clean. ~~RG34XXSP MD Auto CPU slowdown~~ Fixed (user-verified 2026-07-20): earlier, some shader/scale combos left Auto near 480 MHz and felt slow; that no longer reproduces. Manual powersave/performance were already smooth. Single cluster → no core pinning. diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md index 3448252bd..5ec7c6924 100644 --- a/docs/h700-port/07-wifi-bluetooth.md +++ b/docs/h700-port/07-wifi-bluetooth.md @@ -1,19 +1,27 @@ # 07 — WiFi & Bluetooth +This is the H700 connectivity knowledge base: stock integration, service ownership, +design rationale, and diagnostics. Current test evidence and device results live in +[08-testing-status.md](08-testing-status.md#network-and-online-features) (with +Bluetooth audio under [Audio](08-testing-status.md#audio)); lifecycle decisions live +in [09-roadmap.md](09-roadmap.md). + ## Hardware / stock OS (verified — details in 00) - WiFi: Realtek RTL8821CS (SDIO), driver `8821cs`, `wlan0`; link state via `/sys/class/net/wlan0/operstate` - BT: same combo chip, UART-attached; stock already runs `rtk_hciattach` and - `bluetoothd` (BlueZ 5.64) at boot -- Stock also runs wpa_supplicant (dbus mode) + NetworkManager + dnsmasq — all - displaced at launch + `bluetoothd` (BlueZ 5.64–5.66 depending on firmware) at boot +- Stock also runs wpa_supplicant (D-Bus mode), NetworkManager, and dnsmasq. NextUI + explicitly stops NetworkManager and the stock supplicant before starting its own; + the H700 scripts do not directly manage dnsmasq -## WiFi (as shipped — NextUI-owned wpa_supplicant, tested ✅) +## WiFi architecture (NextUI-owned wpa_supplicant) -The plan's option 1 shipped as designed: `generic_wifi.c` unchanged, NextUI owns the -supplicant. Scan/connect/forget work; the link survives sleep (bounced by the suspend -script) and NTP sync works after connect. +The plan's option 1 shipped as designed: `generic_wifi.c` remains unchanged and +NextUI owns the supplicant. Evidence for scan/connect/forget, resume recovery, and +NTP synchronization is recorded in NET-01 and NET-02 of the +[test report](08-testing-status.md#network-and-online-features). `skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh`: - launch.sh stops NetworkManager; wifi_init owns a wpa_supplicant instance with the @@ -29,14 +37,15 @@ script) and NTP sync works after connect. - `rfkill`: h700 builds its own minimal `/dev/rfkill` ioctl tool (03) Suspend interplay: WiFi does not survive `mem` suspend on its own; the suspend -script stops the stack in `before()` and restarts it in `after()` (06). Verified -working across sleep on RG40XXV. +script stops the stack in `before()` and restarts it in `after_async()` (06). NET-02 +records the resulting resume behavior. -RetroAchievements login and unlock work on RG34XXSP, including credential entry through -the on-screen keyboard. Pak Store and OTA update are explicitly excluded from the alpha -scope; testing is not applicable and they are not alpha release gates. +RetroAchievements uses this connection path; its current evidence is NET-03. Pak Store +and OTA are separate product scope; their recorded status and disposition are in the +[test report](08-testing-status.md#network-and-online-features) and +[roadmap](09-roadmap.md#stretch-goals-and-out-of-scope-work). -## Bluetooth (as shipped — system BlueZ, controller transport and stock A2DP enabled) +## Bluetooth architecture (system BlueZ and stock A2DP) - NextUI uses the stock BlueZ stack → no `btmanager`/upgrade-pakz. A clean 2026 RG40XXV reports 5.66 for both `bluetoothd` and `bluetoothctl`; earlier firmware @@ -47,30 +56,36 @@ scope; testing is not applicable and they are not alpha release gates. `hci0`, and only then starts or restarts stock `bluetooth.service`. - Bluetooth lifecycle failures are recorded in `$LOGS_PATH/bluetooth.txt` instead of being silently discarded. -- `HAS_BTAGENT` enabled for h700 (settings pairing agent; jammy sysroot has glib — - links fine, loads on device). It is the persistent pairing agent and owns the - pairable window; the init script does not create a short-lived `bluetoothctl` - agent. +- `HAS_BTAGENT` is enabled for H700 (the Settings pairing agent; the Jammy sysroot + supplies glib). Settings registers it as BlueZ's default agent while the Bluetooth + menu/pairing window is active and unregisters it after a successful pairing. The + init script enables discoverable/pairable state but does not run a + `bluetoothctl` agent. - **BT audio: stock-first A2DP enabled** — the clean 2026 RG40XXV stock image has BlueALSA 4.2.0, its ALSA plugins/configuration, and its D-Bus policy. `bt_init.sh` - starts `bluealsa -p a2dp-source --a2dp-volume --initial-volume=100` after BlueZ is - ready and verifies `org.bluealsa`. The H700 `audiomon` build omits only the + starts `bluealsa -p a2dp-source --initial-volume=100` after BlueZ is ready and + verifies `org.bluealsa`. It intentionally keeps BlueALSA's default volume mode; + `--a2dp-volume` can leave AirPods at volume zero on this firmware. The H700 + `audiomon` build omits only the `delay 0` setting rejected by the stock plugin; its remaining behavior is shared. BlueALSA, its ALSA plugins, SBC, and BlueZ all remain stock and are not bundled or - replaced. AirPods 4 ANC playback was verified earlier on RG40XXV. Full lifecycle - remainder (reconnect, game-switch, suspend/resume, sample-rate Settings UI) is - **blocked** as of 2026-07-20: BT scan/pair broken on stock and BaseOS - (device/firmware) — tracked in 05/08. -- BT controller transport is verified on RG40XXV: Settings discovers, pairs, trusts, - connects, and exposes a DualSense as an SDL joystick and evdev input device. + replaced. For AirPods 4 ANC, NextUI retains pairing, manual Connect selects the + audio route, and casing the buds returns audio to the internal speaker. Auto-connect + is not assumed because nearby paired iPhone or Mac devices may take precedence. See + AUDIO-04 for the recorded evidence and the + [roadmap](09-roadmap.md#accepted-behavior-and-non-gates) for the supported path. +- BT controller transport: Settings discovers, pairs, trusts, connects, and exposes a + DualSense as an SDL joystick and evdev input device; INPUT-05 records the device + evidence. Button semantics are not fully normalized because the shared tg5040/tg5050/H700 input architecture interprets raw SDL joystick indices using platform constants. - That is a cross-platform controller-mapping issue, not an H700 Bluetooth bring-up - gap, and is deliberately deferred from this branch. + That is a cross-platform controller-mapping issue rather than a controller + transport failure. INPUT-05 and INPUT-06 record the observed attachment and mapping + results. ## Diagnostics `PLAT_wifiDiagnosticsEnabled/Enable` + BT equivalents: tg5040 mechanism (verbose logs -under `$LOGS_PATH`) carried over. H700 intentionally does not add its own keep-network -flag or crash-loop SSH rescue path for alpha; collect logs from TF2 after poweroff or -use stock SSH while the device is already reachable. +under `$LOGS_PATH`) carried over. H700 has no separate keep-network flag or crash-loop +SSH rescue path. Collect logs from TF2 after poweroff or use stock SSH while the device +is already reachable. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index bc7412d7b..b8def4e3b 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -1,189 +1,166 @@ -# 08 — Testing Status & Regression Guardrails +# 08 — Testing Status -## Test fleet - -| Device | Evidence | Role | -|---|---|---| -| RG40XXV | Probed live | Primary bring-up device | -| RG34XXSP | User-tested | General parity with RG40XXV; sleep/wake + lid validated here | -| RG28XX | User-tested | Rotation validated: UI, game scaling, bootlogo apply working | -| RGcubexx | Community-tested (Discord) | External validation target; general UI scaling confirmed 720×720 | -| TrimUI Brick TG5040 | Probed live | Regression reference (behavioral 1:1 comparisons) | - -**Dev-loop tips:** -- The stock OS runs sshd with a full Ubuntu userland — iterate by `scp`ing freshly - built `.elf`s into `.system/h700/bin` and restarting the launch loop. No SD-card - shuffling after first install. -- Repeated `nextui.elf` crashes now log the crash limit and power off. Use TF2 logs - for crash-loop debugging; the release runtime powers off instead of starting SSH. +This document is the canonical H700 test report. It records what was tested, the +result, and the device that supplied the evidence. It does not decide whether a test +blocks Alpha, Beta, RC, or Release; those decisions live in +[09-roadmap.md](09-roadmap.md). Detailed per-core coverage lives in +[10-core-game-matrix.md](10-core-game-matrix.md). -## Validation matrix (status as of 2026-07-20, RG40XXV unless noted) +Results recorded through 2026-07-20. -✅ tested & passed ⚠️ tested, has issues ⬜ untested ➖ explicitly out of alpha scope ✖ not implemented +## Status and evidence rules -### Functional -| Item | Status | -|---|---| -| Cold boot to NextUI, stable across 10+ reboots, reasonable boot time | ✅ | -| Browse/launch/quit games across system pak cores; save/load state; in-game menu | ✅ | -| Fast resume (BTN_RESUME) + auto-resume after power loss | ✅ | -| Brightness 0–10 + colortemp ramps; persist across reboot | ✅ | -| MENU short-tap → shortcuts overlay vs. hold → brightness (compound-tap fix, see 00/03) | ✅ tested on RG34XXSP; firmware quirk is common to the H700 line, expected fine on all RG XX | -| Displaycal RGB gains: act, persist, survive sleep + game launch | ✅ | -| Displaycal survives reboot (was clobbered to defaults every boot; fixed 2026-07-09) | ✅ verified on RG40XXV and RG34XXSP | -| Fresh-install defaults: brightness 4, displaycal off/neutral | ✅ verified on RG40XXV (deleted msettings.bin + reboot) | -| Dead enhance controls (contrast/saturation/exposure) hidden on h700 | ✅ code-gated and visually verified on RG40XXV 2026-07-09 | -| Fn-switch settings hidden on h700 | ✅ capability-gated; RG XX devices have no Fn switch | -| FN1/FN2/HOME assignable pak actions | ➖ not supported (no dedicated keys; `BTN_FN*` stubs) | -| Keep awake over USB | ➖ not supported (`PLAT_isUSBConnected` stub; tg5040-only UI) | -| Shaders (all shipped .glsl), overlays, effects on Mali-G31 | ✅ | -| Volume UI + levels, mute through 100% | ✅ tested on RG40XXV and RG34XXSP; no known issues | -| Rumble (moto on/off) | ✅ | -| WiFi scan/connect/forget | ✅ | -| WiFi survives sleep; NTP sync | ✅ | -| BT adapter init + controller pairing/attachment | ✅ RG40XXV: vendor UART attach creates `hci0`; stock BlueZ 5.66 discovers, pairs, trusts, and connects a DualSense; NextUI opens it as an SDL joystick plus `/dev/input/event3`; five restart cycles passed without duplicate attach/daemon processes. Raw button semantics remain a platform-agnostic tg5040/tg5050/H700 mapping issue and are out of scope for this branch | -| Deep sleep (auto/manual) + wake | ✅ core paths work on RG34XXSP and RG40XXV, including in-game resume and power-off auto-resume. RG34XXSP closed-lid POWER behavior accepted as policy (light sleep only — see lid row). Charging suppresses deep sleep by shared product policy — accepted for beta (06) | -| Files app (NextCommander): input, scaling, first-frame render | ✅ tested on RG40XXV and RG34XXSP; PPU 2 retained for alpha | -| Input pak: per-device stick layout | ✅ RG40XXV shows working L3 only; RG34XXSP shows working L3/R3. Analog movement is not visualized by the existing Input pak and is out of scope for this port | -| Recently Played + game switcher | ✅ tested on RG40XXV and RG34XXSP | -| Screenshots | ✅ tested on RG34XXSP | -| Box art | ✅ tested at 720×480 on RG34XXSP | -| HDMI output | ⚠️ RG40XXV + TV passes menu/game output and in-game hotplug in both directions, including audio routing. Boot-with-cable, other H700 models, and displays that reject the fixed 1080p60 mode remain untested; HDMI is a stretch feature rather than a beta gate (04) | -| Clean uninstall (delete dmenu.bin → pristine stock) | ➖ removed from test matrix — design-guaranteed: without `/mnt/mmc/dmenu.bin`, stock `dmenu_ln` never launches NextUI on RG XX (hijack is that one file). No separate end-to-end uninstall exercise required for beta/RC (02) | -| Battery % accuracy vs stock | ✅ percentage matches stock on fresh boot (RG34XXSP). After a ~9 h sleep/wake cycle the top-right battery icon and Battery pak were briefly out of sync with each other — level itself is fine; treat the dual-source desync as a future hardening item, not a beta gate | -| Charging detection/indicator; sleep while charging | ✅ indicator works on RG34XXSP; while charging, only light/screen-off sleep is allowed — shared product policy, **accepted for beta** (not a failed deep-sleep attempt) (06) | -| Overnight drain (8 h mem-sleep vs stock baseline) | ⚠️ partial — RG34XXSP deep sleep ~8.5 h: 40% → 33% (~7% capacity). Higher than hoped; re-test with `voltage_now` (not %) and a stock OS baseline before treating as pass/fail | -| RetroAchievements login + unlock | ✅ works on RG34XXSP; on-screen credential keyboard also verified | -| Pak Store install | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | -| OTA update flow | ➖ explicitly excluded from alpha scope; testing is not applicable for this release | -| BT controller semantic mapping | ⚠ pairing and input attachment pass; raw button indices vary by controller and require a later cross-platform tg5040/tg5050/H700 normalization change | -| Bootlogo pak, RG40XXV 640×480 | ✅ carousel/apply/backup tested; restore inferred via same apply path | -| Bootlogo pak, RG34XXSP 720×480 | ✅ fixed 2026-07-13 — all 23 presets load and render with the current build. First-apply `original.bmp` backup and restore also pass (user-verified 2026-07-20). Pak logs path/count/load errors and shows the searched path on screen when empty; apply guarded against an empty list | -| Bootlogo pak, RG28XX 480×640 | ✅ apply user-tested: logo renders upright at boot. Previews were shown panel-native (90° off) and are now rotated to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`) | -| BT A2DP audio | ⚠ partial — earlier RG40XXV pass: AirPods 4 ANC pair/connect + user-audible SBC game audio; internal speaker mutes/restores correctly (blockers were stock `delay 0` rejection + zero BlueZ transport volume; fixed with stock BlueALSA + native volume). **Auto reconnect, menu/game and game/game switching, five suspend/resume cycles, and case/disconnect speaker-restore revalidation are blocked** as of 2026-07-20: BT powers on but scans no devices / cannot pair on **both stock OS and BaseOS** (device/firmware environment issue, not NextUI-specific). Re-run the full lifecycle matrix once scanning works again (05/07) | -| BT maximum sampling rate | ⚠ Matches tg5040 and defaults to 48000 Hz. AirPods accepted both 44100 and 48000 during probing (escape hatch, not the silence fix). **Settings 44100/48000 change+persist revalidation blocked** by the same device-wide scan/pair outage (stock + BaseOS). The inherited connection test also sees controller-only ACL links; at the 48000 default this is harmless; audio-specific detector is a cross-platform cleanup, not an H700 beta blocker | -| Headphone jack detection | ✅ hardware path pass — plug-in auto-mutes the speaker and routes audio to headphones with no software help (RG34XXSP / H700 line). NextUI software jack state (`SetJack` / separate HP volume / HP icon) is **not** wired on h700 (keymon never monitors jack; `GetJack` stays 0). That is Brick-style polish only; correct routing does not depend on it. Optional follow-up if HP-icon or dual-volume is desired (05) | -| RG34XXSP: general H700 port + 720×480 UI | ✅ Battery, Game Tracker, Input, Clock, Settings, Files, keyboard, box art, game switcher, and in-game menus work well; UI scaling good at 720×480 | -| RG34XXSP: lid sleep/wake | ✅ accepted documented policy — lid close/open work. POWER can wake **light** sleep while the lid is closed; in **deep** sleep, POWER that briefly wakes the unit returns it to sleep if the lid is still closed. Not treated as a beta defect (06) | -| RG28XX: rotated UI + games | ✅ user-tested — UI correct; minarch Aspect/Fullscreen were broken by app-side double-rotation, fixed by removing `should_rotate` (rotation is driver-level only — 04) | -| RGcubexx: 720×720 | ⚠️ partial external validation only — general UI scaling passes (Discord). No local device; no further testing as of 2026-07-20. Full functional matrix remains open for external testers | -| Resolution-specific overlays (panel-matched assets) | ➖ no H700 panel-sized overlay pack ships today. Tree has empty per-system folders plus two GBA PNGs at **1024×768** (Brick). Overlay *pipeline* already ✅ under shaders/effects; panel-matched content is a content follow-up, not a beta gate | - -### Performance -| Item | Status | +| Status | Meaning | |---|---| -| GBA/SNES full speed with vsync, no audio underruns | ✅ on RG40XXV and in tested RG34XXSP games | -| PS1 launch/performance | ✅ on RG40XXV and RG34XXSP. The apparent RG34XXSP launch regression was a stale/corrupted core artifact; a clean core rebuild fixed it | -| Frame pacing / tearing / input lag vs stock RA | ✅ gameplay-tested on RG40XXV; no visible pacing, tearing, latency, or audio issues (not instrumented) | -| Manual governor changes don't stutter audio | ✅ tested in-game on RG34XXSP | -| Auto governor load/frequency selection | ✅ MD Auto CPU slowdown fixed (user-verified 2026-07-20); manual powersave/performance remain smooth | +| ✅ Pass | The stated test completed successfully | +| ⚠️ Partial | Useful behavior passed, but the row has a known issue or incomplete coverage | +| ⬜ Not run | No completed result is recorded yet | +| ➖ Not applicable | The behavior is unsupported or guaranteed by design rather than a runtime test | +| ❌ Fail | The stated test failed | + +The H700 devices share one platform implementation, SoC, stock-OS integration, and +core runtime. A successful shared-runtime test on one representative H700 device +counts for the family. Repeat it on another model only when panel geometry/rotation, +lid, controls, connectors, firmware, or model-specific code differs, or when evidence +suggests a model-specific regression. A named device is the evidence source, not a +limit on support. -### RG34XXSP core/game bring-up - -Detailed results and the remaining system backlog are tracked in -[10-core-game-matrix.md](10-core-game-matrix.md). +## Test fleet -| System/core | Status | -|---|---| -| GB / GBC / GBA / FC / SFC | ✅ games launch and play perfectly | -| A2600 / MGBA / SMS | ✅ launch and play (2026-07-20 smoke) | -| MD / PicoDrive | ✅ launches and plays; former Auto CPU slowdown near 480 MHz is fixed (user-verified 2026-07-20) | -| FBN / FBNeo | ⚠️ partial — with required BIOS, launch and play are OK (user-verified 2026-07-20). Missing-BIOS path still hard-locks MinArch (no menu/exit). **beta1:** ship as known issue (most users on happy path with BIOS). **RC gate:** must fix error recovery before release candidate | -| PS / PCSX-ReARMed | ✅ launches and plays after a clean core rebuild; the earlier crashes were caused by a stale/corrupted core, not an H700 runtime defect | -| Remaining shipped cores | ⚠️ expanded 2026-07-20: A2600, MGBA, SMS pass in addition to GB/GBC/GBA/FC/SFC/MD/PS. Full EXTRAS long-tail still pending (see 10) | - -### Beta1 vs RC gate summary - -The matrix does not require every long-tail row to turn green before beta1. - -**beta1 may ship with:** -- FBNeo missing-BIOS hard-lock as a **known issue** (happy path with BIOS is fine; - most users will not hit it). Document in release notes. -- SIGUSR1 shutdown and dirty-card `fsck` recovery still untested (RC polish). -- BT audio lifecycle incomplete where device/firmware scan is broken. -- Overnight drain partial (voltage/stock re-test when convenient). -- Remaining EXTRAS cores untested beyond the green rows in 10. - -**RC must close (or explicitly re-descope):** -- **FBNeo missing-BIOS recovery** — major bug; fix so MinArch returns control - without a power cycle. Preserve the case as a regression test afterward. -- SIGUSR1 end-to-end + dirty-card recovery smoke (RC polish gauntlet). -- Prefer BT lifecycle revalidation once device BT scan works again. -- Prefer overnight drain voltage-vs-stock pass. - -**Closed / not required as test rows:** -- Clean uninstall — design-guaranteed by deleting `dmenu.bin` (removed from matrix). -- MU-style theme — install prerequisite only. -- Closed-lid POWER, charging→light-sleep, headphone hardware route — accepted policy. -- MD Auto CPU — fixed. - -RGcubexx full hardware coverage, HDMI boot/EDID/model expansion, cross-platform -controller normalization, Pak Store/OTA, per-panel calibration, H700-sized overlay -content packs, and the dedicated toolchain image remain post-beta / optional unless -scope is promoted. - -### RG34XXSP remaining validation - -- To claim full parity rather than alpha coverage, repeat the RG40XXV-scoped rows on - RG34XXSP: cold-boot soak, fresh-install defaults, brightness/colortemp behavior, - the full shader/effect sweep, rumble, and WiFi scan/connect/forget/sleep/NTP. -- Run the full per-core protocol in [10](10-core-game-matrix.md), including menu, - clean exit, save/load state, sustained Auto CPU play, sleep/resume, and power-off - auto-resume. The initial green results establish launch/gameplay, not every one of - those checks for every system. -- Screenshots pass on RG34XXSP. UI scaling good at 720×480. Panel-matched overlay - assets are not shipped for H700 (only Brick-sized GBA PNGs exist). -- FBNeo with BIOS: pass. Missing-BIOS hard-lock: **known issue for beta1**; **RC - must fix**, then preserve as a regression test. -- Preserve PS1 in the release-candidate smoke pass so a stale or corrupted packaged - core cannot recreate the resolved launch failure. -- ~~Reproduce the MD Auto CPU behavior~~ Fixed (user-verified 2026-07-20). -- ~~Test 720×480 Bootlogo backup and restore~~ Pass on RG34XXSP (2026-07-20). -- Test BT controller pairing/input when device BT scan works. Overnight drain - partial on RG34XXSP (~7% over 8.5 h); re-test with voltage_now vs stock (RC - polish). Battery % vs stock passes; icon-vs-Battery-pak desync is a follow-up. -- ~~Clean uninstall~~ removed from matrix (delete `dmenu.bin` is sufficient by - design). SIGUSR1 + dirty-card recovery: **RC polish**, untested OK for beta1. - MU-style theme is a documented stock-side install prerequisite only. - -### Robustness -| Item | Status | -|---|---| -| SIGUSR1 from `launcher.sh stop` doesn't corrupt | ⬜ RC polish — shim traps USR1; end-to-end untested; not a beta1 gate | -| SD dirty-card recovery (`fsck.fat -a` hook in boot shim) | ⬜ RC polish — code in place; not a beta1 gate | -| Stock “MU style” theme vs NextUI hijack | ➖ closed — not a NextUI runtime test. Selecting stock/stockmod **MU style 1/2** makes `dmenu_ln` prefer the MU frontend over `/mnt/mmc/dmenu.bin`, so NextUI never starts and no “STOCK TARGET REQUIRED” splash can appear. Confirmed: device just boots stock/MU UI. Nothing the shim can do from outside that path; install docs already require **old style** theme (`skeleton/BASE/README.txt`). The boot-shim `muos1.ini`/`muos2.ini` warning is effectively unreachable for the same reason (override happens before our `dmenu.bin` runs) | - -## Regression guardrails - -- **Every h700 PR must list its `workspace/all/` touches and re-run - `make PLATFORM=tg5040 build`** (both platforms build from the same shared tree). - The branch's complete list of net shared-code touches, for reference: - 1. `workspace/all/audiomon/audiomon.cpp` — `bluetoothAudioAvailable()` guard (skip A2DP without bluealsa) plus an H700-only compile guard that omits the unsupported `delay 0` line (+Makefile dep fix) - 2. `workspace/all/common/generic_video.c` — hard `exit(1)` on SDL/GL init failures - 3. `workspace/all/minarch/makefile` — h700 added to tg5040-class feature filters (RA/CHD/SRM/samplerate) - 4. `workspace/all/nextui/nextui.c` — startup LOG_info breadcrumbs - 5. `workspace/all/settings/btmenu.cpp/.hpp` — `rateItem` made optional (`NO_BT_AUDIO`) - 6. `workspace/all/settings/makefile` — h700 block (`-DHAS_BTAGENT`, btagent, glib; the temporary `NO_BT_AUDIO` gate was removed after stock BlueALSA validation) - 7. `workspace/all/settings/settings.cpp` — Anbernic vendor/models, h700 platform + capability flags - 8. `workspace/all/syncsettings/syncsettings.c` — also restore colortemp/contrast/saturation/exposure/displaycal on resume - 9. `workspace/makefile` — rfkill for h700; ledcontrol gated to tg50x0, bootlogo to tg50x0+h700 - 10. Root `makefile` + `makefile.toolchain` — h700 platform + tg5040-image reuse - 11. `workspace/all/common/api.c`/`api.h` — `PWR_requestSleep()` (lid sleep) and - `SND_quit()` in `PWR_enterSleep` (close ALSA before suspend; see 06). Both are - platform-agnostic changes — watch them when rebasing onto main. - 12. `workspace/all/bootlogo/bootlogo.c` — load/path/count diagnostics, on-screen - empty-state, empty-list apply guard, and the optional - `BOOTLOGO_PREVIEW_ROTATE_CW` preview-rotation hook (defaults off; only h700's - platform.h defines it, for the RG28XX). -- **New-button / platform-API stubs must land on every platform.** The tg5050 L4/R4 - work and later main features (`BTN_FN*` #788, `PLAT_isUSBConnected` #783) break - h700 until matching defines/stubs exist. When main grows a button or `PLAT_*` - hook, grep every `platform/platform.h` / `platform.c` — and verify with a full - `make PLATFORM=h700` (single-pak builds miss some translation units). -- **Re-run the 00-device-facts probes after each Anbernic stock-firmware update.** - Paths have been stable historically, but `dmenu_ln`/muOS hooks are - stockmod-version-dependent, and the model-string detector reads a stock binary. -- When adding or promoting a device (34XXSP/28XX/cube): walk this matrix top to - bottom on that device; the ⬜ rows above are the backlog for RG40XXV too. - (RG34XXSP hallkey semantics are settled: 1 = lid open, polled from sysfs, no evdev - switch exists, and nothing else in the stock/stockmod stack reacts to it — 06.) +| Device | Evidence | Hardware coverage | +|---|---|---| +| RG40XXV | Probed live | 640×480, one stick, HDMI, Bluetooth audio; family baseline | +| RG34XXSP | User-tested | 720×480, dual sticks, clamshell lid | +| RG28XX | User-tested | 480×640 portrait panel and rotation | +| RGcubexx | Community-tested | 720×720 general UI scaling only | +| TrimUI Brick TG5040 | Probed live | Shared-code regression reference | + +## Build and binary compatibility + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| BUILD-01 | CI-style H700 staging build (`make setup`, then `make h700`) | ✅ | CI/release build | H700 binaries, tools, cores, libraries, boot shim, and installer assets stage successfully | +| BUILD-02 | Full tg5040 regression build after shared-code changes | ⬜ | Candidate-specific | Must be recorded for the actual candidate; single-pak builds are insufficient | +| BUILD-03 | Jammy `settings.elf` runtime linkage check | ✅ | Automated container check | H700 library path resolves and required gio/glib linkage is present | + +## Boot, install, and launcher + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| BOOT-01 | Cold boot to NextUI and 10+ reboot soak | ✅ | RG40XXV | Stable boot with reasonable startup time | +| BOOT-02 | Stock-card hijack with the required **old style** theme | ✅ | RG40XXV/RG34XXSP | `/mnt/mmc/dmenu.bin` launches NextUI from TF2 | +| BOOT-03 | Repeated launcher crash limit | ⬜ | Code present | The launcher implements a five-consecutive-crash cutoff followed by poweroff, but it has not been exercised end to end | +| BOOT-04 | Remove `dmenu.bin` to restore stock boot | ➖ | Design inspection | Stock `dmenu_ln` cannot launch NextUI when the single hijack file is absent; no separate uninstall workflow exists | +| BOOT-05 | Stock **MU style** theme behavior | ✅ | On-device observation | MU style bypasses `/mnt/mmc/dmenu.bin` and boots the stock/MU frontend; NextUI cannot display an in-shim warning | + +## Display and user interface + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| DISP-01 | Launcher, settings, keyboard, and in-game UI rendering | ✅ | RG40XXV, RG34XXSP, RG28XX | Clean rendering at 640×480, 720×480, and rotated 480×640 | +| DISP-02 | Brightness 0–10 and color-temperature behavior/persistence | ✅ | RG40XXV | Controls act and persist; fresh default brightness is 4 | +| DISP-03 | DisplayCal RGB gains, persistence, sleep, and game launch | ✅ | RG40XXV, RG34XXSP | Gains act and persist across reboot, sleep, and game launch | +| DISP-04 | Dead enhance controls and Fn-switch settings hidden | ✅ | RG40XXV/code inspection | Contrast/saturation/exposure and the nonexistent RG XX Fn switch are capability-gated | +| DISP-05 | Shaders, overlay pipeline, and effects on Mali-G31 | ✅ | RG40XXV | All shipped GLSL paths tested; this tests the pipeline, not panel-sized overlay content | +| DISP-06 | Box art, game switcher, and alpha-blended assets | ✅ | RG34XXSP | Clean at 720×480 after the 64-bit libpng fix | +| DISP-07 | Screenshots | ✅ | RG34XXSP | Capture succeeds at 720×480 | +| DISP-08 | HDMI video hotplug and scaling | ✅ | RG40XXV + TV | Menu and game output, plug/unplug in both directions, repeated cycles, autosave/resume, and 1280×720 framebuffer scaling pass | + +## Input and controllers + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| INPUT-01 | Local controls in launcher, games, and menus | ✅ | RG40XXV, RG34XXSP, RG28XX | Raw evdev input path works across tested models | +| INPUT-02 | MENU short tap versus hold | ✅ | RG34XXSP | Short tap opens shortcuts; hold changes brightness despite the firmware compound event | +| INPUT-03 | Per-device stick layout, analog movement, and L3/R3 | ✅ | RG40XXV, RG34XXSP | The Input pak correctly visualizes the RG40XXV left stick and the RG34XXSP left/right sticks, including movement and their L3/R3 clicks | +| INPUT-04 | Rumble | ✅ | RG40XXV | `moto` on/off path works | +| INPUT-05 | Bluetooth controller discovery, pairing, and attachment | ✅ | RG40XXV + DualSense | Discovers, pairs, trusts, connects, and exposes SDL joystick plus evdev; five restart cycles produced no duplicate daemon/attach processes | +| INPUT-06 | Bluetooth controller semantic mapping | ⚠️ | DualSense/shared tg50x0 path | Attachment passes, but raw button indices vary by controller and are not normalized across platforms | + +## Audio + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| AUDIO-01 | Internal volume UI, mute, and levels from 0–100% | ✅ | RG40XXV, RG34XXSP | Audible levels and reversed `digital volume` scale behave correctly | +| AUDIO-02 | Game audio and underruns | ✅ | RG40XXV, tested RG34XXSP games | GBA/SNES and broader gameplay have clean audio with no observed underruns | +| AUDIO-03 | Headphone insertion and speaker routing | ✅ | RG34XXSP | Hardware auto-mutes the speaker and routes to headphones; NextUI does not expose a separate HP icon/volume | +| AUDIO-04 | Bluetooth A2DP pairing and playback | ✅ | RG40XXV + AirPods 4 ANC | Pairing is remembered; manual Connect routes audible SBC audio; returning AirPods to the case restores the internal speaker. Nearby iPhone/Mac devices may win auto-connect | +| AUDIO-05 | HDMI audio routing and restoration | ✅ | RG40XXV + TV | HDMI route is audible; unplug restores the panel/internal route | + +## Network and online features + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| NET-01 | WiFi scan, connect, and forget | ✅ | RG40XXV | NextUI-owned wpa_supplicant path works | +| NET-02 | WiFi after sleep and NTP synchronization | ✅ | RG40XXV | Network recovers after sleep and system time synchronizes | +| NET-03 | RetroAchievements login and unlock | ✅ | RG34XXSP | Credential entry through the on-screen keyboard and achievement unlock pass | +| NET-04 | Pak Store install | ➖ | Scope | Not exercised for the H700 port | +| NET-05 | OTA update flow | ➖ | Scope | Not exercised for the H700 port | + +## Power, sleep, and battery + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| POWER-01 | Manual/automatic deep sleep and wake | ✅ | RG40XXV, RG34XXSP | Repeated sleep/wake, in-game resume, and wake without the former ALSA delay pass | +| POWER-02 | Fast resume and power-off auto-resume | ✅ | RG40XXV, RG34XXSP | Resume returns to the running game as designed | +| POWER-03 | RG34XXSP lid close/open | ✅ | RG34XXSP | Close sleeps and open wakes. POWER may wake light sleep with lid closed; deep sleep re-sleeps while the lid remains closed | +| POWER-04 | Charging indication and sleep while charging | ✅ | RG34XXSP | Indicator works; shared product behavior permits light/screen-off sleep and suppresses deep sleep while charging | +| POWER-05 | Battery percentage versus stock | ✅ | RG34XXSP | Fresh-boot percentage matches stock; after long sleep the top-bar icon and Battery pak briefly disagreed with each other | +| POWER-06 | Overnight suspend drain versus stock | ⚠️ | RG34XXSP | First point: about 7% over 8.5 hours. No voltage-based stock comparison is recorded | + +## Games and performance + +See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger. + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| GAME-01 | Browse, launch, play, menu, save/load, and clean exit | ✅ | RG40XXV, RG34XXSP | Primary system pak/core flow works end to end | +| GAME-02 | GB/GBC/GBA/FC/SFC gameplay smoke | ✅ | RG34XXSP | Tested games launch and play correctly | +| GAME-03 | MD/PicoDrive launch, gameplay, and Auto CPU | ✅ | RG34XXSP | Former slowdown near 480 MHz is fixed | +| GAME-04 | PS1/PCSX-ReARMed launch and performance | ✅ | RG40XXV, RG34XXSP | Clean core rebuild fixed the stale/corrupted packaged artifact | +| GAME-05 | FBNeo happy path and missing-BIOS error path | ⚠️ | RG34XXSP | With required BIOS, launch/play pass. Without BIOS, the upstream core stops polling frontend input and MinArch cannot open menu/exit | +| GAME-06 | Remaining EXTRAS core smoke | ⚠️ | RG34XXSP | A2600, MGBA, and SMS pass; the remaining long-tail systems are not fully covered | +| PERF-01 | GBA/SNES full speed with vsync | ✅ | RG40XXV, tested RG34XXSP games | Full speed with no observed audio underruns | +| PERF-02 | Frame pacing, tearing, and input latency | ✅ | RG40XXV | No visible issue during gameplay; result is observational, not instrumented | +| PERF-03 | Manual CPU governor changes during play | ✅ | RG34XXSP | Powersave/performance changes do not stutter audio | +| PERF-04 | Automatic governor load/frequency selection | ✅ | RG34XXSP | MD Auto CPU regression is resolved | + +## Applications and device-specific hardware + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| APP-01 | Files/NextCommander input, scaling, and first frame | ✅ | RG40XXV, RG34XXSP | Works at PPU 2 | +| APP-02 | Recently Played and game switcher | ✅ | RG40XXV, RG34XXSP | Both flows work; rendered assets are clean | +| DEV-01 | RG40XXV 640×480/single-stick baseline | ✅ | RG40XXV | UI, input, game runtime, HDMI, and Bluetooth paths pass | +| DEV-02 | RG34XXSP 720×480/lid/dual-stick delta | ✅ | RG34XXSP | UI scaling, lid, controls, apps, and games pass | +| DEV-03 | RG28XX 480×640 rotation delta | ✅ | RG28XX | UI, game Aspect/Fullscreen scaling, bootlogo apply, and rotated preview pass | +| DEV-04 | RGcubexx 720×720 delta | ⚠️ | Community report | General UI scaling passes; no full local functional/core walk exists | +| DEV-05 | Bootlogo 640×480 apply/backup | ✅ | RG40XXV | Carousel, apply, backup, and original entry pass; restore uses the same apply path | +| DEV-06 | Bootlogo 720×480 preview/apply/backup/restore | ✅ | RG34XXSP | All 23 presets render; first backup and restore pass | +| DEV-07 | Bootlogo 480×640 apply and preview orientation | ✅ | RG28XX | Applied logo and rotated previews are upright | + +## Recovery and robustness + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| ROBUST-01 | Stock `launcher.sh stop` SIGUSR1 does not terminate the NextUI boot shim | ⬜ | Code present | The shim deliberately ignores USR1 with `trap '' USR1`; no end-to-end result is recorded | +| ROBUST-02 | Dirty FAT card recovery via `fsck.fat -a` | ⬜ | Code present | Boot hook exists; no induced dirty-card recovery result is recorded | + +## Capability boundaries + +| ID | Test | Status | Evidence/device | Result and notes | +|---|---|---|---|---| +| CAP-01 | FN1/FN2/HOME assignable pak actions | ➖ | RG XX hardware/platform API | RG XX devices have no dedicated buttons; Settings hides the assignment UI | +| CAP-02 | Keep awake over USB data connection | ➖ | H700 platform API | `PLAT_isUSBConnected()` is a stub; charging-state power behavior is covered by POWER-04 | + +## Test execution protocol + +- Candidate builds must record BUILD-01, BUILD-02, and BUILD-03 against the actual + artifact being promoted. +- Changes under `workspace/all/` require both H700 and tg5040 builds. +- A new device needs a short shared-runtime smoke plus tests for its hardware/model + delta; it does not need the full matrix repeated without a specific risk. +- Re-run stock integration probes after an Anbernic firmware update because boot, + model detection, WiFi, Bluetooth, and sysfs paths are firmware-coupled. +- When shared code adds a button or `PLAT_*` API, verify all platform definitions and + run a full build; single-pak builds can miss translation units. diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index e75f2e8b4..50b56b612 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -1,222 +1,138 @@ -# 09 — Roadmap: beta1 → RC → 9.5/10 port +# 09 — Release Roadmap and Gates -Hardware results recorded through 2026-07-20 (beta-prep test walkthrough). -Branch tip note may lag; treat the matrix in 08/10 as source of truth for status. -Ordered by impact within each section. +This document owns the H700 release lifecycle: what each stage proves, which tests +gate promotion, and what is deferred or optional. Test results are not repeated here; +every test ID points to the canonical report in +[08-testing-status.md](08-testing-status.md). Per-core detail remains in +[10-core-game-matrix.md](10-core-game-matrix.md). -## beta1 vs RC gates +## Current position -beta1 is allowed to ship with documented known issues and incomplete RC polish. -RC must clear the major defects below (or explicitly re-descope in writing). +Alpha 1, Alpha 2, and Alpha 3 are complete. The port is ready to produce a Beta +candidate. Functional Beta gates pass; the candidate-specific H700/tg5040 build and +linkage checks must be recorded against the artifact that will be published. -### beta1 (ship now) -| Item | Status for beta1 | +## Stage roadmap + +The Alpha rows normalize the completed bring-up history into clear stage scopes; use +these definitions when reading older alpha artifacts and commit notes. + +| Stage | Purpose and issue focus | Required test areas | Status / exit | +|---|---|---|---| +| Alpha 1 — platform bring-up | Prove stock-card boot, basic display/input/audio, WiFi, and playable cores on the RG40XXV baseline | [BUILD-01](08-testing-status.md#build-and-binary-compatibility), [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | ✅ Complete | +| Alpha 2 — family expansion | Fix sleep/Files/UI regressions and prove real hardware deltas: RG34XXSP panel/lid/sticks, RG28XX rotation, Bootlogo sizes, and shared capability gating | [POWER-01, POWER-03](08-testing-status.md#power-sleep-and-battery), [APP-01](08-testing-status.md#applications-and-device-specific-hardware), [DISP-02, DISP-03, DISP-04, DISP-05, DISP-06, DISP-07](08-testing-status.md#display-and-user-interface), [INPUT-02, INPUT-03](08-testing-status.md#input-and-controllers), [DEV-02, DEV-03, DEV-05, DEV-06, DEV-07](08-testing-status.md#applications-and-device-specific-hardware) | ✅ Complete | +| Alpha 3 — Beta hardening | Close feature gaps and ambiguous policies: HDMI, Bluetooth controller/audio, screenshots, headphone route, MD Auto CPU, PS1 packaging, and representative core smoke | [DISP-08](08-testing-status.md#display-and-user-interface), [INPUT-05](08-testing-status.md#input-and-controllers), [AUDIO-03, AUDIO-04, AUDIO-05](08-testing-status.md#audio), [GAME-03, GAME-04, GAME-06](08-testing-status.md#games-and-performance), [PERF-04](08-testing-status.md#games-and-performance) | ✅ Complete; partial long-tail rows are classified below | +| Beta — public validation | Publish the supported H700 family build, collect broader device/firmware evidence, and fix any new critical regression | Beta entry gates below | Ready to cut after candidate checks | +| RC — release qualification | Freeze scope, close recovery checks, validate the packaged candidate, and accept or fix all Beta findings | RC entry gates below | Planned | +| Release — supported baseline | Promote an RC with no open release blocker and with support/known-issue documentation matching behavior | Release gates below | Planned | + +## Beta entry gates + +All required rows must pass on the Beta artifact. Family-level evidence is sufficient +unless the code or hardware differs. + +| Gate | Required tests | Current disposition | +|---|---|---| +| Candidate build integrity | [BUILD-01, BUILD-02, BUILD-03](08-testing-status.md#build-and-binary-compatibility) | Pending only on the published-candidate run | +| Boot and shared runtime | [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | Satisfied | +| Power and resume | [POWER-01, POWER-02](08-testing-status.md#power-sleep-and-battery) | Satisfied | +| Hardware deltas | [DEV-01, DEV-02, DEV-03](08-testing-status.md#applications-and-device-specific-hardware) | Satisfied; DEV-04 depth is future work | +| HDMI | [DISP-08](08-testing-status.md#display-and-user-interface), [AUDIO-05](08-testing-status.md#audio) | Satisfied | +| Bluetooth audio | [AUDIO-04](08-testing-status.md#audio) | Satisfied | +| Core/performance baseline | [GAME-02, GAME-03, GAME-04](08-testing-status.md#games-and-performance), [PERF-01, PERF-04](08-testing-status.md#games-and-performance) | Satisfied | + +Beta does not require every device or long-tail core to be tested. A new Beta finding +becomes a Beta blocker only when it causes data loss, prevents boot/gameplay on the +supported baseline, breaks a promised feature, or shows that family-level evidence +does not generalize. + +## RC entry gates + +| Gate | Exit condition | |---|---| -| FBNeo missing-BIOS hard-lock | **Known issue** — happy path with BIOS OK; most users fine. Call out in release notes. Fix is **RC**, not beta1-blocking | -| MD Auto CPU | ✅ fixed | -| Screenshots, multi-panel UI scaling, headphone hardware route | ✅ | -| Closed-lid POWER, charging→light-sleep | ✅ accepted policy | -| Clean uninstall | ➖ not a test row — delete `dmenu.bin` is design-guaranteed reverse install | -| SIGUSR1 shutdown, dirty-card fsck | ⬜ untested OK for beta1 → **RC polish** | -| BT audio lifecycle remainder | ⚠ blocked by device BT scan; earlier AirPods playback pass stands | -| Overnight drain | ⚠ partial first data point; voltage/stock re-test is RC polish | -| Long-tail EXTRAS cores | ⬜ partial smoke only (see 10) | -| MU-style theme | ➖ install prerequisite only | - -### RC (must close before release candidate) +| Beta blocker closure | Every critical/high-impact Beta regression is fixed, or the affected feature/model is explicitly removed from RC scope | +| Recovery | [BOOT-03](08-testing-status.md#boot-install-and-launcher), [ROBUST-01 and ROBUST-02](08-testing-status.md#recovery-and-robustness) pass end to end | +| Packaged build | [BUILD-01, BUILD-02, BUILD-03](08-testing-status.md#build-and-binary-compatibility) pass on the RC artifact | +| Regression smoke | [BOOT-01](08-testing-status.md#boot-install-and-launcher), [GAME-01, GAME-04](08-testing-status.md#games-and-performance), [POWER-01, POWER-02](08-testing-status.md#power-sleep-and-battery), [NET-02](08-testing-status.md#network-and-online-features), and [AUDIO-02, AUDIO-04](08-testing-status.md#audio) are rerun on a representative H700 device | +| Hardware-change targeting | Re-run the relevant DEV/INPUT/DISP row only when Beta changes touch that hardware delta | +| Documentation | Install prerequisites, supported models, and accepted issues below match the RC behavior | + +## Release gates + | Gate | Exit condition | |---|---| -| FBNeo error recovery | Missing-BIOS (and similar core hard-fail) returns control to MinArch menu/exit without power cycle; regression test preserved | -| Robustness polish | SIGUSR1 from `launcher.sh stop` end-to-end; dirty-card `fsck.fat` recovery smoke | -| Prefer | BT lifecycle revalidation when device scan works; overnight drain voltage vs stock; more EXTRAS core smoke; PS1 stays in RC smoke (stale-core regression) | -| Build | clean H700 + tg5040 builds + Jammy `settings.elf` ldd check on the candidate | - -Not beta1 or RC gates unless scope changes: full RGcubexx matrix walk, H700-sized -overlay content packs, HDMI boot/EDID/model expansion, cross-platform controller -normalization, the inherited controller-only sample-rate detector, Pak Store/OTA, -per-panel display calibration, software HP jack icon, and a dedicated H700 toolchain -image. - -## P0 — Correctness / robustness - -1. **~~Fix unreliable sleep/wake~~ Done (2026-07-09)** — was four stacked bugs, all - fixed and user-verified on RG34XXSP (see 06 for the full postmortem): the suspend - script died on `set -o pipefail` (unsupported shell → non-zero exit → poweroff - instead of suspend), the persistent `wake_fd` buffered the sleep-triggering - power-key release (instant bounce-back on every 2nd+ sleep), lid close could never - satisfy the sleep condition (now `PWR_requestSleep()`), and wake froze the UI - ~5–10 s (ALSA PCM held open across suspend takes SDL ~9 s to close — now closed in - `PWR_enterSleep`; plus wifi/bt restart moved to `after_async &`). Unblocks the - overnight-drain test. RG40XXV re-test, in-game sleep/resume, and power-off → - power-on → running-game resume have since been verified too. Two RG34XXSP edge - cases: POWER-while-closed is accepted policy (wakes light sleep only; deep sleep - re-sleeps if lid still closed). Charging→light-sleep-only is accepted shared product - policy for beta (2026-07-20). -2. **~~Decide muOS/stockmod coexistence policy~~ Closed (2026-07-20)** — reframed. - The practical break is the stock **MU style** theme (not a separate product - install): it makes `dmenu_ln` skip `/mnt/mmc/dmenu.bin`, so NextUI never starts - and no in-shim warning can appear. Documented install prerequisite: use **old - style** theme (`skeleton/BASE/README.txt`). The boot-shim “STOCK TARGET - REQUIRED” path is effectively unreachable for the same override; leave it as - defensive code, no further policy work for beta. -3. **Robustness gauntlet — scoped 2026-07-20.** Clean uninstall **removed** from the - test matrix (delete `dmenu.bin` is sufficient by design). SIGUSR1 quit and - dirty-SD `fsck` recovery are **RC polish** (untested OK for beta1). Overnight - drain is partial (RG34XXSP ~7% over 8.5 h; voltage/stock re-test = RC polish). - Battery % vs stock passes on RG34XXSP; icon-vs-Battery-pak desync after long sleep - is post-RC hardening. Screenshots, box art, RetroAchievements, Recently Played, - and the game switcher are tested-good on RG34XXSP. Pak Store and OTA remain out - of scope. -4. **~~Document the `digital volume` inversion~~ Done (2026-07-09)** — `100 - val` - is intentional because the control is an attenuator. Volume UI and levels are - tested-good on RG40XXV and RG34XXSP from mute through 100% (05). - -## P1 — Feature completeness - -5. **RG34XXSP polish and runtime fixes** — the 720×480 UI, lid sleep/wake, manual - governor changes, displaycal persistence, RetroAchievements, Files, Recently - Played, game switcher, and the primary 8/16-bit systems are hardware-tested. - Remaining for **RC**: fix FBNeo missing-BIOS hard-lock (happy path OK — known - issue for beta1). Decide whether per-Emu `default-rg34xx.cfg` files are needed. - Track core coverage in [10](10-core-game-matrix.md). (~~MD Auto CPU~~ fixed - 2026-07-20. ~~POWER through closed lid~~ and ~~charging suppresses deep sleep~~ - accepted policy 2026-07-20. ~~720×480 Bootlogo previews~~ fixed 2026-07-13 — - see #13a.) -6. **~~RG28XX rotation validation~~ Done (2026-07-12)** — hardware answered both - questions: the malifbdev-rot driver *does* rotate the GL path (SDL_ROTATION=1 - suffices end-to-end), and the two layers *did* double-rotate — the app-side - `should_rotate` swap broke minarch Aspect/Fullscreen scaling and was removed - (rotation is driver-level only now; postmortem in 04). UI, game scaling, and - bootlogo apply are user-verified; bootlogo previews are rotated to boot - orientation. Still open: decide whether `default-rg28xx.cfg` cfgs are needed. -7. **~~Rebase the h700 branch onto main~~ Done (2026-07-09)** — the branch includes - main through the current shared-code baseline; rebase again before the release - candidate only if main advances. (The alpha/tinted- - bitmap question was solved: the glitches were the missing 64-bit libpng bundle, - not main's alpha changes — 04.) Remaining: **confirm rendering stays clean on - device with the rebased build**: the game switcher and box art are clean at - 720×480. Screenshots pass on RG34XXSP; multi-panel UI scaling passes (incl. - community 720×720). Panel-matched overlay assets remain unshipped content. -8. **Audit Brick-era feature assumptions in shared UI** — NextUI only ever targeted - the Brick / Smart Pro, and several UI pieces hardcode that hardware. Known cases - on RG XX: - - **~~Input tester pak~~ Done (2026-07-09)** — L3/R3 pills were drawn on every - device because `CODE_L3/R3` were unconditional in platform.h, and `is_rg34xx` - wrongly stripped L3/R3 from the RG34XXSP. Now `detect_device()` sets - `dev_has_lstick`/`dev_has_rstick` per model (verified matrix in 03: 35XXH/ - 35XXPro/34XXSP/40XXH/cube dual, 40XXV left-only, 28XX/34XX/35XX+/2024/SP - none — note the RG40XXV has *one* stick, clickable as L3) and those flags - gate CODE_L3/R3, JOY_L3/R3, and the AXIS_* macros. Zero shared-code changes; - the Input pak adapts via its existing `has_*` derivation. Tested-good on - RG40XXV and RG34XXSP. The pak shows L3/R3 click state, not analog movement; - that is its existing cross-platform behavior and is not an H700 port task. - Other variants remain alpha hardware-validation targets. Remaining: - confirm exact `RGXX_MODEL` strings for the RG35xx family / RG40xxH on hardware. - - **~~Fn switch option~~ Done (2026-07-09)** — the sliding Fn button doesn't - exist on any RG XX device, so the settings capability predicate now excludes - h700 while retaining the option on tg5040/tg5050. - - **~~Display settings~~ Done (2026-07-09, `0e60efd`)** — visually verified on - RG40XXV. The dead enhance - controls (contrast/saturation/exposure) are now hidden on h700; displaycal - reboot persistence fixed (was clobbered to defaults every boot); per-model - displaycal preset plumbing added for the full 11-device H700 family (all - neutral/disabled until panels are measured); default brightness raised to 4; - `RG35xx*` now maps to `DEVICE=rg35xx` in launch.sh (see 04). Remaining - nit: syncsettings still "restores" the no-op enhance values on resume. - Worth a systematic sweep: grep settings.cpp / paks for capability flags that - default to "present" and decide each for h700. -9. **BT audio: finish stock-first validation (partial / blocked).** Clean RG40XXV - stock provides BlueALSA 4.2.0, ALSA plugins/configuration, and D-Bus policy. - Daemon startup, `org.bluealsa`, and SBC source endpoint registration pass; H700 - starts the stock daemon and exposes the sampling-rate setting. No BlueALSA, ALSA - plugin, SBC, or BlueZ component is bundled. AirPods 4 ANC SBC playback passed on - RG40XXV earlier (silence blockers: unsupported `delay 0` + zero BlueZ transport - volume). **Auto reconnect was not tested.** As of 2026-07-20 BT powers on but - scans nothing / cannot pair on stock and BaseOS — treat as device/firmware until - proven otherwise; do not file as NextUI-only. When discovery works again: complete - reconnect, game-switch, and suspend/resume. Settings 44100/48000 is a compatibility - escape hatch (AirPods negotiated both). Keep controller-only sample-rate detection - and raw controller button normalization as later cross-platform cleanups. -10. **480p UI polish pass** (04) — verdict from real use on RG40XXV and RG34XXSP: - **good for alpha**. The 720×480 Home UI, Battery, Game Tracker, Input, Clock, - Settings, on-screen keyboard, Files, and in-game menus all work well. Box art is - clean. Screenshots pass on RG34XXSP; multi-panel UI scaling passes - (640×480 / 720×480 / 480×640 local; 720×720 community). Panel-matched - overlay assets are not shipped for H700 (only Brick 1024×768 GBA PNGs). Keep Files - at PPU 2 for now; PPU 3 may be evaluated later for the RG34XX/SP panel density. -11. **~~Headphone jack detection~~ Closed for beta (2026-07-20)** (05) — hardware - auto-mutes speaker and routes to headphones without NextUI. Software - `SetJack` / HP icon / dual volume remains unwired on h700 (Brick has keymon - jack monitoring; h700 does not). Treat HP-icon polish as optional post-beta. -12. **~~Investigate RG34XXSP auto CPU scaling~~ Fixed (2026-07-20)** — MD no longer - slows down under Auto; former 480 MHz stall with some render settings is resolved - (user-verified). Manual powersave/performance were already fine. No general - frame-pacing, tearing, input-lag, or audio concerns from tested gameplay. - -12a. **Build out the core/game matrix** — the initial RG34XXSP results are now in - [10](10-core-game-matrix.md). GB/GBC/GBA/FC/SFC, MD, and PS1 pass; the former PS1 - launch failures were a stale/corrupted core artifact fixed by a clean rebuild. - FBNeo with BIOS is OK; missing-BIOS hard-lock is a **beta1 known issue** and an - **RC must-fix**. A2600, MGBA, and SMS also pass (2026-07-20). Expand coverage - across remaining EXTRAS systems when practical (not beta1-blocking). -13. Later: RGcubexx bring-up (720×720 wired; general UI scaling already - community-validated — expand to a fuller functional/core walk when a device is - available), optional H700-sized overlay content packs, HDMI out (done, - user-validated on RG40XXV incl. in-game hotplug both directions; remaining: - other models, boot-with-cable, odd EDIDs — 04), RG35XX-family variants - (displaycal presets - + `DEVICE=rg35xx` mapping already plumbed — 04), Panel-Fix tool, **per-panel - displaycal calibration** (measure each device, fill in the neutral presets in - displaycal.h; confirm exact `RGXX_MODEL` strings for RG35xx family / RG40xxH - while at it). - -13a. **Bootlogo pak: working on 3 of 4 resolutions** — `Bootlogo.pak` builds and - ships for h700: full tg5040 preset catalog regenerated as 24-bit BMPs per panel - resolution (`640x480`, `720x480`, `480x640` rotated for RG28XX, `720x720`), - folder picked via `$DEVICE`; writes `bootlogo.bmp` to `mmcblk0p2` and backs up - the stock logo as `original.bmp` on first apply (02, 03). User-tested on - RG40XXV: 640×480 apply + `original.bmp` backup verified, and the original appears - in the carousel. Restore was not explicitly selected but uses the same apply path; - the post-apply reboot is a bit slow but acceptable. RG34XXSP 720×480 previews - were absent with the alpha1.1 binary; fixed with the current build - (2026-07-13, verified on-device — 04) and the pak now has load/path diagnostics, - an on-screen empty state, and an empty-list apply guard. RG28XX 480×640 apply is - user-verified (logo upright at boot) and previews are now rotated to match boot - orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`, 04). SP backup/restore pass - (user-verified 2026-07-20). Remaining: the 720×720 path (no local cube device; - community UI scaling only so far). - -## P2 — Cleanup / refactors / simplifications - -14. **~~Remove the crash-loop network behavior~~ Done (2026-07-09)** — after 5 - `nextui.elf` crashes, launch.sh now logs the limit, removes `/tmp/nextui_exec`, - and powers off instead of bringing up WiFi/SSH. -15. **~~Dedupe boot/installer shell code~~ Done (2026-07-09)** — `boot/boot.sh` - and `install/boot.sh` now share mount/compat/log helpers via - `workspace/h700/shim-common.sh`, packaged in both the self-extracting boot shim - payload and `.tmp_update/h700/`. -16. **Dedicated h700 toolchain image, revisited — deferred for alpha** (01) — a thin - `FROM tg5040-toolchain` layer pre-baking the pinned SDL2 removes the pitfall - classes 1–3 in 01 structurally and cuts CI time. Do - it when the next external dep lands. -17. **~~Trim remaining tg5040 residue in the skeleton~~ Done (2026-07-09)** — - h700 paks/cfgs are clear of `default-brick`, `reboot_next`, `libUMP`, bundled - `libasound`, and TrimUI-only skeleton comments; stale commented `&>` redirects - in the h700 tool launchers were replaced with POSIX `> ./log.txt 2>&1` logging. -18. **~~settings glib check~~ Done (2026-07-09)** — CI/release now build h700 and - run `workspace/h700/check-settings-ldd.sh` in a Jammy container against - `settings.elf` with the h700 bundled lib path, failing on unresolved libs or - missing gio/glib linkage. -19. **Wire richer battery metrics — deferred for alpha** (optional) — - `time_to_empty_now`/`voltage_now`/`charge_counter` exist on the PMIC; batmon's - SQLite would get better data for a trivial PLAT extension, but the alpha cleanup - keeps battery schemas unchanged. - -## What "9.5/10" looks like - -- Sleep/wake solid across a 20-cycle soak + overnight drain ≤ stock + 1% (P0 #1) -- Every 08-matrix row ✅ on RG40XXV, lid fixed on RG34XXSP, and the functional set ✅ - on RG34XXSP + RG28XX -- BT audio headset playback/reconnect/suspend matrix passes on supported stock firmware -- No debug behaviors in the release path; docs (README.txt) match actual behavior -- CI: h700 + tg5040 both build on every PR touching shared code, with the ldd check +| RC soak | No unresolved boot, suspend/resume, audio-route, save-state, or data-integrity regression is found during RC use | +| Final artifact | BUILD-01, BUILD-02, BUILD-03, and the RC regression smoke pass on the exact release package | +| Known issues | Every accepted partial/failing row is documented with user impact and workaround where one exists | +| Support boundary | Supported family behavior, hardware-specific exceptions, firmware prerequisites, and out-of-scope features are explicit | +| Rollback | The one-file `dmenu.bin` removal path and old-style-theme prerequisite are present in release instructions | + +## Accepted behavior and non-gates + +These are settled decisions, not unfinished stage work. + +| Item | Test evidence | Decision | +|---|---|---| +| AirPods do not always auto-connect | [AUDIO-04](08-testing-status.md#audio) | AirPods may prefer a nearby paired iPhone/Mac. Remembered pairing plus manual Connect is the supported path | +| RG34XXSP POWER while lid is closed | [POWER-03](08-testing-status.md#power-sleep-and-battery) | Light sleep may wake; deep sleep re-sleeps while the lid remains closed | +| Charging permits light sleep only | [POWER-04](08-testing-status.md#power-sleep-and-battery) | Shared product behavior is accepted | +| FBNeo missing-BIOS hard-lock | [GAME-05](08-testing-status.md#games-and-performance) | Upstream core defect; ship as a known issue. Valid-BIOS gameplay passes | +| Clean uninstall exercise | [BOOT-04](08-testing-status.md#boot-install-and-launcher) | Not a runtime gate; deleting the only hijack file restores stock boot by design | +| Stock MU-style theme | [BOOT-05](08-testing-status.md#boot-install-and-launcher) | Install prerequisite: use old style. MU style bypasses NextUI before its code runs | +| Full matrix on every H700 model | [Test rules](08-testing-status.md#status-and-evidence-rules) | Not required without a hardware/firmware delta or contrary evidence | +| FN1/FN2/HOME and keep-awake-over-USB | [CAP-01, CAP-02](08-testing-status.md#capability-boundaries) | Unsupported RG XX/Brick-specific capabilities; not release promises | + +## Deferred from Beta to RC + +| Work | Test | Reason | +|---|---|---| +| Crash-loop cutoff | [BOOT-03](08-testing-status.md#boot-install-and-launcher) | The five-crash poweroff guard exists in code; inducing and observing the full sequence belongs in release qualification | +| Stock-launcher signal resilience | [ROBUST-01](08-testing-status.md#recovery-and-robustness) | The ignore-signal guard exists; end-to-end service-stop behavior belongs in release qualification | +| Dirty-card recovery | [ROBUST-02](08-testing-status.md#recovery-and-robustness) | Code exists; induced recovery test belongs in release qualification | +| Final cross-platform candidate build | [BUILD-02](08-testing-status.md#build-and-binary-compatibility) | Must be executed against each artifact being promoted, not treated as a one-time feature result | + +## Future hardening + +These improve confidence or breadth but do not gate the current release unless new +evidence turns one into a supported-baseline defect. + +| Work | Evidence / next result needed | +|---|---| +| Overnight drain comparison | Extend [POWER-06](08-testing-status.md#power-sleep-and-battery) with `voltage_now` and a stock-OS baseline | +| Battery UI consistency | Reproduce the top-bar versus Battery-pak desynchronization noted in POWER-05 | +| Bluetooth soak | Longer suspend/resume, device-switch, and game-switch cycles beyond the passing AUDIO-04 path | +| Controller normalization | Fix and retest [INPUT-06](08-testing-status.md#input-and-controllers) across tg5040/tg5050/H700 | +| Bluetooth audio-link detection | Distinguish A2DP from controller-only ACL links before applying sample-rate policy | +| Long-tail core coverage | Expand [GAME-06](08-testing-status.md#games-and-performance) and the matrix in [10](10-core-game-matrix.md) | +| RGcubexx depth | Expand [DEV-04](08-testing-status.md#applications-and-device-specific-hardware) from community UI scaling to functional/core coverage | +| Additional model strings | Confirm RG35XX-family and RG40XXH `RGXX_MODEL` values on hardware | + +## Enhancements + +| Enhancement | Scope | +|---|---| +| Panel-sized overlay packs | Create H700-native content; the rendering pipeline already passes DISP-05 | +| Per-panel DisplayCal defaults | Measure panels and replace the neutral presets | +| Headphone UI | Optional HP icon and independent headphone volume; hardware routing already passes AUDIO-03 | +| Richer battery metrics | Add voltage, charge-counter, and time-to-empty data to the battery model | +| Per-device emulator defaults | Decide whether RG34XXSP/RG28XX need dedicated `default-*.cfg` files | +| 720×480 Files density | Evaluate PPU 3; PPU 2 already passes APP-01 | + +## Stretch goals and out-of-scope work + +| Item | Classification | +|---|---| +| Broader HDMI EDID/display compatibility | Stretch: fixed-mode HDMI already passes; add fallback modes when real displays require them | +| Panel-Fix tool | Stretch feature | +| Dedicated H700 toolchain image | Build optimization; revisit when another external dependency lands | +| Pak Store | Separate product scope; NET-04 is not exercised for this port | +| OTA updates | Separate product scope; NET-05 is not exercised for this port | + +## Next actions + +1. Build the Beta artifact and record BUILD-01, BUILD-02, and BUILD-03 against it. +2. Publish Beta with the accepted behaviors and support boundary above. +3. Triage Beta findings against the blocker definition; add new evidence to 08 rather + than duplicating it here. +4. Before RC, close ROBUST-01/02 and run the packaged regression smoke. +5. Promote RC to Release only after the final-artifact and documentation gates pass. diff --git a/docs/h700-port/10-core-game-matrix.md b/docs/h700-port/10-core-game-matrix.md index 9bf508cb5..c0fc54d24 100644 --- a/docs/h700-port/10-core-game-matrix.md +++ b/docs/h700-port/10-core-game-matrix.md @@ -1,8 +1,10 @@ # 10 — Core & Game Compatibility Matrix -This is the system-by-system hardware validation ledger for the H700 port. The first -pass is on RG34XXSP (720×480); add RG40XXV and other RG XX results where behavior -differs. +This is the system-by-system H700 compatibility ledger and the detailed evidence +behind the games and performance rows in [08-testing-status.md](08-testing-status.md#games-and-performance). +It records test coverage, reproducible issues, and device-specific differences; +[09-roadmap.md](09-roadmap.md) decides lifecycle requirements. The first pass is on +RG34XXSP (720×480); add RG40XXV and other RG XX results where behavior differs. The existing results predate the full protocol below. A green initial result means launch and gameplay were reported good; it does not yet imply every protocol step was @@ -29,7 +31,7 @@ repeated for that system. | FC | FCEUmm | ✅ | Launch and gameplay perfect | | SFC | Snes9x | ✅ | Launch and gameplay perfect | | MD | PicoDrive | ✅ | Launch and gameplay good. Former Auto CPU slowdown (some shader/scale combos stuck near 480 MHz) is fixed — user-verified 2026-07-20 | -| FBN | FBNeo | ⚠️ | With required BIOS: launch and play OK (2026-07-20). Without BIOS: still hard-locks MinArch (no menu/exit; device effectively stuck until power cycle). **beta1:** known issue (happy path). **RC gate:** fix error recovery | +| FBN | FBNeo | ⚠️ | With required BIOS: launch and play OK (2026-07-20). Without BIOS: MinArch hard-locks (no menu/exit; power cycle required). The upstream FBNeo error path does not poll frontend input. Track upstream. | | PS | PCSX-ReARMed | ✅ | Launch and gameplay pass after a clean core rebuild. The earlier crashes across 2–3 titles were caused by a stale/corrupted core, not a model-specific runtime defect | | 32X | PicoDrive | ⬜ | — | | A2600 | Stella 2014 | ✅ | Launch and gameplay pass (2026-07-20) | @@ -60,14 +62,3 @@ repeated for that system. | SUPA | Supafaust | ⬜ | Alternate SNES core | | VB | Mednafen VB | ⬜ | — | | VIC | VICE xvic | ⬜ | — | - -## Open investigations - -1. **FBNeo error recovery (RC must-fix; beta1 known issue):** with BIOS = pass. - Missing-BIOS still hard-locks MinArch completely. Determine why the core/error - path never returns control (menu/exit dead) and fix recovery without requiring a - power cycle. Ship beta1 with release-note callout; do not tag RC until fixed. -2. **~~MD Auto CPU behavior~~ Fixed (2026-07-20):** former slowdown when Auto settled - near 480 MHz with some render settings is resolved; MD is green in the matrix. -3. Expand the table across RG40XXV, RG28XX, RGcubexx, and other RG XX variants during - alpha testing, recording only device-specific differences once a core is known-good. diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 1c09cd842..00cf1dcb1 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,48 +4,30 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Status (2026-07-20): ready for beta1 with documented known issues; RC gates listed -in [09](09-roadmap.md).** -RG40XXV has broad hardware coverage. RG34XXSP now passes the complete 720×480 UI -sweep, box art, Files, Input, Recently Played, game switcher, RetroAchievements, -displaycal persistence, manual governor changes, lid sleep/wake, Bootlogo, and -GB/GBC/GBA/FC/SFC (plus A2600/MGBA/SMS and MD/PS). RG28XX is now user-tested: driver-level rotation validated, -minarch Aspect/Fullscreen scaling fixed (a double-rotation bug), and Bootlogo -apply + rotated previews working. -The apparent RG34XXSP PS1 launch regression was a stale/corrupted core artifact and a -clean rebuild fixed it. MD Auto CPU is fixed. FBNeo plays OK with BIOS; missing-BIOS -hard-lock is a **beta1 known issue** and an **RC must-fix**. Closed-lid POWER and -charging→light-sleep-only are accepted policies. Screenshots and multi-panel UI -scaling pass. Battery % vs stock passes (icon-vs-Battery-pak desync after long sleep -is follow-up). Overnight drain partial (~7% / 8.5 h; voltage/stock re-test = RC -polish). Clean uninstall removed from the test matrix (delete `dmenu.bin` is -design-guaranteed). SIGUSR1 and dirty-card recovery are **RC polish** (untested OK -for beta1). Panel-matched overlay assets not shipped for H700 sizes. Full RGcubexx -matrix remains external. BT audio used stock BlueALSA with an earlier AirPods pass; -lifecycle revalidation blocked by device-wide BT scan failure. Pak Store and OTA -out of scope. Full status: [08](08-testing-status.md), [09](09-roadmap.md), -[10](10-core-game-matrix.md). +**Lifecycle:** preparing the Beta candidate. See [09](09-roadmap.md) for stage gates +and [08](08-testing-status.md) for current evidence. -These docs began as the implementation plan and were restructured after the -implementation landed (branch `h700`) into reference documentation: -verified device facts, the architecture as shipped, deviations from the plan and why, -and the lessons that transfer to future platform ports. +This directory is the H700 maintainer knowledge base. Documents 00–07 record durable +facts, architecture, decisions, rationale, failure analysis, diagnostics, and lessons +for future platform ports. They may say how a fact was established, but they do not +own current release status. Documents 08–10 are the operational ledgers for tests, +release planning, and per-core coverage. ## Documents -| Doc | Contents | -|---|---| -| [00-device-facts.md](00-device-facts.md) | Ground truth: probed hardware facts, sysfs/ioctl/evdev reference, boot chain, quirks | -| [01-toolchain-and-build.md](01-toolchain-and-build.md) | tg5040-image reuse, in-tree SDL2, **toolchain-reuse pitfalls (read before porting anything else)** | -| [02-boot-and-installer.md](02-boot-and-installer.md) | dmenu.bin hijack, boot shim, installer, SD layout, uninstall | -| [03-platform-layer.md](03-platform-layer.md) | `workspace/h700/`: platform.c/h, input (evdev-primary), libmsettings, keymon, cores | -| [04-video-display.md](04-video-display.md) | SDL2+Mali/GLES stack, geometry, rotation, HDMI, displaycal, the alpha-blit question | -| [05-audio.md](05-audio.md) | ALSA path, the dlopen'd-libasound bug story, volume/mute quirks, BT-audio lifecycle | -| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Sleep design, lid/charging edge cases, battery, governors | -| [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | NextUI-owned wpa_supplicant, DHCP/creds handling, BT status | -| [08-testing-status.md](08-testing-status.md) | Validation matrix with real results, regression guardrails, shared-code touch list | -| [09-roadmap.md](09-roadmap.md) | Prioritized path from alpha candidate to a 9.5/10 port | -| [10-core-game-matrix.md](10-core-game-matrix.md) | Per-system/core/game coverage and open emulator defects | +| Doc | Role | Contents | +|---|---|---| +| [00-device-facts.md](00-device-facts.md) | Knowledge base | Probed hardware/OS facts, sysfs/ioctl/evdev reference, stock boot chain, known unknowns | +| [01-toolchain-and-build.md](01-toolchain-and-build.md) | Knowledge base | tg5040-image reuse, in-tree SDL2, dependency policy, and reusable cross-toolchain lessons | +| [02-boot-and-installer.md](02-boot-and-installer.md) | Knowledge base | `dmenu.bin` hijack, storage/write policy, boot shim, installer, and launcher responsibilities | +| [03-platform-layer.md](03-platform-layer.md) | Knowledge base | Platform API map, device detection, evdev/SDL input split, libmsettings, keymon, and cores | +| [04-video-display.md](04-video-display.md) | Knowledge base | Mali/fbdev architecture, geometry, rotation and HDMI decision records, DisplayCal, graphics incidents | +| [05-audio.md](05-audio.md) | Knowledge base | ALSA architecture, symbol-versioning incident, routing, Bluetooth audio, and sample-rate constraints | +| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Knowledge base | Sleep architecture/postmortem, lid semantics, charging behavior, battery facts, and governors | +| [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | Knowledge base | Stock components, NextUI ownership boundaries, lifecycle scripts, and diagnostics | +| [08-testing-status.md](08-testing-status.md) | Test ledger | Stable test IDs, current results, evidence devices, and model-specific details | +| [09-roadmap.md](09-roadmap.md) | Release policy | Alpha 1/2/3, Beta, RC, and Release gates; deferrals, future work, enhancements, and stretch goals | +| [10-core-game-matrix.md](10-core-game-matrix.md) | Test ledger | Per-system/core/game evidence and emulator defects underlying the GAME test rows | ## Architecture in one paragraph @@ -56,7 +38,8 @@ SDL2 (`JohnnyonFlame/SDL-malifbdev-rot`) targeting the Mali blob's fbdev EGL win NextUI's shared `generic_video.c`/`generic_wifi.c`/`generic_bt.c` run unchanged. Boot is hijacked by dropping one `dmenu.bin` file on the stock card's FAT partition; NextUI itself lives entirely on TF2. The stock Ubuntu userland is used aggressively -(systemd, timedatectl, dhclient, BlueZ 5.64, stock unzip) rather than bundled around. +(systemd, timedatectl, dhclient, firmware-provided BlueZ, stock unzip) rather than +bundled around. ## Key decisions — outcome register @@ -66,37 +49,26 @@ itself lives entirely on TF2. The stock Ubuntu userland is used aggressively | Arch / toolchain | 64-bit, reuse tg5040 image | ✅ as planned — with real costs; pitfalls catalogued in 01 | | SDL2 | in-tree malifbdev-rot build | ✅ as planned, pinned + config-asserted | | Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; multi-panel UI scaling + box art pass; panel-matched overlay assets not shipped | -| **Input** | SDL joystick route | **Deviation:** raw evdev primary (SDL js enumeration unreliable on stock image); SDL kept for BT pads (03) | +| **Input** | SDL joystick route | **Deviation:** raw evdev remains primary for the built-in pad; the SDL classification fix makes enumeration work, but the built-in SDL ordering differs from external-pad `JOY_*` mappings and would duplicate/mis-map events. SDL is retained for external pads (03) | | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | -| **BT audio** | build + ship bluealsa | **Deviation:** use stock BlueALSA 4.2.0, ALSA plugins, SBC, and BlueZ without bundling replacements; AirPods 4 ANC SBC playback passed on RG40XXV after H700-only ALSA-option omission + native-volume init; auto reconnect untested; revalidation blocked by device-wide BT scan/pair failure on stock and BaseOS (05/07) | -| Sleep | `echo mem` + tg5040-style wrapper | ✅ repeated sleep/wake, in-game resume, and power-off auto-resume pass; charging→light-sleep-only accepted policy (06) | -| Lid | hallkey → PLAT lid API | ✅ close/open works; POWER-while-closed accepted policy (light sleep only; deep re-sleeps if lid closed) | +| **BT audio** | build + ship bluealsa | **Deviation:** use the stock BlueALSA/ALSA/SBC/BlueZ stack, with an H700-only ALSA option adjustment, initial mixer volume, and post-connect mixer update (05/07) | +| Sleep | `echo mem` + tg5040-style wrapper | ✅ shared power architecture retained; target-specific service and ALSA sequencing documented in 06 | +| Lid | hallkey → PLAT lid API | ✅ sysfs-polled lid integrated with the shared sleep request API (06) | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | | Rumble / LEDs | moto sysfs; MAX_LIGHTS 0 | ✅ as planned; rumble tested-good | | Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | | Install | TF1 gets one file; NextUI on TF2; no TF1-only mode | ✅ as planned; TF1 writes mountpoint+cmp guarded | | **Splash** | per-panel raw-BMP `dd` assets | **Deviation:** `fbsplash` text renderer — no per-resolution assets needed (02) | | RG28XX rotation | SDL-level first, GL hook fallback | ✅ SDL/driver level alone is correct; the GL hook double-rotated and broke minarch scaling — removed after hardware testing (04) | -| HDMI | stretch goal | ✅ RG40XXV menu/game output, audio routing, and in-game hotplug pass in both directions; boot-with-cable, other models, and unusual EDIDs remain follow-ups (04) | +| HDMI | stretch goal | ✅ disp2/fbdev hotplug with layer-geometry repair and ALSA routing (04) | -## Top open risks +## Maintenance model -1. **FBNeo missing-BIOS hard-lock** — major; **RC must-fix**. beta1 ships as known - issue (happy path with BIOS OK). MD Auto CPU fixed. Closed-lid POWER and - charging→light-sleep accepted policy. -2. **RC polish (untested OK for beta1)** — SIGUSR1 shutdown, dirty-SD recovery; - overnight drain voltage/stock re-test. Clean uninstall not a test row (delete - `dmenu.bin`). -3. **Partially tested device matrix** — RG40XXV, RG34XXSP, and RG28XX are working - (RG28XX rotation/scaling validated 2026-07-12); RGcubexx has community UI-scaling - validation, with full matrix still external. -4. **Stock-OS coupling** — model detection and the `dmenu.bin` hijack read Anbernic - binaries/scripts; a firmware update can move them. Stock **MU style** themes - bypass the hijack entirely (install requires **old style** — 02/08). -5. **Shared-UI capability regressions** — the Input tester is device-aware, dead - display controls are hidden/verified, and Fn-switch settings are now gated off. - Keep the systematic capability sweep as shared UI continues to evolve. - (Formerly listed here: the alpha-blit unknown — resolved; it was the missing - 64-bit libpng. The branch includes main's alpha blending; game switcher/overlay - rendering is clean; screenshots and multi-panel UI scaling pass - (incl. community 720×720); panel-matched overlay assets not shipped, 04.) +- Update 00 when hardware, firmware, stock-OS paths, or empirical facts change. +- Update 01–07 when implementation, rationale, diagnostics, or a subsystem lesson + changes. Keep incident histories when they explain a non-obvious constraint. +- Record test evidence once in 08 and per-core evidence once in 10. +- Record stage gates, accepted risk, deferrals, enhancements, and future work only in + 09. Subsystem documents should link there instead of restating release policy. +- Re-probe stock integration after Anbernic firmware changes and revisit the relevant + knowledge-base chapter before treating a new failure as a NextUI regression. diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 35c2c95fa..7ed94331e 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -38,8 +38,10 @@ static int wake_fd = -1; #define EV_KEY 0x01 #define EV_ABS 0x03 -// From the old rg35xxplus platform: built-in controls expose evdev raw codes, -// while SDL joystick enumeration is unreliable on stock H700 images. +// Built-in controls use raw evdev codes. The in-tree SDL patch restores joystick +// enumeration, but platform input deliberately skips this device because its SDL +// button ordering differs from the external-pad JOY_* mapping and would duplicate +// the evdev events. #define RAW_HATY 17 #define RAW_HATX 16 #define RAW_LSY 3 From c96d1535568d181c0afd1a697b261d68b7756bc1 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 22:16:57 +0200 Subject: [PATCH 53/76] fix(h700): allow auto governor to use full CPU range Let schedutil use the greatest advertised H700 frequency instead of capping Auto one step below the in-spec 1.5 GHz ceiling. Keep the powersave midpoint cap and performance behavior unchanged. Add pending PERF-05 hardware validation and make it a high-priority Beta gate. Record tested per-model shader, emulator, and frontend defaults as planned Beta work, and classify overlays for the three logical H700 resolutions as optional Beta or post-release content. --- docs/h700-port/03-platform-layer.md | 2 +- docs/h700-port/04-video-display.md | 9 +++--- docs/h700-port/06-power-sleep-battery.md | 12 ++++---- docs/h700-port/08-testing-status.md | 1 + docs/h700-port/09-roadmap.md | 38 +++++++++++++++++------- skeleton/SYSTEM/h700/bin/governor.sh | 11 ++++--- 6 files changed, 46 insertions(+), 27 deletions(-) diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 5c60e9ec0..d6f18b232 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -126,7 +126,7 @@ open/closed per poll and could drop the wake press between polls. |---|---| | Video | `#include "generic_video.c"` — custom SDL2 mali driver does the rest (04) | | Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, with coarse bucketing in shared code. Unlike tg5040, H700 charging detection uses `online` alone | -| CPU speed | `governor.sh` via `system()`: auto=schedutil at the second-highest advertised frequency, performance at the greatest advertised frequency, powersave=conservative capped mid-range. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | +| CPU speed | `governor.sh` via `system()`: auto=schedutil and performance both permit the greatest advertised frequency; powersave=conservative capped mid-range. H700's advertised 1.5 GHz ceiling is in-spec, not an overclock, so Auto no longer caps it one step below maximum. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | | CPU temp | thermal_zone0 | | GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | | GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index 511de901b..cc37b440d 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -44,10 +44,11 @@ tester reported normal general UI scaling on the 720×720 RGCubeXX. Refer to the report for the maintained coverage record. **Panel-matched overlay assets** are a separate content question. The H700 tree ships -empty `Overlays//` directories plus two GBA PNGs at -**1024×768** (TrimUI Brick), not 640×480 / 720×480 / 480×640 / 720×720. The overlay -GLES path itself runs on Mali. The Input tester is device-aware, ineffective display -controls are hidden, and Fn-switch settings are disabled on H700. +empty `Overlays//` directories plus two GBA PNGs at **1024×768** (TrimUI +Brick), not assets for H700's three logical rendering resolutions: 640×480 (including +the driver-rotated RG28XX), 720×480, and 720×720. The overlay GLES path itself runs on +Mali. The Input tester is device-aware, ineffective display controls are hidden, and +Fn-switch settings are disabled on H700. ## RG28XX rotation decision (2026-07-12) diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index c3333a422..eb65f7478 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -134,11 +134,13 @@ by u-boot/stock before our hijack, untouched. ## CPU governor -`governor.sh` reads the available frequency list: auto=`schedutil` at the -second-highest advertised frequency, performance=`performance` at the greatest -advertised frequency, and powersave=`conservative` capped mid-range. Menu vs in-game -profiles ride the shared settings; performance is forced during game launch. Manual -in-game changes are clean. +`governor.sh` reads the available frequency list. Auto uses `schedutil` across the +full advertised range, performance uses `performance` at the greatest advertised +frequency, and powersave uses `conservative` capped mid-range. H700's advertised +1.5 GHz ceiling is in-spec rather than an overclock, so Auto no longer caps its +maximum one frequency step below that ceiling. Menu vs in-game profiles ride the +shared settings; performance is forced during game launch. Manual in-game changes +are clean. ~~RG34XXSP MD Auto CPU slowdown~~ Fixed (user-verified 2026-07-20): earlier, some shader/scale combos left Auto near 480 MHz and felt slow; that no longer reproduces. Manual powersave/performance were already smooth. Single cluster → no core pinning. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index b8def4e3b..6173a9df8 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -124,6 +124,7 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger | PERF-02 | Frame pacing, tearing, and input latency | ✅ | RG40XXV | No visible issue during gameplay; result is observational, not instrumented | | PERF-03 | Manual CPU governor changes during play | ✅ | RG34XXSP | Powersave/performance changes do not stutter audio | | PERF-04 | Automatic governor load/frequency selection | ✅ | RG34XXSP | MD Auto CPU regression is resolved | +| PERF-05 | Auto governor full-range scaling | ⬜ | Implementation ready; hardware result pending | With Auto selected, `scaling_max_freq` should equal the greatest advertised frequency (about 1.5 GHz) and schedutil should scale up to it under load without new performance, thermal, or audio regressions | ## Applications and device-specific hardware diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 50b56b612..3240f0423 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -8,9 +8,10 @@ every test ID points to the canonical report in ## Current position -Alpha 1, Alpha 2, and Alpha 3 are complete. The port is ready to produce a Beta -candidate. Functional Beta gates pass; the candidate-specific H700/tg5040 build and -linkage checks must be recorded against the artifact that will be published. +Alpha 1, Alpha 2, and Alpha 3 are complete. The port is preparing its Beta candidate. +The H700 Auto governor now permits the full in-spec 1.5 GHz range; PERF-05 hardware +validation, the planned per-model out-of-box profiles, and the candidate-specific +H700/tg5040 build and linkage checks remain. ## Stage roadmap @@ -22,7 +23,7 @@ these definitions when reading older alpha artifacts and commit notes. | Alpha 1 — platform bring-up | Prove stock-card boot, basic display/input/audio, WiFi, and playable cores on the RG40XXV baseline | [BUILD-01](08-testing-status.md#build-and-binary-compatibility), [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | ✅ Complete | | Alpha 2 — family expansion | Fix sleep/Files/UI regressions and prove real hardware deltas: RG34XXSP panel/lid/sticks, RG28XX rotation, Bootlogo sizes, and shared capability gating | [POWER-01, POWER-03](08-testing-status.md#power-sleep-and-battery), [APP-01](08-testing-status.md#applications-and-device-specific-hardware), [DISP-02, DISP-03, DISP-04, DISP-05, DISP-06, DISP-07](08-testing-status.md#display-and-user-interface), [INPUT-02, INPUT-03](08-testing-status.md#input-and-controllers), [DEV-02, DEV-03, DEV-05, DEV-06, DEV-07](08-testing-status.md#applications-and-device-specific-hardware) | ✅ Complete | | Alpha 3 — Beta hardening | Close feature gaps and ambiguous policies: HDMI, Bluetooth controller/audio, screenshots, headphone route, MD Auto CPU, PS1 packaging, and representative core smoke | [DISP-08](08-testing-status.md#display-and-user-interface), [INPUT-05](08-testing-status.md#input-and-controllers), [AUDIO-03, AUDIO-04, AUDIO-05](08-testing-status.md#audio), [GAME-03, GAME-04, GAME-06](08-testing-status.md#games-and-performance), [PERF-04](08-testing-status.md#games-and-performance) | ✅ Complete; partial long-tail rows are classified below | -| Beta — public validation | Publish the supported H700 family build, collect broader device/firmware evidence, and fix any new critical regression | Beta entry gates below | Ready to cut after candidate checks | +| Beta — public validation | Publish the supported H700 family build, collect broader device/firmware evidence, and fix any new critical regression | Beta entry gates and planned work below | Preparing: PERF-05, per-model defaults, and candidate checks remain | | RC — release qualification | Freeze scope, close recovery checks, validate the packaged candidate, and accept or fix all Beta findings | RC entry gates below | Planned | | Release — supported baseline | Promote an RC with no open release blocker and with support/known-issue documentation matching behavior | Release gates below | Planned | @@ -40,6 +41,19 @@ unless the code or hardware differs. | HDMI | [DISP-08](08-testing-status.md#display-and-user-interface), [AUDIO-05](08-testing-status.md#audio) | Satisfied | | Bluetooth audio | [AUDIO-04](08-testing-status.md#audio) | Satisfied | | Core/performance baseline | [GAME-02, GAME-03, GAME-04](08-testing-status.md#games-and-performance), [PERF-01, PERF-04](08-testing-status.md#games-and-performance) | Satisfied | +| Auto CPU full range | [PERF-05](08-testing-status.md#games-and-performance) | High priority: implementation complete; hardware result pending | + +## Beta planned work + +| Work | Priority / target | Completion condition | +|---|---|---| +| Auto governor full-range scaling | High — ASAP, required for Beta | PERF-05 passes on a representative H700 device | +| Per-model out-of-box defaults | Planned for Beta | Ship tested H700-model profiles covering shader choice, emulator/core options, and relevant frontend defaults so each model starts with sensible settings | + +The per-model profiles are an intentional H700-specific departure from NextUI's +otherwise barebones cross-platform defaults. Keep the overrides narrow, documented, +and tested so they improve first-run behavior without silently changing other +platforms. Beta does not require every device or long-tail core to be tested. A new Beta finding becomes a Beta blocker only when it causes data loss, prevents boot/gameplay on the @@ -111,11 +125,11 @@ evidence turns one into a supported-baseline defect. | Enhancement | Scope | |---|---| -| Panel-sized overlay packs | Create H700-native content; the rendering pipeline already passes DISP-05 | +| H700 overlay packs | Ship useful overlays for 640×480, 720×480, and 720×720 logical output. Target Beta if tested packs are ready; otherwise ship after Release. This is not a Beta gate because the rendering pipeline already passes DISP-05 | | Per-panel DisplayCal defaults | Measure panels and replace the neutral presets | | Headphone UI | Optional HP icon and independent headphone volume; hardware routing already passes AUDIO-03 | | Richer battery metrics | Add voltage, charge-counter, and time-to-empty data to the battery model | -| Per-device emulator defaults | Decide whether RG34XXSP/RG28XX need dedicated `default-*.cfg` files | +| Broader per-game tuning | Extend the planned Beta per-model defaults only where a core or title demonstrably needs a narrower override | | 720×480 Files density | Evaluate PPU 3; PPU 2 already passes APP-01 | ## Stretch goals and out-of-scope work @@ -130,9 +144,11 @@ evidence turns one into a supported-baseline defect. ## Next actions -1. Build the Beta artifact and record BUILD-01, BUILD-02, and BUILD-03 against it. -2. Publish Beta with the accepted behaviors and support boundary above. -3. Triage Beta findings against the blocker definition; add new evidence to 08 rather +1. Validate PERF-05 on hardware and record the result in 08. +2. Define, test, and ship the per-model shader/emulator/frontend defaults planned for Beta. +3. Build the Beta artifact and record BUILD-01, BUILD-02, and BUILD-03 against it. +4. Publish Beta with the accepted behaviors and support boundary above. +5. Triage Beta findings against the blocker definition; add new evidence to 08 rather than duplicating it here. -4. Before RC, close ROBUST-01/02 and run the packaged regression smoke. -5. Promote RC to Release only after the final-artifact and documentation gates pass. +6. Before RC, close BOOT-03 and ROBUST-01/02 and run the packaged regression smoke. +7. Promote RC to Release only after the final-artifact and documentation gates pass. diff --git a/skeleton/SYSTEM/h700/bin/governor.sh b/skeleton/SYSTEM/h700/bin/governor.sh index 3a1723201..303ac5bb1 100755 --- a/skeleton/SYSTEM/h700/bin/governor.sh +++ b/skeleton/SYSTEM/h700/bin/governor.sh @@ -9,16 +9,13 @@ MODE="$1" set_policy() { local policy_path="$1" local governor="$2" - local max_type="$3" # "second_max", "max", or "mid" + local max_type="$3" # "max" or "mid" [ -f "$policy_path/scaling_available_frequencies" ] || return 0 FREQS=$(cat "$policy_path/scaling_available_frequencies" | tr ' ' '\n' | grep -v '^$' | sort -n) MIN_FREQ=$(echo "$FREQS" | head -1) case "$max_type" in - second_max) - MAX_FREQ=$(echo "$FREQS" | tail -2 | head -1) - ;; max) MAX_FREQ=$(echo "$FREQS" | tail -1) ;; @@ -39,8 +36,10 @@ set_policy() { case "$MODE" in auto) - set_policy /sys/devices/system/cpu/cpufreq/policy0 "schedutil" "second_max" - set_policy /sys/devices/system/cpu/cpu0/cpufreq "schedutil" "second_max" + # H700's advertised 1.5 GHz ceiling is in-spec, not an overclock. Let + # schedutil use the full hardware frequency range when load requires it. + set_policy /sys/devices/system/cpu/cpufreq/policy0 "schedutil" "max" + set_policy /sys/devices/system/cpu/cpu0/cpufreq "schedutil" "max" ;; performance) set_policy /sys/devices/system/cpu/cpufreq/policy0 "performance" "max" From 8da09fbba9a41b6c899ff9f0d4c4f5a70a85f958 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Mon, 20 Jul 2026 22:45:54 +0200 Subject: [PATCH 54/76] fix(h700): restore Bluetooth audio output Start the system D-Bus before audiomon so it can observe A2DP connections and switch ALSA away from the internal speaker. Use BlueALSA's default volume mode because BaseOS cannot initialize the AirPods transport volume in native mode. Address the remaining connection race by querying the BlueALSA mixer explicitly and retrying until its A2DP control appears, ensuring the saved NextUI volume reaches the headset. --- skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh | 11 ++++++----- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 19 +++++++++++++++++++ workspace/h700/libmsettings/msettings.c | 14 ++++++++++---- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh index e2ab64f62..b816da7ac 100755 --- a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh +++ b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh @@ -191,12 +191,13 @@ start_bluealsa() { log "Stock bluealsa cannot run: $bt_bluealsa_version" return 1 fi - log "Starting bluealsa $bt_bluealsa_version with A2DP source and native volume support" + log "Starting bluealsa $bt_bluealsa_version with A2DP source" : > "$BLUEALSA_LOG" - # Some headsets (including AirPods 4) create their BlueZ transport at - # absolute volume zero. Let BlueALSA initialize and control that transport - # volume instead of relying only on the local ALSA mixer. - "$BLUEALSA" -p a2dp-source --a2dp-volume --initial-volume=100 < /dev/null >> "$BLUEALSA_LOG" 2>&1 & + # Keep BlueALSA's default volume mode. BaseOS BlueZ does not expose the + # transport Volume property early enough for --a2dp-volume, leaving some + # headsets (including AirPods 4) at absolute volume zero. The default mode + # publishes the mixer control that libmsettings updates after connection. + "$BLUEALSA" -p a2dp-source --initial-volume=100 < /dev/null >> "$BLUEALSA_LOG" 2>&1 & bt_bluealsa_pid=$! bt_bluealsa_tries=0 diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index dcb60bccc..60dfb977f 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -62,6 +62,24 @@ log_runtime_state() { ls -l /usr/lib/libEGL.so* /usr/lib/libGLESv2.so* /usr/lib/aarch64-linux-gnu/libEGL.so* /usr/lib/aarch64-linux-gnu/libGLESv2.so* >> "$LAUNCH_LOG" 2>&1 || true } +ensure_system_dbus() { + [ -S /run/dbus/system_bus_socket ] && return 0 + command -v dbus-daemon >/dev/null 2>&1 || return 1 + + mkdir -p /run/dbus + if [ ! -s /run/machine-id ] && command -v dbus-uuidgen >/dev/null 2>&1; then + dbus-uuidgen > /run/machine-id 2>/dev/null || true + fi + dbus-daemon --system >/dev/null 2>&1 || true + + dbus_tries=0 + while [ ! -S /run/dbus/system_bus_socket ] && [ "$dbus_tries" -lt 20 ]; do + sleep 0.1 2>/dev/null || sleep 1 + dbus_tries=$((dbus_tries + 1)) + done + [ -S /run/dbus/system_bus_socket ] +} + if [ -f "/tmp/poweroff" ]; then poweroff exit 0 @@ -122,6 +140,7 @@ keymon.elf > "$LOGS_PATH/keymon.txt" 2>&1 & batmon.elf > "$LOGS_PATH/batmon.txt" 2>&1 & rm -f "$USERDATA_PATH/.asoundrc" +ensure_system_dbus || echo "launch: system D-Bus unavailable; audio device monitoring may be disabled" >> "$LAUNCH_LOG" audiomon.elf > "$LOGS_PATH/audiomon.txt" 2>&1 & bluetoothon=$(nextval.elf bluetooth | sed -n 's/.*"bluetooth": \([0-9]*\).*/\1/p') diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index 9e15e8edf..9ebbdbf98 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -1366,7 +1366,7 @@ void SetRawColortemp(int val) { // 0 - 255 // Find the first A2DP playback volume control via amixer static int get_a2dp_simple_control_name(char *buf, size_t buflen) { - FILE *fp = popen("amixer scontrols", "r"); + FILE *fp = popen("amixer -D bluealsa scontrols 2>/dev/null", "r"); if (!fp) return 0; char line[256]; @@ -1450,10 +1450,16 @@ void SetRawVolume(int val) { // in: 0-100 if (GetAudioSink() == AUDIO_SINK_BLUETOOTH) { // bluealsa is a mixer plugin, not exposed as a separate card char ctl_name[128] = {0}; - if (get_a2dp_simple_control_name(ctl_name, sizeof(ctl_name))) { - char cmd[256]; + int found = 0; + for (int tries = 0; tries < 20; tries++) { + if ((found = get_a2dp_simple_control_name(ctl_name, sizeof(ctl_name)))) + break; + usleep(100000); + } + if (found) { + char cmd[256]; // Update volume on the device - snprintf(cmd, sizeof(cmd), "amixer sset \"%s\" -M %d%% > /dev/null 2>&1", ctl_name, val); + snprintf(cmd, sizeof(cmd), "amixer -D bluealsa sset \"%s\" -M %d%% > /dev/null 2>&1", ctl_name, val); system(cmd); //printf("Set '%s' to %d%%\n", ctl_name, val); fflush(stdout); } From c8d3035a380f334b0bcf4dff32a8a193c8b4577e Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Tue, 21 Jul 2026 14:56:30 +0200 Subject: [PATCH 55/76] build(h700): use dedicated h700-toolchain image Stop remapping PLATFORM=h700 to tg5040-toolchain. Pull and clone h700-toolchain instead, and update the port docs to match. --- docs/h700-port/00-device-facts.md | 7 ++-- docs/h700-port/01-toolchain-and-build.md | 46 ++++++++++++++---------- docs/h700-port/09-roadmap.md | 2 +- docs/h700-port/README.md | 11 +++--- makefile.toolchain | 3 -- 5 files changed, 38 insertions(+), 31 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index a55687cd8..5b7b4c6b0 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -204,9 +204,10 @@ Consequences: | TG5040 | 4.9.191 | aarch64 | 2.33 | | H700 stock | 4.9.170 | aarch64 | **2.35** | -tg5040-toolchain-built binaries (glibc ≤ 2.33, aarch64, cortex-a53) load and run on the -H700 stock OS unmodified — proven in production by this port, which builds entirely -inside the tg5040 image. No ABI wall. (Caveat discovered the hard way: libc compatibility +h700-toolchain-built binaries (GCC 8.3, glibc ≤ 2.33 from the TG5040 SDK sysroot, +aarch64, cortex-a53) load and run on the H700 stock OS unmodified — proven in +production by this port (first via the shared tg5040 image, now via dedicated +`h700-toolchain`). No ABI wall. (Caveat discovered the hard way: libc compatibility is not the whole story — see the libasound symbol-versioning and libpng12 pitfalls in 01.) ## Old rg35xxplus port — git archaeology summary diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index b41d722d8..7929cfaaf 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -8,27 +8,30 @@ live in [08](08-testing-status.md); promotion requirements live in The CI-supported single-platform staging sequence is `make setup` followed by `make h700`. (`make all` builds every configured platform; adding `PLATFORM=h700` -does not narrow it.) H700 has one build-system twist: **there is no dedicated h700 -toolchain image — the build runs inside the existing -`ghcr.io/loveretro/tg5040-toolchain` image.** Same arch (aarch64/cortex-a53), same -`-mcpu=cortex-a53` tuning, and the image's glibc (2.33) is older than the target's -(Ubuntu 22.04, glibc 2.35) — forward-compatible by construction. This was empirically -validated before any code was written (a tg5040-built displaycal.elf ran unmodified on -RG40XXV stockmod and an RG34XXSP running Knulli) and has held up in production. +does not narrow it.) H700 builds inside the dedicated +**`ghcr.io/loveretro/h700-toolchain`** image (`LoveRetro/h700-toolchain`). Same arch +(aarch64/cortex-a53), same `-mcpu=cortex-a53` tuning, and the image's glibc (2.33, +via the TG5040 SDK sysroot) is older than the target's (Ubuntu 22.04, glibc 2.35) — +forward-compatible by construction. This was empirically validated early in the port +(a cross-built displaycal.elf ran unmodified on RG40XXV stockmod and an RG34XXSP +running Knulli) and has held up in production. The image is a sibling of +`tg5040-toolchain` (same GCC 8.3 + SDK recipe) with its own GHCR lifecycle so H700 +no longer shares the tg5040 container tag. Integration points: - Root `makefile`: `PLATFORMS = tg5050 tg5040 h700`; the `make h700` dispatcher runs the full `common` staging target for H700, while `make shell` passes `PLATFORM=$(PLATFORM)` through (and `makefile.toolchain` injects `-e PLATFORM -e UNION_PLATFORM` into the container). -- `makefile.toolchain`: maps h700 → the tg5040 image. +- `makefile.toolchain`: `PLATFORM=h700` → clone `toolchains/h700-toolchain/`, image + `ghcr.io/loveretro/h700-toolchain:latest` (same pattern as tg5040/tg5050; no remap). - `workspace/h700/platform/makefile.env`: tg5040-derived flags (`-mcpu=cortex-a53`, `SDL = SDL2`, `GL = GLES`), with the in-tree SDL2 prefix first in include/lib order. - `workspace/h700/makefile`: platform-local `early` target builds the external deps (SDL2, below) before the apps. - The full tg5040 core list (28 cores + patches) builds unchanged — same arch, same tuning. -### In-tree SDL2 (the one real gap in the shared image) +### In-tree SDL2 (not yet prebaked in the image) On tg5040 the stock OS supplies runtime SDL2; on H700 we ship our own. The platform `early` target clones **`JohnnyonFlame/SDL-malifbdev-rot`**, **pinned to commit `d4a7d7503524cc469fe775242f3f925d4dd56c88`**, builds it aarch64 and installs into a local @@ -74,10 +77,11 @@ indistinguishable from other A53 platforms. On Anbernic the normal boot path doe through `updater` (our dmenu.bin calls `.tmp_update/h700.sh` directly), but correct detection prevents mis-flash if a multi-platform card moves between devices. -## Toolchain-reuse pitfalls (lessons for future platform ports) +## Sysroot-mismatch pitfalls (lessons for future platform ports) -Cross-building in a *sibling platform's* image against a *different* target rootfs -works, but every failure below came from exactly that gap. Check these first on any +H700 originally built inside the tg5040 image and still uses that SDK as the +h700-toolchain sysroot. Cross-building against a *sibling platform's* rootfs works, +but every failure below came from exactly that gap. Check these first on any future stock-OS port: 1. **libasound symbol versioning → glitchy audio.** The tg5040 SDK's libasound has no @@ -112,14 +116,18 @@ future stock-OS port: must be added to those filter lists or minarch silently builds featureless (or not at all). -## Decision: reuse the tg5040 image instead of a dedicated H700 image +## Decision: dedicated h700-toolchain (same SDK recipe for now) -The reuse costs above are all *solved*, and the SDL2 build is pinned and cached. A thin -image `FROM tg5040-toolchain` pre-baking SDL2 + a jammy-matched libasound would remove -pitfall classes 1–3 structurally and speed CI — worth doing if the platform accumulates -more external deps. Bluetooth audio uses the stock H700 BlueALSA daemon, ALSA plugins, -SBC runtime, and BlueZ without copying them from the shared toolchain (see 05 and 07; -09 classifies the release implications). +The port first reused `tg5040-toolchain` in-process; the **pitfalls above are solved +in NextUI** (dlopen ALSA, direct GLES link, bundled libpng12, in-tree SDL2). We now +use a **dedicated** `h700-toolchain` image/repo so H700 builds do not share the +tg5040 container lifecycle, while keeping the proven GCC 8.3 + TG5040 SDK sysroot. + +Still worth doing later inside `h700-toolchain` (not blocking): prebake the pinned +mali-fbdev SDL2 into `PREFIX_LOCAL`, and optionally a jammy-matched libasound, to +remove pitfall classes 1–3 structurally and speed CI. Bluetooth audio uses the stock +H700 BlueALSA daemon, ALSA plugins, SBC runtime, and BlueZ without shipping them from +the toolchain (see 05 and 07; 09 classifies the release implications). ## Build outputs diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 3240f0423..b0bdb2a2f 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -138,7 +138,7 @@ evidence turns one into a supported-baseline defect. |---|---| | Broader HDMI EDID/display compatibility | Stretch: fixed-mode HDMI already passes; add fallback modes when real displays require them | | Panel-Fix tool | Stretch feature | -| Dedicated H700 toolchain image | Build optimization; revisit when another external dependency lands | +| Prebake SDL2 / jammy libasound into h700-toolchain | Follow-up: dedicated image ships (`h700-toolchain`); content specialization still optional | | Pak Store | Separate product scope; NET-04 is not exercised for this port | | OTA updates | Separate product scope; NET-05 is not exercised for this port | diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 00cf1dcb1..f37b5eda7 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -18,7 +18,7 @@ release planning, and per-core coverage. | Doc | Role | Contents | |---|---|---| | [00-device-facts.md](00-device-facts.md) | Knowledge base | Probed hardware/OS facts, sysfs/ioctl/evdev reference, stock boot chain, known unknowns | -| [01-toolchain-and-build.md](01-toolchain-and-build.md) | Knowledge base | tg5040-image reuse, in-tree SDL2, dependency policy, and reusable cross-toolchain lessons | +| [01-toolchain-and-build.md](01-toolchain-and-build.md) | Knowledge base | dedicated h700-toolchain image, in-tree SDL2, dependency policy, and cross-toolchain lessons | | [02-boot-and-installer.md](02-boot-and-installer.md) | Knowledge base | `dmenu.bin` hijack, storage/write policy, boot shim, installer, and launcher responsibilities | | [03-platform-layer.md](03-platform-layer.md) | Knowledge base | Platform API map, device detection, evdev/SDL input split, libmsettings, keymon, and cores | | [04-video-display.md](04-video-display.md) | Knowledge base | Mali/fbdev architecture, geometry, rotation and HDMI decision records, DisplayCal, graphics incidents | @@ -32,9 +32,10 @@ release planning, and per-core coverage. ## Architecture in one paragraph One `h700` platform serves rg40xx/rg34xx/rg28xx/cube (`DEVICE` env, detected at boot -from the stock dmenu.bin binary). It builds inside the **tg5040 toolchain image** (same -aarch64/A53 target, forward-compatible glibc) with one in-tree extra: a pinned custom -SDL2 (`JohnnyonFlame/SDL-malifbdev-rot`) targeting the Mali blob's fbdev EGL winsys. +from the stock dmenu.bin binary). It builds inside the **h700-toolchain image** (same +aarch64/A53 target and TG5040-derived SDK sysroot as the historical tg5040 reuse, +forward-compatible glibc) with one in-tree extra: a pinned custom SDL2 +(`JohnnyonFlame/SDL-malifbdev-rot`) targeting the Mali blob's fbdev EGL winsys. NextUI's shared `generic_video.c`/`generic_wifi.c`/`generic_bt.c` run unchanged. Boot is hijacked by dropping one `dmenu.bin` file on the stock card's FAT partition; NextUI itself lives entirely on TF2. The stock Ubuntu userland is used aggressively @@ -46,7 +47,7 @@ bundled around. | Decision | Planned | Shipped / outcome | |---|---|---| | Platform | one `h700`, `DEVICE` env per device | ✅ as planned | -| Arch / toolchain | 64-bit, reuse tg5040 image | ✅ as planned — with real costs; pitfalls catalogued in 01 | +| Arch / toolchain | 64-bit; dedicated `h700-toolchain` (TG5040 SDK recipe) | ✅ dedicated image; sysroot-mismatch pitfalls catalogued in 01 | | SDL2 | in-tree malifbdev-rot build | ✅ as planned, pinned + config-asserted | | Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; multi-panel UI scaling + box art pass; panel-matched overlay assets not shipped | | **Input** | SDL joystick route | **Deviation:** raw evdev remains primary for the built-in pad; the SDL classification fix makes enumeration work, but the built-in SDL ordering differs from external-pad `JOY_*` mappings and would duplicate/mis-map events. SDL is retained for external pads (03) | diff --git a/makefile.toolchain b/makefile.toolchain index 45ffed8b5..f8ae30c67 100644 --- a/makefile.toolchain +++ b/makefile.toolchain @@ -10,9 +10,6 @@ HOST_WORKSPACE=$(shell pwd)/workspace GUEST_WORKSPACE=/root/workspace TOOLCHAIN_NAME=$(PLATFORM) -ifeq ($(PLATFORM),h700) -TOOLCHAIN_NAME=tg5040 -endif GIT_IF_NECESSARY=toolchains/$(TOOLCHAIN_NAME)-toolchain INIT_IF_NECESSARY=toolchains/$(TOOLCHAIN_NAME)-toolchain/.build From 81c28fb7a686842ba9111477133ac628a08ebda0 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Tue, 21 Jul 2026 16:54:22 +0200 Subject: [PATCH 56/76] build(h700): use h700-toolchain with prebaked SDL2 Stop cloning and building mali-fbdev SDL2 in the platform early target. The latest h700-toolchain prebakes this into the container image, plus also no need to compile bluez since on H700 we use stock bluez. Use PREFIX_LOCAL from the toolchain image and update the port docs. --- docs/h700-port/01-toolchain-and-build.md | 49 ++++++++++++------------ docs/h700-port/09-roadmap.md | 2 +- docs/h700-port/README.md | 4 +- workspace/h700/makefile | 22 ++++------- 4 files changed, 34 insertions(+), 43 deletions(-) diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 7929cfaaf..244ba8fe4 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -27,18 +27,22 @@ Integration points: `ghcr.io/loveretro/h700-toolchain:latest` (same pattern as tg5040/tg5050; no remap). - `workspace/h700/platform/makefile.env`: tg5040-derived flags (`-mcpu=cortex-a53`, `SDL = SDL2`, `GL = GLES`), with the in-tree SDL2 prefix first in include/lib order. -- `workspace/h700/makefile`: platform-local `early` target builds the external deps - (SDL2, below) before the apps. +- `workspace/h700/makefile`: platform-local `early` stages prebaked SDL2 from the + image and builds other deps (NextCommander, boot shim) before the apps. - The full tg5040 core list (28 cores + patches) builds unchanged — same arch, same tuning. -### In-tree SDL2 (not yet prebaked in the image) -On tg5040 the stock OS supplies runtime SDL2; on H700 we ship our own. The platform -`early` target clones **`JohnnyonFlame/SDL-malifbdev-rot`**, **pinned to commit -`d4a7d7503524cc469fe775242f3f925d4dd56c88`**, builds it aarch64 and installs into a local -prefix that `makefile.env` puts first. Configure highlights (see `workspace/h700/makefile`): +### Prebaked SDL2 (h700-toolchain `PREFIX_LOCAL`) +On tg5040 the stock OS supplies runtime SDL2; on H700 we ship our own. The +**h700-toolchain** image builds **`JohnnyonFlame/SDL-malifbdev-rot`** (commit +`d4a7d7503524cc469fe775242f3f925d4dd56c88` + `support/sdl2-h700.patch`) into +`PREFIX_LOCAL=/opt/nextui`. NextUI's `early` target only stages those libs (plus +SDK `SDL2_image`/`ttf`, tinyalsa, libpng12) into `other/sdl2/output` for packaging. +`makefile.env` still prefers `PREFIX_LOCAL` for includes/libs/pkg-config. + +Configure highlights (see `h700-toolchain/support/build-sdl2.sh`): - `--enable-video-mali --enable-video-opengles`, x11/wayland/kmsdrm disabled. - The makefile **asserts `#define SDL_VIDEO_DRIVER_MALI 1` in the generated + The build **asserts `#define SDL_VIDEO_DRIVER_MALI 1` in the generated `SDL_config.h`** right after configure — a silent fallback to the dummy driver produces a black screen much later, so fail fast here. - `--enable-alsa --enable-alsa-shared` — ALSA loaded via **dlopen at runtime**, not @@ -47,14 +51,10 @@ prefix that `makefile.env` puts first. Configure highlights (see `workspace/h700 and for alsa-shared/image-shared dlopen to work at all. (An early draft disabled both; don't.) - No udev (`SDL_JOYSTICK_DISABLE_UDEV=1` is also exported at runtime — see 03). -- **`patches/sdl2-h700.patch` is applied after clone** (stamped, like the - NextCommander patch). The fork's "Batocera patches" commit removed the heuristic - joystick classification from `SDL_EVDEV_GuessDeviceClass()` (Batocera classifies - via udev), which — combined with our no-udev build — made `SDL_NumJoysticks()` - permanently return 0 for the built-in pad. NextUI never noticed (it reads evdev - raw — 03), but pure-SDL apps like NextCommander got no input at all. The patch - restores classification via a `BTN_GAMEPAD`/`BTN_JOYSTICK` check (the upstream - check wouldn't match anyway: the pad exposes no ABS_X/ABS_Y). +- **`sdl2-h700.patch`** restores joystick classification via `BTN_GAMEPAD` / + `BTN_JOYSTICK` (the fork's Batocera patches removed heuristics in favor of udev). + Vendored in the toolchain; keep `workspace/h700/patches/sdl2-h700.patch` in sync + when changing it. ### Runtime library bundling (`platform/makefile.copy`) Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted for: @@ -119,15 +119,14 @@ future stock-OS port: ## Decision: dedicated h700-toolchain (same SDK recipe for now) The port first reused `tg5040-toolchain` in-process; the **pitfalls above are solved -in NextUI** (dlopen ALSA, direct GLES link, bundled libpng12, in-tree SDL2). We now -use a **dedicated** `h700-toolchain` image/repo so H700 builds do not share the -tg5040 container lifecycle, while keeping the proven GCC 8.3 + TG5040 SDK sysroot. - -Still worth doing later inside `h700-toolchain` (not blocking): prebake the pinned -mali-fbdev SDL2 into `PREFIX_LOCAL`, and optionally a jammy-matched libasound, to -remove pitfall classes 1–3 structurally and speed CI. Bluetooth audio uses the stock -H700 BlueALSA daemon, ALSA plugins, SBC runtime, and BlueZ without shipping them from -the toolchain (see 05 and 07; 09 classifies the release implications). +in NextUI** (dlopen ALSA, direct GLES link, bundled libpng12). We now use a +**dedicated** `h700-toolchain` image/repo so H700 builds do not share the tg5040 +container lifecycle, while keeping the proven GCC 8.3 + TG5040 SDK sysroot. + +The image prebakes mali-fbdev SDL2 into `PREFIX_LOCAL` and does **not** rebuild +BlueZ (stock H700 BlueALSA/BlueZ at runtime — see 05 and 07). Optional later: +jammy-matched libasound in the sysroot to harden pitfall #1 further if direct +links reappear. ## Build outputs diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index b0bdb2a2f..54ea9f7f2 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -138,7 +138,7 @@ evidence turns one into a supported-baseline defect. |---|---| | Broader HDMI EDID/display compatibility | Stretch: fixed-mode HDMI already passes; add fallback modes when real displays require them | | Panel-Fix tool | Stretch feature | -| Prebake SDL2 / jammy libasound into h700-toolchain | Follow-up: dedicated image ships (`h700-toolchain`); content specialization still optional | +| Jammy-matched libasound / richer H700 sysroot | Optional: SDL2 already prebaked; BlueZ not in image | | Pak Store | Separate product scope; NET-04 is not exercised for this port | | OTA updates | Separate product scope; NET-05 is not exercised for this port | diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index f37b5eda7..525fd0065 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -34,7 +34,7 @@ release planning, and per-core coverage. One `h700` platform serves rg40xx/rg34xx/rg28xx/cube (`DEVICE` env, detected at boot from the stock dmenu.bin binary). It builds inside the **h700-toolchain image** (same aarch64/A53 target and TG5040-derived SDK sysroot as the historical tg5040 reuse, -forward-compatible glibc) with one in-tree extra: a pinned custom SDL2 +forward-compatible glibc) with mali-fbdev SDL2 prebaked in the toolchain image (`JohnnyonFlame/SDL-malifbdev-rot`) targeting the Mali blob's fbdev EGL winsys. NextUI's shared `generic_video.c`/`generic_wifi.c`/`generic_bt.c` run unchanged. Boot is hijacked by dropping one `dmenu.bin` file on the stock card's FAT partition; NextUI @@ -48,7 +48,7 @@ bundled around. |---|---|---| | Platform | one `h700`, `DEVICE` env per device | ✅ as planned | | Arch / toolchain | 64-bit; dedicated `h700-toolchain` (TG5040 SDK recipe) | ✅ dedicated image; sysroot-mismatch pitfalls catalogued in 01 | -| SDL2 | in-tree malifbdev-rot build | ✅ as planned, pinned + config-asserted | +| SDL2 | malifbdev-rot in h700-toolchain | ✅ prebaked in image; early only stages libs | | Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; multi-panel UI scaling + box art pass; panel-matched overlay assets not shipped | | **Input** | SDL joystick route | **Deviation:** raw evdev remains primary for the built-in pad; the SDL classification fix makes enumeration work, but the built-in SDL ordering differs from external-pad `JOY_*` mappings and would duplicate/mis-map events. SDL is retained for external pads (03) | | **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | diff --git a/workspace/h700/makefile b/workspace/h700/makefile index da0e8d120..5d871abbb 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -15,25 +15,21 @@ REQUIRES_JSTEST=other/jstest REQUIRES_UNZIP60=other/unzip60 REQUIRES_FILEMGR=other/NextCommander REQUIRES_SDL2=other/sdl2 -SDL2_COMMIT=d4a7d7503524cc469fe775242f3f925d4dd56c88 FILEMGR_PATCH=patches/NextCommander-h700.patch FILEMGR_STAMP=.patched-h700-v3 -SDL2_PATCH=patches/sdl2-h700.patch -SDL2_PATCH_STAMP=.patched-h700-v1 -SDL2_STAMP=.configured-nextui-h700-v3 all: readmes -early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) $(REQUIRES_SDL2) +# SDL2 (mali-fbdev, alsa-shared, joystick patch) is prebaked into h700-toolchain +# at PREFIX_LOCAL. Stage it + SDK companion libs for packaging. Rebuild only via +# the toolchain image (support/build-sdl2.sh); keep patches/sdl2-h700.patch in sync. +early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) mkdir -p other cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart unzip - cd $(REQUIRES_SDL2) && ([ -f $(SDL2_PATCH_STAMP) ] || (git checkout -- src/core/linux/SDL_evdev_capabilities.c && git apply ../../$(SDL2_PATCH) && rm -f $(SDL2_STAMP) && touch $(SDL2_PATCH_STAMP))) - cd $(REQUIRES_SDL2) && ([ -f $(SDL2_STAMP) ] || ([ ! -f Makefile ] || make clean)) - cd $(REQUIRES_SDL2) && ( [ -f configure ] || ./autogen.sh ) && ./configure --host=$(CROSS_TRIPLE) --prefix=$(PREFIX_LOCAL) --enable-video-mali --enable-alsa --enable-alsa-shared --enable-video-opengles --disable-video-opengl --disable-video-x11 --disable-video-wayland --disable-video-kmsdrm --disable-pulseaudio --disable-jack --disable-esd --disable-arts --disable-nas --disable-sndio --disable-dbus --disable-ibus --disable-fcitx --disable-hidapi --disable-libudev --disable-power --enable-filesystem --disable-sensor --disable-locale --enable-loadso --enable-shared --disable-static --disable-libsamplerate-shared && touch $(SDL2_STAMP) - grep -q '^#define SDL_VIDEO_DRIVER_MALI 1' $(REQUIRES_SDL2)/include/SDL_config.h - cd $(REQUIRES_SDL2) && make -j && make install + @test -e "$(PREFIX_LOCAL)/lib/libSDL2.so" -o -e "$(PREFIX_LOCAL)/lib/libSDL2-2.0.so.0" || \ + (echo "error: prebaked SDL2 missing from PREFIX_LOCAL=$(PREFIX_LOCAL); use ghcr.io/loveretro/h700-toolchain" >&2; exit 1) mkdir -p $(REQUIRES_SDL2)/output cp -a $(PREFIX_LOCAL)/lib/libSDL2*.so* $(REQUIRES_SDL2)/output/ cp -a $(PREFIX)/lib/libSDL2_image*.so* $(REQUIRES_SDL2)/output/ 2>/dev/null || true @@ -50,7 +46,7 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE clean: cd $(REQUIRES_FILEMGR) && make clean PLATFORM=h700 cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart clean - if [ -f $(REQUIRES_SDL2)/Makefile ]; then cd $(REQUIRES_SDL2) && make clean; fi + rm -rf $(REQUIRES_SDL2)/output rm -rf boot/output ########################################################### @@ -67,8 +63,4 @@ $(REQUIRES_JSTEST): $(REQUIRES_UNZIP60): git clone --depth 1 https://github.com/shauninman/unzip60.git $(REQUIRES_UNZIP60) -$(REQUIRES_SDL2): - git clone https://github.com/JohnnyonFlame/SDL-malifbdev-rot.git $(REQUIRES_SDL2) - cd $(REQUIRES_SDL2) && git checkout $(SDL2_COMMIT) - include ../all/readmes/makefile From 042653977ea24d9e19fc00d6693b797709567315 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Tue, 21 Jul 2026 17:01:41 +0200 Subject: [PATCH 57/76] chore(h700): remove SDL2 patch from source tree SDL2 is built in h700-toolchain; remove the duplicate patch and point docs at support/sdl2-h700.patch there. --- docs/h700-port/01-toolchain-and-build.md | 7 +++---- docs/h700-port/03-platform-layer.md | 2 +- workspace/h700/makefile | 4 ++-- workspace/h700/patches/sdl2-h700.patch | 22 ---------------------- 4 files changed, 6 insertions(+), 29 deletions(-) delete mode 100644 workspace/h700/patches/sdl2-h700.patch diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 244ba8fe4..5e6744d2c 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -51,10 +51,9 @@ Configure highlights (see `h700-toolchain/support/build-sdl2.sh`): and for alsa-shared/image-shared dlopen to work at all. (An early draft disabled both; don't.) - No udev (`SDL_JOYSTICK_DISABLE_UDEV=1` is also exported at runtime — see 03). -- **`sdl2-h700.patch`** restores joystick classification via `BTN_GAMEPAD` / - `BTN_JOYSTICK` (the fork's Batocera patches removed heuristics in favor of udev). - Vendored in the toolchain; keep `workspace/h700/patches/sdl2-h700.patch` in sync - when changing it. +- **`support/sdl2-h700.patch`** (in h700-toolchain) restores joystick classification + via `BTN_GAMEPAD` / `BTN_JOYSTICK` (the fork's Batocera patches removed heuristics + in favor of udev). ### Runtime library bundling (`platform/makefile.copy`) Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted for: diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index d6f18b232..d5db950cf 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -67,7 +67,7 @@ external controllers. Reasons discovered during bring-up: bring-up the built-in pad did not enumerate because the SDL fork's Batocera patches deleted the joystick heuristic in `SDL_EVDEV_GuessDeviceClass()`, so the no-udev fallback path never classified any device as a joystick. Fixed by - `workspace/h700/patches/sdl2-h700.patch` (see 01); SDL joystick enumeration of + h700-toolchain's `support/sdl2-h700.patch` (see 01); SDL joystick enumeration of the built-in pad now works. Note the fork assigns SDL button indices in ascending evdev-keycode order, so the pad's ESC/VOL−/VOL+ (1/114/115) occupy indices 0–2 and the gamepad cluster starts at index 3 (A=3 … MENU=11). diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 5d871abbb..3d0ca7c1c 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -21,8 +21,8 @@ FILEMGR_STAMP=.patched-h700-v3 all: readmes # SDL2 (mali-fbdev, alsa-shared, joystick patch) is prebaked into h700-toolchain -# at PREFIX_LOCAL. Stage it + SDK companion libs for packaging. Rebuild only via -# the toolchain image (support/build-sdl2.sh); keep patches/sdl2-h700.patch in sync. +# at PREFIX_LOCAL. Stage it + SDK companion libs into other/sdl2/output for packaging. +# Rebuild only via the toolchain image (support/build-sdl2.sh + support/sdl2-h700.patch). early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) mkdir -p other cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c diff --git a/workspace/h700/patches/sdl2-h700.patch b/workspace/h700/patches/sdl2-h700.patch deleted file mode 100644 index a951bb97b..000000000 --- a/workspace/h700/patches/sdl2-h700.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/core/linux/SDL_evdev_capabilities.c b/src/core/linux/SDL_evdev_capabilities.c -index a1c4468b4..0e56173b2 100644 ---- a/src/core/linux/SDL_evdev_capabilities.c -+++ b/src/core/linux/SDL_evdev_capabilities.c -@@ -104,6 +104,17 @@ SDL_EVDEV_GuessDeviceClass(const unsigned long bitmask_ev[NBITS(EV_MAX)], - //} - } - -+ /* The Batocera patches above removed heuristic joystick detection (they -+ classify via udev instead), but this build has no libudev, so the -+ fallback enumeration in SDL_sysjoystick.c depends on this function. -+ Gamepad/joystick buttons are enough to classify the H700 built-in -+ controls, which expose no ABS_X/ABS_Y. */ -+ if (test_bit(EV_KEY, bitmask_ev) && -+ (test_bit(BTN_GAMEPAD, bitmask_key) || -+ test_bit(BTN_JOYSTICK, bitmask_key))) { -+ devclass |= SDL_UDEV_DEVICE_JOYSTICK; /* ID_INPUT_JOYSTICK */ -+ } -+ - if (test_bit(EV_REL, bitmask_ev) && - test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel) && - test_bit(BTN_MOUSE, bitmask_key)) { From 88cae21e4b0eea2c70717f44a48fccf03a84eff8 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Tue, 21 Jul 2026 17:37:23 +0200 Subject: [PATCH 58/76] fix(h700): yet another Bluetooth bugfix Avoid invoking bluetoothctl when BlueZ is absent, which can block the init lock and prevent later activation on on-demand stacks. Time-limit shutdown requests and clear stale discovery clients while preserving normal stock and stockmod teardown behavior. --- skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh index b816da7ac..4ab4f0a26 100755 --- a/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh +++ b/skeleton/SYSTEM/h700/etc/bluetooth/bt_init.sh @@ -10,6 +10,7 @@ fi DEVICE_NAME="Anbernic ${RGXX_MODEL:-RG XX} (NextUI)" VENDOR_BT_SCRIPT="/mnt/vendor/ctrl/setBluetooth.sh" BTCTL="/usr/bin/bluetoothctl" +BTCTL_TIMEOUT=5 BLUEALSA="/usr/bin/bluealsa" HCI_PATH="/sys/class/bluetooth/hci0" VENDOR_LOCK="/tmp/.init_bt" @@ -73,6 +74,14 @@ block_bt() { fi } +run_btctl_bounded() { + if command -v timeout >/dev/null 2>&1; then + timeout "$BTCTL_TIMEOUT" "$BTCTL" "$@" + else + "$BTCTL" "$@" + fi +} + wait_for_hci() { bt_hci_tries=0 while [ ! -d "$HCI_PATH" ] && [ "$bt_hci_tries" -lt 7 ]; do @@ -286,9 +295,18 @@ start_bt() { stop_bt() { log "Stopping Bluetooth" - if [ -x "$BTCTL" ]; then - "$BTCTL" scan off >> "$LOG_FILE" 2>&1 || true - "$BTCTL" power off >> "$LOG_FILE" 2>&1 || true + # Settings may still have discovery clients running while the toggle is being + # changed. Clear them before teardown so they cannot hold open a stale D-Bus + # request after BlueZ exits. + killall bluetoothctl 2>/dev/null || true + + # BaseOS starts BlueZ on demand. When Bluetooth is already off, invoking + # bluetoothctl without bluetoothd can block forever and retain NEXTUI_LOCK, + # preventing the next start operation. Only ask a live daemon to stop scanning + # and power down, and bound both best-effort requests in case it is unhealthy. + if [ -x "$BTCTL" ] && pidof bluetoothd >/dev/null 2>&1; then + run_btctl_bounded scan off >> "$LOG_FILE" 2>&1 || true + run_btctl_bounded power off >> "$LOG_FILE" 2>&1 || true fi killall bluetoothctl 2>/dev/null || true From 3b53e8fba1cf38c85c29b10404476f76639df5b3 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 24 Jul 2026 22:41:18 +0200 Subject: [PATCH 59/76] fix(h700): fill the cube panel with 10 list rows The RGcubexx main list stopped 68% down the 720x720 panel, leaving a black gap above the button hints (issue #18). Rows run from SCALE1(PADDING + j*PILL_SIZE) to the footer at h - SCALE1(PADDING + PILL_SIZE), so the panel fits (360 - 10 - 30) / 30 = 10 rows, not the 8 that were hardcoded. Same height and scale as the HDMI path and tg5050, which already use 10. Untested on cube hardware. --- docs/h700-port/08-testing-status.md | 2 +- workspace/h700/platform/platform.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 6173a9df8..826fbdb1a 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -135,7 +135,7 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger | DEV-01 | RG40XXV 640×480/single-stick baseline | ✅ | RG40XXV | UI, input, game runtime, HDMI, and Bluetooth paths pass | | DEV-02 | RG34XXSP 720×480/lid/dual-stick delta | ✅ | RG34XXSP | UI scaling, lid, controls, apps, and games pass | | DEV-03 | RG28XX 480×640 rotation delta | ✅ | RG28XX | UI, game Aspect/Fullscreen scaling, bootlogo apply, and rotated preview pass | -| DEV-04 | RGcubexx 720×720 delta | ⚠️ | Community report | General UI scaling passes; no full local functional/core walk exists | +| DEV-04 | RGcubexx 720×720 delta | ⚠️ | Community report | General UI scaling passes; the main list under-filled the panel (8 rows instead of the 10 that fit) until [#18](https://github.com/pvaibhav/NextUI/issues/18) — fix is untested on cube hardware; no full local functional/core walk exists | | DEV-05 | Bootlogo 640×480 apply/backup | ✅ | RG40XXV | Carousel, apply, backup, and original entry pass; restore uses the same apply path | | DEV-06 | Bootlogo 720×480 preview/apply/backup/restore | ✅ | RG34XXSP | All 23 presets render; first backup and restore pass | | DEV-07 | Bootlogo 480×640 apply and preview orientation | ✅ | RG28XX | Applied logo and rotated previews are upright | diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index bba166c45..acd9ddf2b 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -163,8 +163,9 @@ extern int dev_has_rstick; /////////////////////////////// -// 10 rows at 720p/scale-2 matches tg5050 (same resolution and scale) -#define MAIN_ROW_COUNT (hdmi_active?10:(is_cube?8:6)) +// Rows that fit above the button hints: (FIXED_HEIGHT/FIXED_SCALE - 2*PADDING - PILL_SIZE) / PILL_SIZE +// 720-tall at scale 2 (HDMI and the cube's square panel) gives 10, like tg5050; 480 gives 6. +#define MAIN_ROW_COUNT ((hdmi_active||is_cube)?10:6) #define QUICK_SWITCHER_COUNT 3 #define PADDING 5 From 469dd2c57782b61267eb0d05ce278ad2e0a6486b Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Fri, 24 Jul 2026 23:46:51 +0200 Subject: [PATCH 60/76] fix(h700): stop passing PLATFORM as a make argument to the guest build Cores that share picoarch's build system set `PLATFORM = libretro` in their own makefile. d4fc5b51 changed the container invocations to `make PLATFORM=$(PLATFORM)`, and a command-line variable is recorded in MAKEOVERRIDES, so it overrode that assignment in every recursive make. picodrive and pcsx_rearmed then built without their libretro frontend objects and, because the link uses -flto plus a version script that keeps only retro_* global plus --gc-sections, nothing was reachable: instead of failing, the link emitted a ~10KB stub with no entry points that segfaults as soon as minarch resolves retro_init. That stub shipped as the PS1 core for h700, tg5040 and tg5050 in the 20260720 and 20260724 builds (issue #19). This is branch-local. Upstream runs a bare `make` in the container and lets UNION_PLATFORM arrive through the environment, where a makefile assignment still wins; the host's MAKEFLAGS never crosses the docker boundary. Drop the argument from build/build-cores/build-core so the guest matches upstream, and revert 04a1d62d's per-core picodrive workaround, which was treating this same cause. workspace/all/cores/makefile is byte-identical to main again. Verified: clean rebuilds of pcsx_rearmed and picodrive with no per-core override both export the libretro entry points, picodrive matches its last good release size, a full `make build PLATFORM=h700` completes, and on an RG40XXV the rebuilt PS1 core reports api_version=1, PCSX-ReARMed r26, and survives retro_init/retro_deinit. --- docs/h700-port/01-toolchain-and-build.md | 23 +++++++++++++++++++++++ makefile.toolchain | 13 ++++++++++--- workspace/all/cores/makefile | 8 +------- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index 5e6744d2c..f7a73318f 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -31,6 +31,29 @@ Integration points: image and builds other deps (NextCommander, boot shim) before the apps. - The full tg5040 core list (28 cores + patches) builds unchanged — same arch, same tuning. +### Never pass the platform as a `make` argument to the guest build + +See the note above the `build` target in `makefile.toolchain`. A command-line variable is +recorded in `MAKEOVERRIDES` and overrides same-named assignments in *every* recursive +make, including the `PLATFORM = libretro` that picodrive and pcsx_rearmed set in their +picoarch-derived build system. Their libretro frontend objects then never reach `OBJS`, +and because the link uses `-flto`, a version script that keeps only `retro_*` global, +and `--gc-sections`, nothing is reachable: the linker emits a ~10KB stub that segfaults +as soon as minarch resolves `retro_init`. Upstream is unaffected — it invokes a bare +`make` in the container and lets `UNION_PLATFORM` flow through the environment, where a +makefile assignment still wins. The h700 branch introduced the command-line form in +`d4fc5b51`, which broke picodrive (worked around per-core in `04a1d62d`) and shipped a +stub PS1 core for h700, tg5040, and tg5050 in the 20260720 and 20260724 builds +([#19](https://github.com/pvaibhav/NextUI/issues/19)). The guest invocations now match +upstream and the per-core workarounds are gone. + +A stub core is silent — it links, installs, and only fails when minarch resolves +`retro_init` — so if a core is ever suspected, check it directly rather than by size: + +``` +nm -D workspace//cores/output/_libretro.so | grep retro_api_version +``` + ### Prebaked SDL2 (h700-toolchain `PREFIX_LOCAL`) On tg5040 the stock OS supplies runtime SDL2; on H700 we ship our own. The **h700-toolchain** image builds **`JohnnyonFlame/SDL-malifbdev-rot`** (commit diff --git a/makefile.toolchain b/makefile.toolchain index f8ae30c67..c56b4015e 100644 --- a/makefile.toolchain +++ b/makefile.toolchain @@ -57,17 +57,24 @@ _runtime_check: fi; \ fi +# The platform reaches the guest build through the environment only, never as a +# `make PLATFORM=...` argument. A command-line variable lands in MAKEOVERRIDES and +# overrides same-named assignments in *every* recursive make, including each core's +# own `PLATFORM = libretro` (picodrive, pcsx_rearmed) — those then build without +# their libretro frontend and link to an entry-point-less stub. Environment values +# lose to a makefile assignment, which is what workspace/makefile expects. + build: $(INIT_IF_NECESSARY) _runtime_check - $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make PLATFORM=$(PLATFORM)' + $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make' @echo "$(CURRENT_RUNTIME)" > $(RUNTIME_MARKER) build-cores: $(INIT_IF_NECESSARY) _runtime_check - $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make cores PLATFORM=$(PLATFORM)' + $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make cores' @echo "$(CURRENT_RUNTIME)" > $(RUNTIME_MARKER) build-core: $(INIT_IF_NECESSARY) _runtime_check ifndef CORE $(error CORE is not set) endif - $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e CORE=$(CORE) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make core PLATFORM=$(PLATFORM)' + $(CONTAINER_RUNTIME) run --rm $(CONTAINER_MOUNT_OPTS) -v $(HOST_WORKSPACE):$(GUEST_WORKSPACE) -e COMPILE_CORES=$(COMPILE_CORES) -e CORE=$(CORE) -e PLATFORM=$(PLATFORM) -e UNION_PLATFORM=$(PLATFORM) $(IMAGE_NAME) /bin/bash -c '. ~/.bashrc && export PLATFORM=$(PLATFORM) UNION_PLATFORM=$(PLATFORM) && cd /root/workspace && make core' @echo "$(CURRENT_RUNTIME)" > $(RUNTIME_MARKER) diff --git a/workspace/all/cores/makefile b/workspace/all/cores/makefile index 37df36e4c..54b73c6ed 100644 --- a/workspace/all/cores/makefile +++ b/workspace/all/cores/makefile @@ -22,12 +22,6 @@ endif PATCH = git apply PROCS = -j4 -# The top-level PLATFORM command-line variable propagates through recursive make -# calls and otherwise overrides PicoDrive's internal `PLATFORM = libretro` -# assignment. Pass the intended value explicitly so its libretro frontend/VFS -# objects are included in clean builds. -picodrive_FLAGS += PLATFORM=libretro - ############################### BUILD_ROOT=../../$(PLATFORM)/cores @@ -83,4 +77,4 @@ clean: $(foreach CORE,$(CORES),clean-$(CORE)) nuke: rm -rf ./output - rm -rf ./src + rm -rf ./src \ No newline at end of file From 24a150d5c7f4cab91ed46a8cc823f3319b287af3 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sat, 25 Jul 2026 02:14:24 +0200 Subject: [PATCH 61/76] fix(h700): power off the AXP2202 explicitly instead of trusting the kernel Power-off was intermittently leaving the device in limbo: screen dark, rails still up. PLAT_powerOff kills the backlight and blanks the framebuffer before it writes the /tmp/poweroff sentinel, so everything downstream of that point is invisible and any failure presents as "it turned off but it didn't". Root cause is the same PMIC latch the Brick had. reboot(LINUX_REBOOT_CMD_POWER_OFF) lands in the kernel's generic axp20x_power_off, which writes AXP20X_OFF_CTRL at 0x32. AXP2202 (same die as AXP717) moved the on/off control group the AXP2101 keeps at 0x10 out to 0x27, so that write is a no-op: the CPU halts and the rails stay up. Compounding it, the AXP's interrupts are still armed at that point -- 0x40-0x44 read non-zero on device, with the power-key edge IRQs (PONP/PONN in IRQ_EN1) enabled -- and a pending unmasked IRQ holds the IRQ pin low, which powers the PMU straight back on after >16ms. The press that asked for power-off is itself the most likely thing to undo it. 03-platform-layer.md listed poweroff_next/reboot_next as deliberately dropped because "systemd poweroff/reboot work fine". That was wrong twice over: this is a PMIC latch no init system can fix, and the base OS runs BusyBox init with no systemd at all. Port both tools from tg5040 (itself vendored from Helaas's nextui-brick-poweroff-hook). Register sequence against the AXP2202 at 0x34: mask 0x40-0x44, clear 0x48-0x4C (write-1-to-clear), 0x22 <- 0x0A (PWROFF_EN: button event powers off rather than restarts), 0x27 <- 0x01 (SOFT_PWROFF). The 0x27 write is a plain store, not read-modify-write, so it also clears bit3 (PWROK pulled low restarts the system), observed set as 0x27 = 0x08 on stock H700 firmware. Note this is not a battery disconnect, despite how the Brick fix is usually described; that is 0x12 bit 3 (BATFET_CTRL), which the sequence never touches. The "soft-disconnect the battery" framing traces to an earlier brute-force experiment using different registers with misattributed names. 0x12 is eFuse-defaulted and left alone. Four deliberate divergences from the tg5040 tool: - The I2C bus is auto-detected by scanning /sys/bus/i2c/devices/*/name for an axp* at 0x34, falling back to /dev/i2c-5. tg5040 hardcodes /dev/i2c-6; H700 has the PMIC on twi5. - The card path is resolved with realpath. SDCARD_PATH is /mnt/SDCARD, which launch.sh makes a symlink or bind mount onto /mnt/sdcard, and both /proc/mounts and /proc/*/fd name the resolved path -- the tg5040 string compares against /mnt/SDCARD would never match here. - No global process kill. tg5040 SIGTERM/SIGKILLs every pid first; the base OS has ::respawn:/sbin/nextui-session in inittab, so killing launch.sh starts a new frontend racing the shutdown, which is the failure being fixed. The PMIC cut is instantaneous, so nothing needs reaping; CFG_getPowerOffProtection now gates only sync + swapoff + detach-unmount. - reboot_next does no PMIC writes at all -- a restart is the SoC's job. It exists for the deterministic sync and signal blocking. (tg5040's launch.sh calls reboot_next but never builds or ships it, so on the Brick that line is a command-not-found followed by exit 0.) finalize() returns only when every shutdown path has failed, so main returns EXIT_FAILURE there; otherwise the `poweroff_next || poweroff` fallback in launch.sh could never fire. Logging goes to /tmp rather than the card: this path unmounts the card, and the only case where the log matters is the one where we failed to power off, in which case the device is still running. --dry-run reports the detected bus, resolved card path and planned writes while touching nothing; safe on a live device. Verified on RG40XXV: cross-compiles clean, bus detection and path resolution confirmed on hardware via --dry-run for both binaries. The power-off itself is NOT yet hardware-verified. --- docs/h700-port/03-platform-layer.md | 5 +- docs/h700-port/06-power-sleep-battery.md | 61 ++- makefile | 5 + skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 10 +- workspace/h700/poweroff_next/makefile | 39 ++ workspace/h700/poweroff_next/poweroff_next.c | 406 ++++++++++++++++++ workspace/makefile | 2 + 7 files changed, 518 insertions(+), 10 deletions(-) create mode 100644 workspace/h700/poweroff_next/makefile create mode 100644 workspace/h700/poweroff_next/poweroff_next.c diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index d5db950cf..e0533cf7a 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -211,7 +211,10 @@ some translation units. ## What disappeared vs tg5040 (as planned) - `btmanager/` (BlueZ-upgrade pakz — H700 uses firmware-provided BlueZ) -- `poweroff_next/`, `reboot_next` (systemd poweroff/reboot work fine) +- ~~`poweroff_next/`, `reboot_next` (systemd poweroff/reboot work fine)~~ **Reversed.** + That reasoning was wrong twice over: the tg5040 limbo is a PMIC latch that no + init system can fix, and the base OS runs BusyBox init with no systemd at all. + Both tools are now ported — see [06](06-power-sleep-battery.md#power-off--reboot). - LED animation wiring (`led_anim`), ledcontrol.elf (gated to tg50x0 in `workspace/makefile`) — bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` builds for h700 with resolution-keyed preset folders (`640x480`, `720x480`, diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index eb65f7478..4c6e4ef81 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -127,10 +127,63 @@ lid is still closed, the unit returns to sleep. Its lifecycle disposition is in ## Power off / reboot -Launch-loop sentinels: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → `reboot`. -Systemd handles clean unmounts — works; the old port's sysrq fallback -(`echo s/u/o > /proc/sysrq-trigger`) was never needed. Charging-while-off is handled -by u-boot/stock before our hijack, untouched. +Launch-loop sentinels: `/tmp/poweroff` → `poweroff_next`, `/tmp/reboot` → `reboot_next`, +each falling back to the plain busybox/systemd command if the tool exits non-zero. +Charging-while-off is handled by u-boot/stock before our hijack, untouched. + +### The AXP2202 needs an explicit software power-off + +The port originally shipped bare `poweroff` on the theory that "systemd poweroff works +fine". It does not. `reboot(LINUX_REBOOT_CMD_POWER_OFF)` lands in the kernel's generic +`axp20x_power_off`, which writes `AXP20X_OFF_CTRL` at **0x32** — not the power-off +register on this part. AXP2202 (same die as AXP717) moved the on/off control group the +AXP2101 keeps at 0x10 out to **0x27**, so the kernel's write is a no-op: the CPU halts, +the rails stay up, and because `PLAT_powerOff` has already killed the backlight and +blanked the framebuffer, the user sees "the screen went black but it never turned off". + +`workspace/h700/poweroff_next/` fixes it, adapted from tg5040's tool (itself vendored +from Helaas's `nextui-brick-poweroff-hook`). Sequence, against the AXP2202 at 0x34: + +| Write | Why | +|---|---| +| `0x40`–`0x44` ← `0x00` | Mask every IRQ source | +| `0x48`–`0x4C` ← `0xFF` | Clear pending IRQ status (write-1-to-clear) | +| `0x22` ← `0x0A` | `PWROFF_EN`: bit0=0 button event powers off (not restart), bit1 long-press, bit3 LDO-OC, bit2 die-overtemp off | +| `0x27` ← `0x01` | `SOFT_PWROFF` bit0 — the actual trigger | + +The IRQ masking is likely the primary fix: a pending unmasked IRQ holds the AXP's IRQ +pin low, and >16 ms of that powers the PMU straight back on. The power-key edge IRQs +(`PONP`/`PONN` in `IRQ_EN1`) are armed by stock firmware, so the very press that asked +for power-off is the most likely thing to undo it. The `0x27` write is a plain store, +not read-modify-write, which also clears bit3 (PWROK pulled low restarts the system) — +set on stock H700 firmware, observed as `0x27 = 0x08`. + +**This is not a battery disconnect.** That is `0x12` bit 3 (`BATFET_CTRL`), which the +sequence never touches — the "soft-disconnect the battery" description that circulates +for the Brick fix traces to an earlier brute-force experiment with different registers +and misattributed names. `0x12` is eFuse-defaulted and governs the battery-only +powered-off case; leave it alone. + +### H700-specific divergences from the tg5040 tool + +- **Bus is auto-detected**, not hardcoded. tg5040 uses `/dev/i2c-6`; H700 has the PMIC + on `/dev/i2c-5` (`soc/twi5/i2c-5/5-0034`). The tool scans + `/sys/bus/i2c/devices/*/name` for an `axp*` at 0x34 and falls back to `/dev/i2c-5`. +- **The card path is resolved with `realpath`.** `SDCARD_PATH` is `/mnt/SDCARD`, which + launch.sh makes a symlink (or bind mount) onto `/mnt/sdcard`. `/proc/mounts` and + `/proc/*/fd` both name the resolved path, so the tg5040 string comparisons against + `/mnt/SDCARD` would never match here. +- **No global process kill.** tg5040 SIGTERM/SIGKILLs every pid before powering off. + On the base OS `/etc/inittab` has `::respawn:/sbin/nextui-session`, so killing + launch.sh starts a *new* frontend racing the shutdown — the exact failure being + fixed. The PMIC cut is instantaneous and total, so nothing needs reaping first; + `CFG_getPowerOffProtection()` gates a sync + swapoff + detach-unmount and no more. +- **`reboot_next` does no PMIC writes at all** — a restart is the SoC's job. It exists + for the deterministic sync and signal blocking. (tg5040's launch.sh calls + `reboot_next` but never builds or ships it, so on the Brick that line is a + command-not-found followed by `exit 0`.) +- `--dry-run` reports the detected bus, resolved card path and planned writes, and + touches nothing. Safe on a live device. ## CPU governor diff --git a/makefile b/makefile index cfed86367..b346d9a1c 100644 --- a/makefile +++ b/makefile @@ -110,6 +110,11 @@ ifeq ($(PLATFORM), tg5040) cp ./workspace/$(PLATFORM)/poweroff_next/build/$(PLATFORM)/poweroff_next.elf ./build/SYSTEM/$(PLATFORM)/bin/poweroff_next endif endif +ifeq ($(PLATFORM), h700) + # Limbo fix (AXP2202 needs an explicit software power-off) + cp ./workspace/$(PLATFORM)/poweroff_next/build/$(PLATFORM)/poweroff_next.elf ./build/SYSTEM/$(PLATFORM)/bin/poweroff_next + cp ./workspace/$(PLATFORM)/poweroff_next/build/$(PLATFORM)/reboot_next.elf ./build/SYSTEM/$(PLATFORM)/bin/reboot_next +endif ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) cp ./workspace/all/bootlogo/build/$(PLATFORM)/bootlogo.elf ./build/EXTRAS/Tools/$(PLATFORM)/Bootlogo.pak/ endif diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 60dfb977f..e9efa568a 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -81,11 +81,11 @@ ensure_system_dbus() { } if [ -f "/tmp/poweroff" ]; then - poweroff + poweroff_next || poweroff exit 0 fi if [ -f "/tmp/reboot" ]; then - reboot + reboot_next || reboot exit 0 fi @@ -213,13 +213,13 @@ while [ -f "$EXEC_PATH" ]; do fi if [ -f "/tmp/poweroff" ]; then - poweroff + poweroff_next || poweroff exit 0 fi if [ -f "/tmp/reboot" ]; then - reboot + reboot_next || reboot exit 0 fi done -poweroff +poweroff_next || poweroff diff --git a/workspace/h700/poweroff_next/makefile b/workspace/h700/poweroff_next/makefile new file mode 100644 index 000000000..f44ffc30d --- /dev/null +++ b/workspace/h700/poweroff_next/makefile @@ -0,0 +1,39 @@ +########################################################### + +ifeq (,$(PLATFORM)) +PLATFORM=$(UNION_PLATFORM) +endif + +ifeq (,$(PLATFORM)) + $(error please specify PLATFORM, eg. PLATFORM=h700 make) +endif + +ifeq (,$(CROSS_COMPILE)) + $(error missing CROSS_COMPILE for this toolchain) +endif + +########################################################### + +include ../platform/makefile.env + +########################################################### + +INCDIR = -I. -I../../all/common -I../platform +SOURCE = poweroff_next.c ../../all/common/utils.c ../../all/common/config.c + +CC = $(CROSS_COMPILE)gcc +# Override CFLAGS and LDFLAGS to not include SDL2 dependencies +CFLAGS = $(OPT) -g -std=gnu11 -Wall -Wextra +CFLAGS += $(INCDIR) -DPLATFORM=\"$(PLATFORM)\" +LDFLAGS = -lpthread -ldl + +BUILDDIR = build/$(PLATFORM) + +# One source, two binaries: reboot_next skips the PMIC power-off sequence. +all: + mkdir -p $(BUILDDIR) + $(CC) $(SOURCE) -o $(BUILDDIR)/poweroff_next.elf $(CFLAGS) $(LDFLAGS) + $(CC) $(SOURCE) -o $(BUILDDIR)/reboot_next.elf $(CFLAGS) -DREBOOT_NEXT $(LDFLAGS) + +clean: + rm -rf $(BUILDDIR) diff --git a/workspace/h700/poweroff_next/poweroff_next.c b/workspace/h700/poweroff_next/poweroff_next.c new file mode 100644 index 000000000..185160608 --- /dev/null +++ b/workspace/h700/poweroff_next/poweroff_next.c @@ -0,0 +1,406 @@ +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "config.h" + +// H700 counterpart of tg5040's poweroff_next: the AXP2202 needs an explicit +// software power-off, because the kernel's generic axp20x pm_power_off handler +// writes AXP20X_OFF_CTRL (0x32), which is not the power-off register on this +// chip. Without the sequence below the CPU halts but the rails stay up, which +// reads to the user as "the screen went black but it never turned off" — the +// same limbo the Brick had. +// +// Deliberately *not* a straight copy of the tg5040 tool. See run_flush(). + +#define AXP_I2C_ADDR 0x34 +#define AXP_FALLBACK_DEVICE "/dev/i2c-5" +#define I2C_DEVICES_DIR "/sys/bus/i2c/devices" + +// AXP2202 registers (Allwinner BSP names). NOTE the AXP2202 moved the on/off +// control group that the AXP2101 keeps at 0x10 out to 0x27 — writing 0x10 or +// the generic axp20x 0x32 does nothing on this part. +#define AXP_IRQ_EN_FIRST 0x40 +#define AXP_IRQ_EN_LAST 0x44 +#define AXP_IRQ_STATE_FIRST 0x48 +#define AXP_IRQ_STATE_LAST 0x4C +#define AXP_PWROFF_EN 0x22 +#define AXP_SOFT_PWROFF 0x27 + +// PWROFF_EN: bit3 LDO over-current as power-off source, bit1 long-press as +// power-off source, bit2 (die over-temp) cleared, bit0 cleared so a button +// event powers off instead of restarting. +#define AXP_PWROFF_EN_VALUE 0x0A +// SOFT_PWROFF bit0 = power off now. Written as a plain store, not a +// read-modify-write: that also clears bit3 (PWROK pulled low restarts the +// system), which is set on stock H700 firmware and can otherwise bounce the +// SoC back up as the rails collapse. +#define AXP_SOFT_PWROFF_VALUE 0x01 + +// Deliberately tmpfs, not the card: this path unmounts the card, and the only +// case where the log matters is the one where we failed to power off — in which +// case the device is still running and /tmp is right there over SSH. Keeps the +// shutdown path free of card writes. +#define LOG_PATH "/tmp/poweroff_next.txt" + +static FILE *log_fp = NULL; + +#ifdef REBOOT_NEXT +#define TOOL_NAME "reboot_next" +#else +#define TOOL_NAME "poweroff_next" +#endif + +static void log_msg(const char *format, ...) +{ + va_list args; + + if (log_fp) + { + va_start(args, format); + vfprintf(log_fp, format, args); + va_end(args); + fflush(log_fp); + } + + va_start(args, format); + vprintf(format, args); + va_end(args); + fflush(stdout); +} + +static void open_log(void) +{ + log_fp = fopen(LOG_PATH, "w"); + if (log_fp) + setvbuf(log_fp, NULL, _IONBF, 0); // unbuffered: we may lose power mid-write +} + +/////////////////////////////// + +// /mnt/SDCARD is a symlink (or bind mount) onto /mnt/sdcard on H700, so +// /proc/mounts and /proc/*/fd both name the resolved path. Everything that +// compares against the mount point has to use the resolved one. +static void resolve_sdcard(char *out, size_t len) +{ + char resolved[PATH_MAX]; + if (realpath(SDCARD_PATH, resolved) != NULL) + snprintf(out, len, "%s", resolved); + else + snprintf(out, len, "%s", SDCARD_PATH); +} + +static bool is_mounted(const char *path) +{ + FILE *fp = setmntent("/proc/mounts", "r"); + if (!fp) + { + log_msg(TOOL_NAME ": fopen(/proc/mounts): %s\n", strerror(errno)); + return false; + } + + bool mounted = false; + struct mntent *ent; + while ((ent = getmntent(fp)) != NULL) + { + if (strcmp(ent->mnt_dir, path) == 0) + { + mounted = true; + break; + } + } + + endmntent(fp); + return mounted; +} + +static void swapoff_all(void) +{ + FILE *swaps = fopen("/proc/swaps", "r"); + if (!swaps) + return; + + char line[256]; + if (!fgets(line, sizeof(line), swaps)) // header + { + fclose(swaps); + return; + } + + while (fgets(line, sizeof(line), swaps)) + { + char device[128]; + if (sscanf(line, "%127s", device) == 1) + { + if (swapoff(device) != 0 && errno != ENOENT && errno != EINVAL) + log_msg(TOOL_NAME ": swapoff(%s): %s\n", device, strerror(errno)); + } + } + + fclose(swaps); +} + +// Best-effort card flush. Unlike the tg5040 tool this does NOT kill processes. +// On the H700 base OS init respawns the frontend session (`::respawn:` in +// /etc/inittab), so SIGKILLing launch.sh mid-shutdown starts a *new* frontend +// racing the power-off — the exact failure we are here to remove. The PMIC cut +// below is instantaneous and total, so nothing needs to be reaped first; a +// sync plus an unmount attempt is all the protection that buys anything. +static void run_flush(const char *sdcard) +{ + sync(); + swapoff_all(); + + if (umount2(sdcard, MNT_DETACH) != 0) + { + if (errno != EINVAL && errno != ENOENT) + log_msg(TOOL_NAME ": umount2(%s): %s\n", sdcard, strerror(errno)); + } + + if (is_mounted(sdcard)) + log_msg(TOOL_NAME ": %s still mounted; relying on sync\n", sdcard); + + sync(); +} + +/////////////////////////////// + +#ifndef REBOOT_NEXT + +static int axp_open(void) +{ + char device[PATH_MAX]; + snprintf(device, sizeof(device), "%s", AXP_FALLBACK_DEVICE); + + DIR *dir = opendir(I2C_DEVICES_DIR); + if (dir) + { + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) + { + int bus; + unsigned int addr; + if (sscanf(entry->d_name, "%d-%x", &bus, &addr) != 2) + continue; + if (addr != AXP_I2C_ADDR) + continue; + + char name_path[PATH_MAX]; + snprintf(name_path, sizeof(name_path), "%s/%s/name", I2C_DEVICES_DIR, entry->d_name); + + FILE *fp = fopen(name_path, "r"); + if (!fp) + continue; + + char name[64] = {0}; + bool is_axp = fgets(name, sizeof(name), fp) != NULL && strncmp(name, "axp", 3) == 0; + fclose(fp); + + if (is_axp) + { + name[strcspn(name, "\r\n")] = '\0'; + snprintf(device, sizeof(device), "/dev/i2c-%d", bus); + log_msg(TOOL_NAME ": found %s at %s addr 0x%02x\n", name, device, AXP_I2C_ADDR); + break; + } + } + closedir(dir); + } + else + { + log_msg(TOOL_NAME ": opendir(%s): %s\n", I2C_DEVICES_DIR, strerror(errno)); + } + + int fd = open(device, O_RDWR | O_CLOEXEC); + if (fd < 0) + { + log_msg(TOOL_NAME ": open(%s): %s\n", device, strerror(errno)); + return -1; + } + + if (ioctl(fd, I2C_SLAVE, AXP_I2C_ADDR) < 0 && ioctl(fd, I2C_SLAVE_FORCE, AXP_I2C_ADDR) < 0) + { + log_msg(TOOL_NAME ": ioctl(I2C_SLAVE[_FORCE]): %s\n", strerror(errno)); + close(fd); + return -1; + } + + return fd; +} + +static int axp_write(int fd, uint8_t reg, uint8_t value) +{ + uint8_t buffer[2] = {reg, value}; + if (write(fd, buffer, sizeof(buffer)) != (ssize_t)sizeof(buffer)) + { + log_msg(TOOL_NAME ": write 0x%02x to reg 0x%02x failed: %s\n", value, reg, strerror(errno)); + return -1; + } + return 0; +} + +// Mask and clear every PMIC interrupt before cutting the rails. A pending, +// unmasked IRQ holds the AXP's IRQ pin low, and >16ms of that powers the PMU +// straight back on. The power-key edge interrupts (PONP/PONN in IRQ_EN1) are +// armed by stock firmware, so the press that asked for power-off is itself the +// most likely thing to undo it. Status registers are write-1-to-clear. +static void axp_quiesce_irqs(int fd) +{ + for (int reg = AXP_IRQ_EN_FIRST; reg <= AXP_IRQ_EN_LAST; ++reg) + axp_write(fd, (uint8_t)reg, 0x00); + + for (int reg = AXP_IRQ_STATE_FIRST; reg <= AXP_IRQ_STATE_LAST; ++reg) + axp_write(fd, (uint8_t)reg, 0xFF); +} + +static int axp_power_off(bool dry_run) +{ + int fd = axp_open(); + if (fd < 0) + return -1; + + if (dry_run) + { + log_msg(TOOL_NAME ": dry run, would write 0x%02x<-0x%02x then 0x%02x<-0x%02x" + " after masking 0x%02x-0x%02x and clearing 0x%02x-0x%02x\n", + AXP_PWROFF_EN, AXP_PWROFF_EN_VALUE, AXP_SOFT_PWROFF, AXP_SOFT_PWROFF_VALUE, + AXP_IRQ_EN_FIRST, AXP_IRQ_EN_LAST, AXP_IRQ_STATE_FIRST, AXP_IRQ_STATE_LAST); + close(fd); + return 0; + } + + axp_quiesce_irqs(fd); + + axp_write(fd, AXP_PWROFF_EN, AXP_PWROFF_EN_VALUE); + + struct timespec settle = {.tv_sec = 0, .tv_nsec = 50000000}; // 50ms + nanosleep(&settle, NULL); + + int ret = axp_write(fd, AXP_SOFT_PWROFF, AXP_SOFT_PWROFF_VALUE); + close(fd); + + // The rails should drop within milliseconds; give them a moment before the + // kernel fallback so we do not race the PMIC. + struct timespec latch = {.tv_sec = 1, .tv_nsec = 0}; + nanosleep(&latch, NULL); + + return ret; +} + +#endif // !REBOOT_NEXT + +/////////////////////////////// + +static void finalize(void) +{ + sync(); + +#ifdef REBOOT_NEXT + int cmd = LINUX_REBOOT_CMD_RESTART; +#else + int cmd = LINUX_REBOOT_CMD_POWER_OFF; +#endif + + if (syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, NULL) != 0) + log_msg(TOOL_NAME ": reboot syscall failed: %s\n", strerror(errno)); + +#ifdef REBOOT_NEXT + execlp("busybox", "busybox", "reboot", "-f", NULL); + reboot(RB_AUTOBOOT); +#else + execlp("busybox", "busybox", "poweroff", "-f", NULL); + reboot(RB_POWER_OFF); +#endif + + log_msg(TOOL_NAME ": every shutdown method failed: %s\n", strerror(errno)); +} + +int main(int argc, char **argv) +{ + // --dry-run reports what would happen (PMIC bus detection, resolved card + // path, protection setting) and touches nothing. Safe to run on a live + // device; that is the point of it. + bool dry_run = false; + for (int i = 1; i < argc; ++i) + { + if (strcmp(argv[i], "--dry-run") == 0) + dry_run = true; + } + + open_log(); + + // init's shutdown sweep must not take us out mid-sequence. + sigset_t block_set; + sigemptyset(&block_set); + sigaddset(&block_set, SIGTERM); + sigaddset(&block_set, SIGINT); + sigaddset(&block_set, SIGHUP); + sigprocmask(SIG_BLOCK, &block_set, NULL); + + CFG_init(NULL, NULL); + + char sdcard[PATH_MAX]; + resolve_sdcard(sdcard, sizeof(sdcard)); + + bool flush = CFG_getPowerOffProtection(); + log_msg(TOOL_NAME ": sdcard=%s mounted=%s flush=%s dry_run=%s\n", + sdcard, is_mounted(sdcard) ? "yes" : "no", + flush ? "yes" : "no", dry_run ? "yes" : "no"); + +#ifndef REBOOT_NEXT + // Reboot deliberately skips the PMIC: a restart is the SoC's job, and + // AXP2202 soft-reset is a different bit we have no need to poke. + if (dry_run) + { + int ret = axp_power_off(true); + CFG_quit(); + return ret == 0 ? 0 : EXIT_FAILURE; + } +#else + if (dry_run) + { + CFG_quit(); + return 0; + } +#endif + + if (flush) + run_flush(sdcard); + else + sync(); + +#ifndef REBOOT_NEXT + if (axp_power_off(false) != 0) + log_msg(TOOL_NAME ": PMIC power-off failed; falling back to the kernel\n"); +#endif + + finalize(); + + // finalize() only returns when every shutdown path failed. Exit non-zero so + // the `poweroff_next || poweroff` fallback in launch.sh actually fires. + log_msg(TOOL_NAME ": still running after finalize; deferring to the caller\n"); + CFG_quit(); + return EXIT_FAILURE; +} diff --git a/workspace/makefile b/workspace/makefile index 4dd24af0d..51a2e361a 100644 --- a/workspace/makefile +++ b/workspace/makefile @@ -37,6 +37,7 @@ ifeq ($(PLATFORM), tg5040) endif ifeq ($(PLATFORM), h700) cd ./$(PLATFORM)/rfkill && make all + cd ./$(PLATFORM)/poweroff_next/ && make endif cd ./$(PLATFORM)/libmsettings && make cd ./$(PLATFORM) && make early # eg. other libs @@ -98,6 +99,7 @@ ifeq ($(PLATFORM), tg5040) endif ifeq ($(PLATFORM), h700) cd ./$(PLATFORM)/rfkill && make clean + cd ./$(PLATFORM)/poweroff_next/ && make clean endif endif cd ./$(PLATFORM)/libmsettings && make clean From 5f088b4603d37b9235c55b2548eff864ccff3685 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 26 Jul 2026 12:11:49 +0200 Subject: [PATCH 62/76] fix(h700): scan out the framebuffer page HDMI actually renders into MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After the disp0 output switch both the TV and the panel stayed black. fb_var_screeninfo's pan offset survives a FBIOPUT_VSCREENINFO resize: coming off the 640x480 panel yoffset is still 480, which is not a page boundary of the new 1280x720x2 buffer. Measured on RG40XXV, that wedges the mali fbdev winsys — it never pans again and every frame lands in page 0 — while commitLayerGeometry() had cropped the scanout layer to page 1. Page 0 full of pixels, page 1 all zeros, crop pointing at page 1. Reset both offsets when changing geometry and commit crop.y as page 0 to match, so the layer and the buffer agree from the first scanout and the blob's flips take over from a sane origin. crop.y joins the read-back verification too, since the attach path's asynchronous restore can revive the old page offset after our commit lands. Only reachable on an OS that provides /sys/kernel/debug/dispdbg; on BaseOS the switch itself was a no-op until it started mounting debugfs, which is what kept this hidden. Validated on RG40XXV: nine hotplug transitions in both directions, all exiting cleanly with no SetHDMI errors. --- workspace/h700/libmsettings/msettings.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index 9ebbdbf98..0e268f83d 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -916,6 +916,12 @@ static void setFramebufferSize(int w, int h) { vinfo.yres = h; vinfo.xres_virtual = w; vinfo.yres_virtual = h * 2; // double buffered + // The pan offset survives the resize: coming off the 640x480 panel it is + // still 480, which is not a page boundary of the new geometry. Left + // there it wedges the winsys — measured on RG40XXV, fb0 then never pans + // again and every frame lands in page 0. Reset it so the buffer starts + // on page 0 and the blob's flips work from a sane origin. + vinfo.xoffset = vinfo.yoffset = 0; vinfo.bits_per_pixel = 32; // FORCE so set_par runs (and rebuilds the DE layer for the new output) // even when the geometry is unchanged @@ -934,6 +940,11 @@ static void setFramebufferSize(int w, int h) { // switch we read-modify-write the fb0 layer ourselves with the geometry that // matches the new framebuffer and output; the blob's per-flip pans then keep // the crop in sync against our committed config. +// The crop we commit must name page 0, matching the pan offset setFramebufferSize +// just reset. Naming page 1 was only ever right if a flip landed before the first +// scanout; when none does — which is what happens if the winsys is wedged, and +// what happened on BaseOS — the display shows a page nothing has written, i.e. +// black on both the TV and the panel. // The switch path restores the previous mode's layer config on device attach, // asynchronously and sometimes AFTER we've already written ours — whichever // commit lands last wins. So: commit, read back, and retry until it sticks. @@ -958,7 +969,7 @@ static void commitLayerGeometry(int fbW, int fbH, int outW, int outH) { config.info.fb.size[i].height = fbH * 2; // whole double buffer } config.info.fb.crop.x = 0; - config.info.fb.crop.y = ((long long)fbH) << 32; // page 1; pans re-sync it every flip + config.info.fb.crop.y = 0; // page 0 — see above config.info.fb.crop.width = ((long long)fbW) << 32; config.info.fb.crop.height = ((long long)fbH) << 32; config.info.screen_win.x = 0; @@ -976,7 +987,8 @@ static void commitLayerGeometry(int fbW, int fbH, int outW, int outH) { if (ioctl(fd, DISP_LAYER_GET_CONFIG, param) < 0) break; applied = config.info.fb.size[0].width == (unsigned)fbW - && config.info.screen_win.width == (unsigned)outW; + && config.info.screen_win.width == (unsigned)outW + && config.info.fb.crop.y == 0; // a late restore can revive the old page offset } if (!applied) fprintf(stderr, "SetHDMI: layer geometry %dx%d->%dx%d did not stick\n", fbW, fbH, outW, outH); From ebe8c5bd17af7bb64e3736f2fb3d1b78177b8a19 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 26 Jul 2026 17:23:03 +0200 Subject: [PATCH 63/76] feat(h700): drive the RGB LEDs on RG40XX H/V and RG CubeXX These three models do have RGB LEDs; they hang off an MCU on /dev/ttyS5 (115200 8N1, gated by axp2202 mcu_pwr), not /sys/class/leds, which is why an earlier probe concluded the hardware didn't exist. The MCU animates in firmware, so effect ids are translated onto its native modes rather than animated in userspace -- same division of labour as led_anim on tg50x0. LedControl is now platform-driven (light count, names, effect list), so h700 offers only the four effects the firmware has and RGB-less models get a message instead of dividing by zero. Ambient Mode narrows to Off/On. Also fixes shared code that predates this: LEDS_updateLeds derived its LED count from $DEVICE and ignored MAX_LIGHTS, and GFX_setAmbientColor wrote lightsAmbient[3] unconditionally. tg5040/tg5050 now report their real per-model count -- returning MAX_LIGHTS there would walk a zeroed slot and write brightness 0 to the global max_scale, killing every LED. Verified on RG40XXV (colour, brightness, effects, speed, ambient) and TrimUI Brick (per-LED mapping). RG40XX H and CubeXX are untested: their second bank and its ordering are assumptions, flagged as LED-01b. --- docs/h700-port/00-device-facts.md | 33 +- docs/h700-port/03-platform-layer.md | 13 +- docs/h700-port/08-testing-status.md | 8 + docs/h700-port/README.md | 3 +- makefile | 2 +- .../Tools/h700/LedControl.pak/launch.sh | 11 + .../h700/LedControl.pak/ledsettings_h700.txt | 19 + skeleton/SYSTEM/h700/bin/suspend | 4 + workspace/all/common/api.c | 47 +- workspace/all/common/api.h | 24 + workspace/all/ledcontrol/ledcontrol.c | 120 +++-- workspace/all/minarch/ma_config.c | 24 +- workspace/h700/platform/led.c | 482 ++++++++++++++++++ workspace/h700/platform/platform.c | 58 ++- workspace/h700/platform/platform.h | 7 +- workspace/makefile | 4 +- workspace/tg5040/platform/platform.c | 11 + workspace/tg5050/platform/platform.c | 8 + 18 files changed, 802 insertions(+), 76 deletions(-) create mode 100755 skeleton/EXTRAS/Tools/h700/LedControl.pak/launch.sh create mode 100644 skeleton/EXTRAS/Tools/h700/LedControl.pak/ledsettings_h700.txt create mode 100644 workspace/h700/platform/led.c diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index 5b7b4c6b0..dc0999a31 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -115,9 +115,18 @@ Anbernic stock-firmware update — paths have historically been stable, but the `time_to_full_now`, `charge_counter`, `health` - Anbernic kernel extras under `axp2202-battery/`: - `moto` — rumble motor (write 1/0) — **confirmed working** - - `work_led` — power LED (0=on, 1=off) — used by the port around backlight off/on + - `work_led` — small power-indicator LED, next to the charge LED. Present on every + H700 model, unrelated to the RGB stick LEDs. **Polarity is `0=off, 1=on`** — an + earlier note here had it backwards. Verified the same way on RG40XXV and RG28XX: + the LED is lit through stock boot and goes out as soon as NextUI's `launch.sh` + writes `0`. Plugging in USB lights it independently of any of this. + The port writes `0` on wake and `1` on sleep (`PLAT_enableBacklight`), so in + practice the LED marks *sleep*, not power. That is inherited from the old + rg35xxplus port, is the same across models, and is deliberate — don't "correct" + the polarity of those writes on the strength of the old comment. - `workled_sleep` — LED behavior during sleep - `lowpwr_led`, `led_test` + - `mcu_pwr` — power rail for the RGB LED MCU (write 1 to enable). See "RGB LEDs" below. - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — polarity verified (`1` = open); lid close sleeps and lid open wakes screen-off. Deep suspend still requires power. POWER can wake light sleep while closed; deep sleep re-sleeps if @@ -125,6 +134,28 @@ Anbernic stock-firmware update — paths have historically been stable, but the - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` - `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) +### RGB LEDs + +Only three models have them: **RG40XX H, RG40XX V, RG CubeXX** (the same three muOS +flags with `device//config/led/rgb = 1`; every other RG XX is `0`). + +An early probe concluded RG XX had no RGB LEDs. That was wrong. They are not exposed +as LED-class devices — on an RG40XXV `/sys/class/leds` is empty, there is no +`led_anim` driver (TrimUI only), and the device tree has no LED node. They hang off a +**separate MCU reached over UART5**: + +- `/dev/ttyS5`, 115200 8N1 raw (`uart@05001400`; char 248,5 — verified present) +- `/sys/class/power_supply/axp2202-battery/mcu_pwr` must be `1` to power the MCU +- Frame: ` `, checksum = `sum(preceding) & 0xFF`, + written as raw bytes. Brightness is one byte for the whole strip (0-255). + - mode 1 solid — payload 8x(R,G,B) for one bank then 8x(R,G,B) for the other + (16 positions in two banks of 8); the only mode with per-bank colour + - mode 2/3/4 breath fast/med/slow — payload 16x(R,G,B), one colour for all + - mode 5/6 rainbow mono/multi — payload `<1> <1> ` +- The MCU animates on its own, so there is no userspace animation in the port — + effect ids are translated onto these modes in `workspace/h700/platform/led.c`. +- Protocol source: muOS `MustardOS/internal`, `script/device/rgb.sh` (SERIAL backend). + ### Network / Bluetooth - WiFi: RTL8821CS (SDIO), module `8821cs`; interfaces `wlan0` (+`wlan1` virtual); `/sys/class/net/wlan0/operstate` for link state diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index e0533cf7a..96f642d08 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -54,7 +54,7 @@ extern int dev_has_lstick, dev_has_rstick; #define FIXED_BPP 2 #define SCREEN_FPS 60.0 // ⚠ assumed, never measured per panel #define SDCARD_PATH "/mnt/SDCARD" // symlink to the real TF2 mountpoint (02) -#define MAX_LIGHTS 0 // no RGB LEDs on RG XX (work_led is on/off only) +#define MAX_LIGHTS 2 // ceiling; PLAT_getNumLeds() reports 0/1/2 per model #define MAIN_ROW_COUNT (hdmi_active?10:(is_cube?8:6)) ``` @@ -131,7 +131,7 @@ open/closed per poll and could drop the wake press between polls. | GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | | GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | | Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | -| LEDs | `MAX_LIGHTS 0`, all `PLAT_setLed*` stubs — hardware has no RGB LEDs. `work_led` used only as sleep/backlight indicator | +| LEDs | RGB on RG40XX H / RG40XX V / RG CubeXX only, via an MCU on `/dev/ttyS5` (115200 8N1) gated by `axp2202-battery/mcu_pwr` — see `platform/led.c`. `MAX_LIGHTS 2` is a ceiling; `PLAT_getNumLeds()` returns 0 (no RGB), 1 (RG40XXV, one populated bank) or 2. Effects are rendered by the MCU firmware, not in userspace. `work_led` remains the sleep/backlight indicator on every model | | Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | | Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP: POWER can wake light sleep with lid closed; deep sleep re-sleeps if the lid remains closed (06). | | Model | `PLAT_getModel` copies the raw `RGXX_MODEL` into a static buffer; when unavailable it returns `Anbernic RG XX` | @@ -215,8 +215,13 @@ some translation units. That reasoning was wrong twice over: the tg5040 limbo is a PMIC latch that no init system can fix, and the base OS runs BusyBox init with no systemd at all. Both tools are now ported — see [06](06-power-sleep-battery.md#power-off--reboot). -- LED animation wiring (`led_anim`), ledcontrol.elf (gated to tg50x0 in `workspace/makefile`) - — bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` +- ~~LED animation wiring (`led_anim`), ledcontrol.elf (gated to tg50x0 in `workspace/makefile`)~~ + **Partly reversed.** `led_anim` really is TrimUI-only, but the premise that RG XX has + no RGB LEDs was wrong — RG40XX H/V and RG CubeXX drive theirs from an MCU over UART5 + (00). `ledcontrol.elf` now builds and ships for h700 as well, and LedControl is + platform-aware: it asks the platform for the light count, names and effect list, and + shows a "no RGB lights" screen on the models without them. + Bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` builds for h700 with resolution-keyed preset folders (`640x480`, `720x480`, `480x640`, `720x720`) selected via `$DEVICE`, writes `bootlogo.bmp` to `mmcblk0p2` (`BOOTLOGO_PARTITION` in `platform.h`), backs up the stock logo as diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 826fbdb1a..95728f5ab 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -153,6 +153,14 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger |---|---|---|---|---| | CAP-01 | FN1/FN2/HOME assignable pak actions | ➖ | RG XX hardware/platform API | RG XX devices have no dedicated buttons; Settings hides the assignment UI | | CAP-02 | Keep awake over USB data connection | ➖ | H700 platform API | `PLAT_isUSBConnected()` is a stub; charging-state power behavior is covered by POWER-04 | +| LED-01 | RGB LEDs driven over the UART5 MCU | ✅ | RG40XXV | Verified end to end: raw frames light the L stick ring, and NextUI drives it with the seeded `0x440044` default after update. Second bank drives nothing on the V, confirming `dev_num_leds = 1`. `/dev/ttyS5` is free (console and getty are on `ttyS0`) | +| LED-02 | Colour, brightness, all four effects | ✅ | RG40XXV | User-verified in LedControl | +| LED-03 | Ambient Mode narrowed to Off/On | ✅ | RG40XXV | User-verified | +| LED-01b | Two-bank models, bank order | ⏳ | RG40XX H / RG CubeXX | Untested — nobody in the fleet has one. Gated to 2 zones, `H700_LED_RIGHT_FIRST 1` per muOS. The V cannot settle bank order: with one populated bank both halves get the same colour, so its "first bank lights the left stick" observation does not generalise | +| LED-06 | tg5040 regression after `PLAT_getNumLeds` | ✅ | TrimUI Brick | Per-LED mapping still correct — each LED responded to its own mode change. This is the path where a wrong count would write brightness 0 to the global `max_scale` and kill every LED | +| LED-05 | Speed control | ✅ | RG40XXV | Rainbow/Rainbow Multi take a continuous 0-255 speed byte and vary smoothly across the whole 0-4900 range. Breathe has only the three firmware rates (modes 2/3/4), so its Speed row quantises into thirds — a known cosmetic wart, not a defect | +| LED-02 | LedControl on a model without RGB | ⏳ | RG34XXSP / RG28XX | Pak now ships to every h700 device; must show the "no RGB lights" screen, exit on B, and never open `/dev/ttyS5` | +| LED-03 | Ambient Mode narrowed to Off/On | ⏳ | RG40XXV | Option is hidden entirely at 0 lights and reduced to two entries at ≤2 | ## Test execution protocol diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 525fd0065..6d90eaade 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -56,7 +56,8 @@ bundled around. | Sleep | `echo mem` + tg5040-style wrapper | ✅ shared power architecture retained; target-specific service and ALSA sequencing documented in 06 | | Lid | hallkey → PLAT lid API | ✅ sysfs-polled lid integrated with the shared sleep request API (06) | | WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | -| Rumble / LEDs | moto sysfs; MAX_LIGHTS 0 | ✅ as planned; rumble tested-good | +| Rumble | moto sysfs | ✅ as planned; tested-good | +| LEDs | MAX_LIGHTS 0 — "no RGB on RG XX" | **Reversed.** RG40XX H/V and RG CubeXX do have RGB, driven by an MCU over UART5 rather than `/sys/class/leds`, which is why the first probe missed them (03) | | Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | | Install | TF1 gets one file; NextUI on TF2; no TF1-only mode | ✅ as planned; TF1 writes mountpoint+cmp guarded | | **Splash** | per-panel raw-BMP `dd` assets | **Deviation:** `fbsplash` text renderer — no per-resolution assets needed (02) | diff --git a/makefile b/makefile index b346d9a1c..f1f6d49c7 100644 --- a/makefile +++ b/makefile @@ -103,7 +103,7 @@ endif cp ./workspace/all/clock/build/$(PLATFORM)/clock.elf ./build/EXTRAS/Tools/$(PLATFORM)/Clock.pak/ cp ./workspace/all/minput/build/$(PLATFORM)/minput.elf ./build/EXTRAS/Tools/$(PLATFORM)/Input.pak/ cp ./workspace/all/settings/build/$(PLATFORM)/settings.elf ./build/EXTRAS/Tools/$(PLATFORM)/Settings.pak/ -ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) cp ./workspace/all/ledcontrol/build/$(PLATFORM)/ledcontrol.elf ./build/EXTRAS/Tools/$(PLATFORM)/LedControl.pak/ ifeq ($(PLATFORM), tg5040) # Limbo fix diff --git a/skeleton/EXTRAS/Tools/h700/LedControl.pak/launch.sh b/skeleton/EXTRAS/Tools/h700/LedControl.pak/launch.sh new file mode 100755 index 000000000..b73cd2c1b --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/LedControl.pak/launch.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +cd "$(dirname "$0")" + +# Seed the defaults once; after that the file belongs to the user. +TARGET="/mnt/SDCARD/.userdata/shared/ledsettings_h700.txt" +if [ ! -f "$TARGET" ]; then + cp ./ledsettings_h700.txt "$TARGET" +fi + +./ledcontrol.elf > ./log.txt 2>&1 diff --git a/skeleton/EXTRAS/Tools/h700/LedControl.pak/ledsettings_h700.txt b/skeleton/EXTRAS/Tools/h700/LedControl.pak/ledsettings_h700.txt new file mode 100644 index 000000000..3773477ac --- /dev/null +++ b/skeleton/EXTRAS/Tools/h700/LedControl.pak/ledsettings_h700.txt @@ -0,0 +1,19 @@ +[Left] +effect=4 +color1=0x440044 +color2=0x440044 +speed=1000 +brightness=100 +trigger=1 +filename=l +inbrightness=100 + +[Right] +effect=4 +color1=0x440044 +color2=0x440044 +speed=1000 +brightness=100 +trigger=1 +filename=r +inbrightness=100 diff --git a/skeleton/SYSTEM/h700/bin/suspend b/skeleton/SYSTEM/h700/bin/suspend index b9f0835a6..db603481e 100755 --- a/skeleton/SYSTEM/h700/bin/suspend +++ b/skeleton/SYSTEM/h700/bin/suspend @@ -19,6 +19,9 @@ asound_state_dir=/tmp/asound-suspend before() { >&2 echo "Preparing for suspend..." echo 1 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true + # RGB models: cut the LED MCU rail, otherwise the last frame stays lit for + # the whole sleep. NextUI repaints it on wake (PLAT_enableBacklight). + echo 0 > /sys/class/power_supply/axp2202-battery/mcu_pwr 2>/dev/null || true # Run pre-sleep hooks synchronously before services are stopped. # Subshell ensures a crashing hook cannot block suspend. @@ -48,6 +51,7 @@ before() { after_sync() { >&2 echo "Resumed from suspend." echo 0 > /sys/class/power_supply/axp2202-battery/work_led 2>/dev/null || true + echo 1 > /sys/class/power_supply/axp2202-battery/mcu_pwr 2>/dev/null || true if [ -f "$asound_state_dir/asound.state.pre" ]; then >&2 echo "Restoring mixer state..." diff --git a/workspace/all/common/api.c b/workspace/all/common/api.c index 96737baf3..ef44c3df7 100644 --- a/workspace/all/common/api.c +++ b/workspace/all/common/api.c @@ -658,19 +658,29 @@ void GFX_setAmbientColor(const void *data, unsigned width, unsigned height, size uint32_t dominant_color = GFX_extract_average_color(data, width, height, pitch); - if (mode == 1 || mode == 2 || mode == 5) + // the zone indices below are the Brick layout (0/1 = FN keys or sticks, + // 2 = top bar, 3 = L/R). Devices with fewer lights simply don't have the + // higher ones, so every index has to be checked -- these are writes into + // a MAX_LIGHTS array and slot 3 is out of bounds on a 2-light device. + int count = LEDS_getCount(); + + if ((mode == 1 || mode == 2 || mode == 5) && count > 2) { (lightsAmbient)[2].color1 = dominant_color; (lightsAmbient)[2].effect = 4; } if (mode == 1 || mode == 3) { - (lightsAmbient)[0].color1 = dominant_color; - (lightsAmbient)[0].effect = 4; - (lightsAmbient)[1].color1 = dominant_color; - (lightsAmbient)[1].effect = 4; + if (count > 0) { + (lightsAmbient)[0].color1 = dominant_color; + (lightsAmbient)[0].effect = 4; + } + if (count > 1) { + (lightsAmbient)[1].color1 = dominant_color; + (lightsAmbient)[1].effect = 4; + } } - if (mode == 1 || mode == 4 || mode == 5) + if ((mode == 1 || mode == 4 || mode == 5) && count > 3) { (lightsAmbient)[3].color1 = dominant_color; (lightsAmbient)[3].effect = 4; @@ -4452,6 +4462,26 @@ FALLBACK_IMPLEMENTATION void PLAT_setLedInbrightness(LightSettings *led) {} FALLBACK_IMPLEMENTATION void PLAT_setLedEffectCycles(LightSettings *led) {} FALLBACK_IMPLEMENTATION void PLAT_setLedEffectSpeed(LightSettings *led) {} +FALLBACK_IMPLEMENTATION int PLAT_getNumLeds(void) { return MAX_LIGHTS; } +FALLBACK_IMPLEMENTATION const char *PLAT_getLedSettingsFile(void) { return "ledsettings.txt"; } +FALLBACK_IMPLEMENTATION const char *PLAT_getLedLabel(int index) { return NULL; } +FALLBACK_IMPLEMENTATION int PLAT_getLedEffectCount(void) { return 6; } // LedControl's historical range +FALLBACK_IMPLEMENTATION int PLAT_getLedEffectId(int index) { return index + 1; } +FALLBACK_IMPLEMENTATION const char *PLAT_getLedEffectName(int effect_id) { return NULL; } + +int LEDS_getCount(void) +{ + static int count = -1; + if (count < 0) { + count = PLAT_getNumLeds(); + // the arrays are MAX_LIGHTS long, so this is the hard backstop + // against a platform over-reporting and walking off the end + if (count < 0) count = 0; + if (count > MAX_LIGHTS) count = MAX_LIGHTS; + } + return count; +} + void LEDS_setProfile(int profile) { if(lights_initialized == 0) @@ -4548,10 +4578,7 @@ void LEDS_updateLeds(bool indicator_only) return; } - char *device = getenv("DEVICE"); - int lightsize = exactMatch("brick", device) ? 4 - : exactMatch("brickpro", device) ? 5 - : 3; // smartpro, smartpro s + int lightsize = LEDS_getCount(); if(!lights) { diff --git a/workspace/all/common/api.h b/workspace/all/common/api.h index 9669a1d1b..61b15cfc8 100644 --- a/workspace/all/common/api.h +++ b/workspace/all/common/api.h @@ -624,6 +624,9 @@ bool LEDS_popProfileOverride(int profile); // returns top of stack, or default if stack is empty int LEDS_getProfileOverride(); +// number of lights on this device, cached and clamped to [0, MAX_LIGHTS] +int LEDS_getCount(void); + // changes the active led profile, calls LEDS_updateLeds() implicitly if needed void LEDS_setProfile(int profile); // enum LightProfile // reapplies the current led config. This should only be necessary @@ -774,6 +777,27 @@ void PLAT_setLedInbrightness(LightSettings *led); void PLAT_setLedEffectSpeed(LightSettings *led); void PLAT_setLedEffectCycles(LightSettings *led); +// How many lights this device actually has. MAX_LIGHTS is only a compile-time +// ceiling: platforms that serve several models (tg5040, h700) populate fewer +// slots than that, and the unpopulated ones are zeroed globals. Walking them +// is not harmless -- on the trimui platforms a zeroed slot writes brightness 0 +// to the *global* led_anim/max_scale and extinguishes every LED -- so every +// platform whose model count differs from MAX_LIGHTS must implement this. +int PLAT_getNumLeds(void); +// basename of the LedControl ini inside SHARED_USERDATA_PATH +const char *PLAT_getLedSettingsFile(void); +// user-visible name for a light, or NULL to let LedControl use its own table +const char *PLAT_getLedLabel(int index); + +// The effect ids in LightSettings.effect are a shared (trimui-derived) space: +// LEDS_initLeds() hardcodes 2 (breathe) and 3 (blink) for the battery/charging +// profiles and GFX_setAmbientColor() hardcodes 4 (static). Platforms expose the +// subset they can actually render via these hooks and translate internally -- +// they never renumber. +int PLAT_getLedEffectCount(void); +int PLAT_getLedEffectId(int index); +const char *PLAT_getLedEffectName(int effect_id); + bool PLAT_canTurbo(void); int PLAT_toggleTurbo(int btn_id); void PLAT_clearTurbo(); diff --git a/workspace/all/ledcontrol/ledcontrol.c b/workspace/all/ledcontrol/ledcontrol.c index c38167a3c..8441d77fc 100644 --- a/workspace/all/ledcontrol/ledcontrol.c +++ b/workspace/all/ledcontrol/ledcontrol.c @@ -29,23 +29,44 @@ const char *lr_effect_names[] = { "Blink 1", "Blink 2", "Blink 3", "Rainbow", "Twinkle", "Fire", "Glitter", "NeonGlow", "Firefly", "Aurora", "Reactive", "LR Rainbow", "LR Reactive"}; +// Resolves an effect id to the index the platform's effect list holds it at, +// so left/right walk the list the hardware actually supports. Falls back to the +// first entry for ids that aren't offered here (a settings file carried over +// from another device, or one of the profile-only ids). +static int effect_index_of(int effect_id) { + int count = PLAT_getLedEffectCount(); + for (int i = 0; i < count; ++i) { + if (PLAT_getLedEffectId(i) == effect_id) return i; + } + return 0; +} + +// Platforms that don't name their own effects keep the historical tables below. +static const char *effect_name_for(int light_index, int effect_id) { + const char *name = PLAT_getLedEffectName(effect_id); + if (name) return name; + + const char **table = effect_names; + int count = sizeof(effect_names) / sizeof(effect_names[0]); + if (light_index == 3) { + table = lr_effect_names; + count = sizeof(lr_effect_names) / sizeof(lr_effect_names[0]); + } + else if (light_index == 2) { + table = topbar_effect_names; + count = sizeof(topbar_effect_names) / sizeof(topbar_effect_names[0]); + } + // effect comes from a user-editable ini, so it can be anything + if (effect_id < 1 || effect_id > count) return "Unknown"; + return table[effect_id - 1]; +} + void save_settings() { LOG_debug("saving settings plat\n"); char diskfilename[256]; - char* device = getenv("DEVICE"); - int maxlights = 3; + int maxlights = LEDS_getCount(); // TODO: this shouldnt be in shared userdata - if(exactMatch("brick", device)) { - maxlights = 4; - snprintf(diskfilename, sizeof(diskfilename), SHARED_USERDATA_PATH "/ledsettings_brick.txt"); - } - else if (exactMatch("brickpro", device)) { - maxlights = 5; - snprintf(diskfilename, sizeof(diskfilename), SHARED_USERDATA_PATH "/ledsettings_brickpro.txt"); - } - else { - snprintf(diskfilename, sizeof(diskfilename), SHARED_USERDATA_PATH "/ledsettings.txt"); - } + snprintf(diskfilename, sizeof(diskfilename), SHARED_USERDATA_PATH "/%s", PLAT_getLedSettingsFile()); FILE *file = fopen(diskfilename, "w"); @@ -100,15 +121,20 @@ void handle_light_input(LightSettings *light, SDL_Event *event, int selected_set switch (selected_setting) { case 0: // Effect - if (PAD_justPressed(BTN_RIGHT)) + { + int effect_count = PLAT_getLedEffectCount(); + if (effect_count > 0 && PAD_justPressed(BTN_RIGHT)) { - light->effect = (light->effect % 6) + 1; // Increase effect (1 to 8) + int index = (effect_index_of(light->effect) + 1) % effect_count; + light->effect = PLAT_getLedEffectId(index); } - else if (PAD_justPressed(BTN_LEFT)) + else if (effect_count > 0 && PAD_justPressed(BTN_LEFT)) { - light->effect = (light->effect - 2 + 6) % 6 + 1; // Decrease effect (1 to 8) + int index = (effect_index_of(light->effect) - 1 + effect_count) % effect_count; + light->effect = PLAT_getLedEffectId(index); } break; + } case 1: // Color if (PAD_justPressed(BTN_RIGHT)) { @@ -217,35 +243,69 @@ void handle_light_input(LightSettings *light, SDL_Event *event, int selected_set int main(int argc, char *argv[]) { char* device = getenv("DEVICE"); - + InitSettings(); PWR_setCPUSpeed(CPU_SPEED_AUTO); - int numOfLights = 3; + SDL_Surface* screen = GFX_init(MODE_MAIN); + PAD_init(); + PWR_init(); + + GFX_clearAll(); + GFX_clearLayers(0); + GFX_flip(screen); + + // GFX_init() is what gets the platform far enough along to answer this + // (the trimui platforms only learn their model in PLAT_initPlatform) + int numOfLights = LEDS_getCount(); + + if (numOfLights == 0) { + // devices in this platform's family that simply have no RGB lights + int quit_msg = 0; + int msg_dirty = 1; + while (!quit_msg) { + GFX_startFrame(); + PAD_poll(); + if (PAD_justPressed(BTN_B)) quit_msg = 1; + + if (msg_dirty) { + GFX_clear(screen); + GFX_blitMessage(font.large, "This device has no RGB lights.", screen, + &(SDL_Rect){0, 0, screen->w, screen->h}); + GFX_blitButtonGroup((char*[]){ "B","BACK", NULL }, 1, screen, 1); + GFX_flip(screen); + msg_dirty = 0; + } + else GFX_sync(); + } + PWR_quit(); + PAD_quit(); + GFX_quit(); + QuitSettings(); + return 0; + } + + // brightness is a single global control unless the hardware exposes one + // per light (the Brick family does, via its per-zone max_scale nodes) int combinedBrightness = 1; if (exactMatch("brick", device)) { const char *brick_names[] = {"F1 key", "F2 key", "Top bar", "L&R triggers"}; memcpy(lightnames, brick_names, sizeof(brick_names)); // Copy values - numOfLights = 4; combinedBrightness = 0; } else if (exactMatch("brickpro", device)) { const char *brickpro_names[] = {"F1 key", "F2 key", "Top bar", "Joysticks", "Triggers"}; memcpy(lightnames, brickpro_names, sizeof(brickpro_names)); // Copy values - numOfLights = 5; combinedBrightness = 0; } else { const char *default_names[] = {"Joystick L","Joystick R", "Logo"}; memcpy(lightnames, default_names, sizeof(default_names)); // Copy values } - - SDL_Surface* screen = GFX_init(MODE_MAIN); - PAD_init(); - PWR_init(); - - GFX_clearAll(); - GFX_clearLayers(0); - GFX_flip(screen); + // platforms that name their own lights win over the tables above + for (int i = 0; i < numOfLights && i < 5; ++i) { + const char *name = PLAT_getLedLabel(i); + if (name) lightnames[i] = name; + } bool running = true; int selected_light = 0; @@ -354,7 +414,7 @@ int main(int argc, char *argv[]) int y = SCALE1(PADDING + PILL_SIZE * (j + 1)); if (j == 0) { // Display effect name instead of number - snprintf(setting_text, sizeof(setting_text), "%s: %s", settings_labels[j], selected_light == 3 ? lr_effect_names[settings_values[j] - 1] : selected_light == 2 ? topbar_effect_names[settings_values[j] - 1] : effect_names[settings_values[j] - 1]); + snprintf(setting_text, sizeof(setting_text), "%s: %s", settings_labels[j], effect_name_for(selected_light, settings_values[j])); SDL_Surface *text = TTF_RenderUTF8_Blended(font.medium, setting_text, current_color); int text_width = text->w + SCALE1(BUTTON_PADDING * 2); GFX_blitPill(selected ? ASSET_WHITE_PILL : ASSET_BLACK_PILL, screen, diff --git a/workspace/all/minarch/ma_config.c b/workspace/all/minarch/ma_config.c index 438a0a65b..ab89fa02c 100644 --- a/workspace/all/minarch/ma_config.c +++ b/workspace/all/minarch/ma_config.c @@ -509,6 +509,8 @@ static void Config_readControlsString(char* cfg) { mapping->mod = mod; } } +static void configureAmbientOption(void); // defined next to ambient_labels below + void Config_load(void) { LOG_info("Config_load\n"); @@ -522,7 +524,9 @@ void Config_load(void) { if (!GFX_supportsOverscan()) { scaling_labels[4] = NULL; } - + + configureAmbientOption(); + char* system_path = SYSTEM_PATH "/system.cfg"; char device_system_path[MAX_PATH] = {0}; @@ -1304,6 +1308,24 @@ char* getScreenScalingDesc(void) { int getScreenScalingCount(void) { return GFX_supportsOverscan() ? 5 : 4; } + +// The ambient zone list is the Brick layout: All, Top bar, FN keys, L/R. +// Devices with two lights only have the pair GFX_setAmbientColor() writes for +// mode 1, so offer that as a plain on/off rather than four options that mostly +// do nothing. No value remapping needed: index 1 is already mode 1. The menu +// walks labels until NULL, so truncating that is what limits the choices. +static void configureAmbientOption(void) { + Option* ambient_option = &config.frontend.options[FE_OPT_AMBIENT]; + int lights = LEDS_getCount(); + if (lights == 0) { + ambient_option->lock = 1; // nothing to light up, keep it out of the menu + } + else if (lights <= 2) { + ambient_labels[1] = "On"; + ambient_labels[2] = NULL; + ambient_option->count = 2; + } +} struct Config config = { diff --git a/workspace/h700/platform/led.c b/workspace/h700/platform/led.c new file mode 100644 index 000000000..6d20b2c75 --- /dev/null +++ b/workspace/h700/platform/led.c @@ -0,0 +1,482 @@ +// h700 RGB LEDs +// +// Included from platform.c (like generic_video.c et al) so the 13 makefiles +// that compile platform.c directly don't each need a new source file. +// +// Only three RG XX models have RGB LEDs: RG40XX H, RG40XX V and RG CubeXX. +// They are NOT in /sys/class/leds and there is no led_anim driver (that is +// TrimUI only) -- they hang off a separate MCU reached over UART5 at 115200 +// 8N1, powered by the axp2202 mcu_pwr rail. The protocol is +// +// +// +// with checksum = sum(preceding bytes) & 0xFF, written as raw bytes. +// +// mode 1 solid, payload 8x(R,G,B) for one bank then 8x(R,G,B) for the +// other -- 16 LED positions in two banks of 8, and the only +// mode with per-bank colour +// mode 2/3/4 breath fast/med/slow, payload 16x(R,G,B), one colour for all +// mode 5/6 rainbow mono/multi, payload <1> <1> +// +// The MCU animates on its own, exactly like the led_anim kernel driver does on +// TrimUI, so there is no userspace animation here -- we translate NextUI's +// effect ids onto the modes above and let the firmware run them. +// +// Hardware limits that shape the design: one brightness byte per frame (global, +// not per zone) and a single effect for the whole strip. Zone 0 governs the +// effect and speed; brightness is the max across zones; colour is per-bank in +// solid mode and zone 0's colour everywhere else. + +#include +#include +#include + +// H700_LED_TTY / H700_MCU_PWR live in platform.c: detect_device() probes for +// them, and it runs before this file is included. + +// MCU modes +#define MCU_SOLID 1 +#define MCU_BREATH_FAST 2 +#define MCU_BREATH_MED 3 +#define MCU_BREATH_SLOW 4 +#define MCU_RAINBOW 5 +#define MCU_RAINBOW_MULTI 6 + +#define LED_PIXELS 16 // addressable positions, two banks of 8 +#define LED_BANK (LED_PIXELS / 2) // positions per bank +#define LED_FRAME_MAX (2 + LED_PIXELS * 3 + 1) // mode + brightness + payload + checksum + +// muOS sends the right-hand bank first, and we follow it. +// +// This only matters on the H and the CubeXX: the RG40XXV has one populated bank +// and gets the same colour in both halves regardless. Testing on a V showed its +// single (left) stick lit by the *first* bank, which looks like a contradiction +// -- but a one-bank device says nothing about how a two-bank one is ordered, and +// the far likelier reading is that the only populated channel is wired to +// channel 1 whichever stick it belongs to. muOS's ordering was written against +// hardware that actually has both banks, so it wins here. +// +// If an H or CubeXX ever turns up with left and right swapped, this is the only +// line that changes. +#define H700_LED_RIGHT_FIRST 1 + +// NextUI effect ids are a shared, TrimUI-derived space (see api.h). We expose +// the subset the MCU can render and translate the rest to the nearest mode. +// Id 9 is "Twinkle" on TrimUI; we reuse it for the MCU's second rainbow, which +// is safe because h700 keeps its own settings file (PLAT_getLedSettingsFile). +#define H700_EFFECT_BREATHE 2 +#define H700_EFFECT_STATIC 4 +#define H700_EFFECT_RAINBOW 8 +#define H700_EFFECT_RAINBOW_MULTI 9 + +static const struct { + int id; + const char *name; +} h700_led_effects[] = { + {H700_EFFECT_STATIC, "Static"}, + {H700_EFFECT_BREATHE, "Breathe"}, + {H700_EFFECT_RAINBOW, "Rainbow"}, + {H700_EFFECT_RAINBOW_MULTI, "Rainbow Multi"}, +}; +#define H700_EFFECT_COUNT ((int)(sizeof(h700_led_effects) / sizeof(h700_led_effects[0]))) + +typedef struct { + uint32_t color; // 0xRRGGBB + int effect; // shared effect id + int speed; // ms, as LedControl stores it + int brightness; // 0-100 +} LedZone; + +static struct { + int fd; + pthread_mutex_t lock; + LedZone zone[MAX_LIGHTS]; + uint8_t last[LED_FRAME_MAX]; + int last_len; // 0 = cache invalid, always resend +} led = { + .fd = -1, + .lock = PTHREAD_MUTEX_INITIALIZER, +}; + +/////////////////////////////// +// frame assembly + +static int LED_breathModeForSpeed(int speed) { + // LedControl's speed row runs 0-4900 in steps of 100; the MCU only offers + // three breath rates, so split that range into thirds. + if (speed < 1700) return MCU_BREATH_FAST; + if (speed < 3300) return MCU_BREATH_MED; + return MCU_BREATH_SLOW; +} + +static int LED_modeForEffect(int effect, int speed) { + switch (effect) { + case 1: return MCU_BREATH_FAST; // Linear + case H700_EFFECT_BREATHE: return LED_breathModeForSpeed(speed); + case 3: return MCU_BREATH_SLOW; // Interval Breathe (low/critical battery) + case H700_EFFECT_STATIC: return MCU_SOLID; + case 5: return MCU_BREATH_FAST; // Blink 1 - the MCU has no blink + case 6: return MCU_BREATH_MED; // Blink 2 + case 7: return MCU_BREATH_SLOW; // Blink 3 + case H700_EFFECT_RAINBOW: return MCU_RAINBOW; + case H700_EFFECT_RAINBOW_MULTI: return MCU_RAINBOW_MULTI; + default: return MCU_SOLID; // per-position effects we can't render + } +} + +static void LED_putColor(uint8_t *buf, int *n, uint32_t color, int repeat) { + uint8_t r = (color >> 16) & 0xFF; + uint8_t g = (color >> 8) & 0xFF; + uint8_t b = color & 0xFF; + for (int i = 0; i < repeat; i++) { + buf[(*n)++] = r; + buf[(*n)++] = g; + buf[(*n)++] = b; + } +} + +// builds a frame from the current zone state, returns its length +static int LED_buildFrame(uint8_t *buf) { + int count = dev_num_leds; + if (count < 1) return 0; + if (count > MAX_LIGHTS) count = MAX_LIGHTS; + + // brightness is a single byte for the whole strip + int brightness = 0; + for (int i = 0; i < count; i++) + if (led.zone[i].brightness > brightness) brightness = led.zone[i].brightness; + if (brightness > 100) brightness = 100; + if (brightness < 0) brightness = 0; + + // LIGHT_PROFILE_OFF zeroes brightness and must actually extinguish, so + // force a black solid frame rather than leaving an effect running dim. + int mode = brightness == 0 + ? MCU_SOLID + : LED_modeForEffect(led.zone[0].effect, led.zone[0].speed); + + uint32_t color_a = brightness == 0 ? 0 : led.zone[0].color; + // with a single populated bank we send the same colour to both, so the + // frame is correct either way round + uint32_t color_b = (brightness == 0 || count < 2) ? color_a : led.zone[1].color; + + int n = 0; + buf[n++] = mode; + buf[n++] = (brightness * 255) / 100; + + if (mode == MCU_RAINBOW || mode == MCU_RAINBOW_MULTI) { + int speed = led.zone[0].speed; + if (speed < 0) speed = 0; + if (speed > 4900) speed = 4900; + buf[n++] = 1; + buf[n++] = 1; + buf[n++] = (speed * 255) / 4900; + } + else if (mode == MCU_SOLID) { +#if H700_LED_RIGHT_FIRST + LED_putColor(buf, &n, color_b, LED_BANK); // right bank + LED_putColor(buf, &n, color_a, LED_BANK); // left bank +#else + LED_putColor(buf, &n, color_a, LED_BANK); + LED_putColor(buf, &n, color_b, LED_BANK); +#endif + } + else { + // breath modes take one colour for the whole strip + LED_putColor(buf, &n, color_a, LED_PIXELS); + } + + int sum = 0; + for (int i = 0; i < n; i++) + sum += buf[i]; + buf[n++] = sum & 0xFF; + + return n; +} + +// caller must hold led.lock +static void LED_commitLocked(void) { + if (led.fd < 0) return; + + uint8_t buf[LED_FRAME_MAX]; + int len = LED_buildFrame(buf); + if (len <= 0) return; + + if (led.last_len == len && memcmp(buf, led.last, len) == 0) + return; // nothing changed, don't touch the wire + + // The fd is non-blocking on purpose: ambient mode repaints from the + // libretro per-frame input poll, and a blocking write of a 51 byte frame + // costs 4.4ms at 115200 -- a quarter of a 60fps frame budget. Writing into + // the tty buffer instead is a memcpy, and the frame drains long before the + // next one arrives (51 bytes every 16.7ms against 11520 bytes/sec). + ssize_t written = write(led.fd, buf, len); + if (written != len) { + // EAGAIN means the buffer is full; leave the cache alone so the next + // commit retries rather than assuming this frame landed + led.last_len = 0; + return; + } + + memcpy(led.last, buf, len); + led.last_len = len; +} + +static void LED_commit(void) { + pthread_mutex_lock(&led.lock); + LED_commitLocked(); + pthread_mutex_unlock(&led.lock); +} + +// The MCU loses its state when mcu_pwr is cut over sleep, so the cached frame +// must not suppress the repaint on wake. +static void LED_invalidateCache(void) { + pthread_mutex_lock(&led.lock); + led.last_len = 0; + pthread_mutex_unlock(&led.lock); +} + +/////////////////////////////// +// port lifecycle + +static void LED_openPort(void) { + if (led.fd >= 0) return; + + putInt(H700_MCU_PWR, 1); + usleep(100 * 1000); // let the MCU rail come up before the first frame + + int fd = open(H700_LED_TTY, O_WRONLY | O_NOCTTY | O_NONBLOCK | O_CLOEXEC); + if (fd < 0) { + LOG_warn("LED: unable to open %s: %s\n", H700_LED_TTY, strerror(errno)); + return; + } + + // nextui hands off to minarch and back; if both ever held the port at once + // their frames would interleave into garbage the MCU can't parse + if (flock(fd, LOCK_EX | LOCK_NB) < 0) { + LOG_warn("LED: %s already claimed, skipping\n", H700_LED_TTY); + close(fd); + return; + } + + struct termios tio; + if (tcgetattr(fd, &tio) < 0) { + LOG_warn("LED: tcgetattr failed: %s\n", strerror(errno)); + close(fd); + return; + } + cfmakeraw(&tio); + cfsetispeed(&tio, B115200); + cfsetospeed(&tio, B115200); + tio.c_cflag |= CLOCAL | CREAD | CS8; + tio.c_cflag &= ~(PARENB | CSTOPB | CRTSCTS); + if (tcsetattr(fd, TCSANOW, &tio) < 0) { + LOG_warn("LED: tcsetattr failed: %s\n", strerror(errno)); + close(fd); + return; + } + + led.fd = fd; + led.last_len = 0; + LOG_info("LED: %s open, %i zone(s)\n", H700_LED_TTY, dev_num_leds); +} + +// turn the LEDs off and drop the MCU rail - poweroff only, never on a normal +// process exit (nextui <-> minarch handoffs would blink the LEDs dark) +static void LED_shutdown(void) { + if (led.fd < 0) return; + + pthread_mutex_lock(&led.lock); + for (int i = 0; i < MAX_LIGHTS; i++) + led.zone[i].brightness = 0; + led.last_len = 0; + LED_commitLocked(); + // the frame is queued in the tty buffer; give it the ~4.4ms it needs to + // reach the MCU before the rail goes away + tcdrain(led.fd); + close(led.fd); + led.fd = -1; + pthread_mutex_unlock(&led.lock); + + putInt(H700_MCU_PWR, 0); +} + +/////////////////////////////// +// platform hooks + +int PLAT_getNumLeds(void) { + detect_device(); + return dev_num_leds; +} + +const char *PLAT_getLedSettingsFile(void) { + // deliberately not "ledsettings.txt": shared userdata can come off a card + // that was in a TrimUI, and its 3-5 sections would be mis-assigned here + return "ledsettings_h700.txt"; +} + +const char *PLAT_getLedLabel(int index) { + switch (index) { + case 0: return "Left"; + case 1: return "Right"; + default: return NULL; + } +} + +int PLAT_getLedEffectCount(void) { return H700_EFFECT_COUNT; } + +int PLAT_getLedEffectId(int index) { + if (index < 0 || index >= H700_EFFECT_COUNT) return H700_EFFECT_STATIC; + return h700_led_effects[index].id; +} + +const char *PLAT_getLedEffectName(int effect_id) { + for (int i = 0; i < H700_EFFECT_COUNT; i++) + if (h700_led_effects[i].id == effect_id) return h700_led_effects[i].name; + return NULL; +} + +void PLAT_initDefaultLeds(void) { + detect_device(); + if (dev_num_leds > 0) + lightsDefault[0] = (LightSettings){"Left", "l", H700_EFFECT_STATIC, 1000, 100, 0x440044, 0x440044, 0, {}, 1, 100, 0}; + if (dev_num_leds > 1) + lightsDefault[1] = (LightSettings){"Right", "r", H700_EFFECT_STATIC, 1000, 100, 0x440044, 0x440044, 0, {}, 1, 100, 0}; +} + +void PLAT_initLeds(LightSettings *lights) { + PLAT_initDefaultLeds(); + if (dev_num_leds < 1) return; + + FILE *file = PLAT_OpenSettings(PLAT_getLedSettingsFile()); + if (file == NULL) { + LOG_warn("Unable to open led settings file\n"); + } + else { + char line[256]; + int current_light = -1; + while (fgets(line, sizeof(line), file)) { + if (line[0] == '[') { + char light_name[255]; + if (sscanf(line, "[%49[^]]]", light_name) == 1) { + current_light++; + if (current_light < dev_num_leds) { + strncpy(lights[current_light].name, light_name, 255 - 1); + lights[current_light].name[255 - 1] = '\0'; + // cycles is never persisted by LedControl, and anything + // other than -1 would make every effect a one-shot + lights[current_light].cycles = -1; + } + else { + LOG_info("Maximum number of lights (%d) exceeded. Ignoring further sections.\n", dev_num_leds); + current_light = -1; + } + } + } + else if (current_light >= 0 && current_light < dev_num_leds) { + int temp_value; + uint32_t temp_color; + char filename[255]; + + if (sscanf(line, "filename=%s", filename) == 1) { + strncpy(lights[current_light].filename, filename, 255 - 1); + lights[current_light].filename[255 - 1] = '\0'; + continue; + } + if (sscanf(line, "effect=%d", &temp_value) == 1) { + lights[current_light].effect = temp_value; + continue; + } + if (sscanf(line, "color1=%x", &temp_color) == 1) { + lights[current_light].color1 = temp_color; + continue; + } + if (sscanf(line, "color2=%x", &temp_color) == 1) { + lights[current_light].color2 = temp_color; + continue; + } + if (sscanf(line, "speed=%d", &temp_value) == 1) { + lights[current_light].speed = temp_value; + continue; + } + if (sscanf(line, "brightness=%d", &temp_value) == 1) { + lights[current_light].brightness = temp_value; + continue; + } + if (sscanf(line, "trigger=%d", &temp_value) == 1) { + lights[current_light].trigger = temp_value; + continue; + } + if (sscanf(line, "inbrightness=%d", &temp_value) == 1) { + lights[current_light].inbrightness = temp_value; + continue; + } + } + } + fclose(file); + } + + LED_openPort(); +} + +// The setters below only stage state. LEDS_updateLeds() calls all five of them +// for every light, so committing eagerly would put four redundant frames (and +// one with the second zone still stale) on the wire per update. PLAT_setLedEffect +// is the last call for a given light -- as on TrimUI, where it is likewise the +// point the settings get applied -- so the frame goes out once the final zone +// has been staged. + +static int LED_zoneIndex(LightSettings *led_settings) { + if (!led_settings) return -1; + if (exactMatch(led_settings->filename, "l")) return 0; + if (exactMatch(led_settings->filename, "r")) return 1; + return -1; +} + +// returns the staged zone, or NULL if this light isn't ours +static LedZone *LED_zoneFor(LightSettings *led_settings) { + int index = LED_zoneIndex(led_settings); + if (index < 0 || index >= dev_num_leds) return NULL; + return &led.zone[index]; +} + +void PLAT_setLedInbrightness(LightSettings *led_settings) { + pthread_mutex_lock(&led.lock); + LedZone *zone = LED_zoneFor(led_settings); + if (zone) zone->brightness = led_settings->inbrightness; + pthread_mutex_unlock(&led.lock); +} + +void PLAT_setLedBrightness(LightSettings *led_settings) { + pthread_mutex_lock(&led.lock); + LedZone *zone = LED_zoneFor(led_settings); + if (zone) zone->brightness = led_settings->brightness; + pthread_mutex_unlock(&led.lock); +} + +void PLAT_setLedColor(LightSettings *led_settings) { + pthread_mutex_lock(&led.lock); + LedZone *zone = LED_zoneFor(led_settings); + if (zone) zone->color = led_settings->color1; + pthread_mutex_unlock(&led.lock); +} + +void PLAT_setLedEffectSpeed(LightSettings *led_settings) { + pthread_mutex_lock(&led.lock); + LedZone *zone = LED_zoneFor(led_settings); + if (zone) zone->speed = led_settings->speed; + pthread_mutex_unlock(&led.lock); +} + +// the MCU has no cycle count - effects run until something replaces them +void PLAT_setLedEffectCycles(LightSettings *led_settings) {} + +void PLAT_setLedEffect(LightSettings *led_settings) { + pthread_mutex_lock(&led.lock); + int index = LED_zoneIndex(led_settings); + LedZone *zone = (index >= 0 && index < dev_num_leds) ? &led.zone[index] : NULL; + if (zone) zone->effect = led_settings->effect; + // commit once the last zone of this pass has been staged + int commit = zone && index == dev_num_leds - 1; + if (commit) LED_commitLocked(); + pthread_mutex_unlock(&led.lock); +} diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 7ed94331e..54f59fe14 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -32,8 +32,17 @@ int is_cube = 0; int hdmi_active = 0; int dev_has_lstick = 0; int dev_has_rstick = 0; +int dev_has_rgb = 0; +int dev_num_leds = 0; static int wake_fd = -1; +// RGB LEDs hang off an MCU on UART5, gated by the axp2202 mcu_pwr rail. +// See led.c, which is included at the bottom of this file. +#define H700_LED_TTY "/dev/ttyS5" +#define H700_MCU_PWR "/sys/class/power_supply/axp2202-battery/mcu_pwr" +static void LED_invalidateCache(void); +static void LED_shutdown(void); + #define H700_INPUT_COUNT 12 #define EV_KEY 0x01 #define EV_ABS 0x03 @@ -189,7 +198,20 @@ static void detect_device(void) { is_rg28xx = exactMatch("rg28xx", device) || exactMatch("RG28xx", model); is_rg34xx = exactMatch("rg34xx", device) || exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model); - is_cube = exactMatch("cube", device) || exactMatch("RGcubexx", model); + is_cube = exactMatch("cube", device) || (model && prefixMatch("RGcube", model)); + + // RGB LEDs exist only on the RG40XX H, RG40XX V and RG CubeXX (same three + // models muOS flags with led/rgb=1); every other RG XX has just the binary + // work_led. The V has a single stick and one populated bank, the H and the + // Cube have two -- which is why the exact model matters here and the coarse + // DEVICE=rg40xx isn't enough. + int is_rg40xxv = exactMatch("RG40xxV", model); + int model_has_rgb = is_rg40xxv || is_cube || exactMatch("rg40xx", device) || + (model && (prefixMatch("RG40xx", model) || prefixMatch("RG40XX", model))); + // launch.sh falls back to DEVICE=rg40xx for anything it doesn't recognise, + // so require the MCU transport to actually be there before we write to it + dev_has_rgb = model_has_rgb && exists(H700_LED_TTY) && exists(H700_MCU_PWR); + dev_num_leds = !dev_has_rgb ? 0 : (is_rg40xxv ? 1 : 2); // Analog sticks per model; every stick on these devices clicks (L3 = left, // R3 = right). Exact RGXX_MODEL strings confirmed so far: RG28xx, RG34xx, @@ -621,6 +643,9 @@ void PLAT_enableBacklight(int enable) { putInt("/sys/class/power_supply/axp2202-battery/work_led", 0); putInt("/sys/class/graphics/fb0/blank", 0); SetBrightness(GetBrightness()); + // the suspend script drops mcu_pwr while we sleep, so the MCU comes + // back blank -- forget the cached frame so the next commit repaints it + LED_invalidateCache(); } else { SetRawBrightness(0); @@ -638,6 +663,7 @@ void PLAT_powerOff(int reboot) { SetRawVolume(MUTE_VOLUME_RAW); PLAT_enableBacklight(0); + LED_shutdown(); SND_quit(); VIB_quit(); PWR_quit(); @@ -855,30 +881,7 @@ ConnectionStrength PLAT_connectionStrength(void) { return SIGNAL_STRENGTH_LOW; } -void PLAT_initDefaultLeds() { -} -void PLAT_initLeds(LightSettings *lights) -{ -} - -void PLAT_setLedInbrightness(LightSettings *led) -{ -} -void PLAT_setLedBrightness(LightSettings *led) -{ -} -void PLAT_setLedEffect(LightSettings *led) -{ -} -void PLAT_setLedEffectCycles(LightSettings *led) -{ -} -void PLAT_setLedEffectSpeed(LightSettings *led) -{ -} -void PLAT_setLedColor(LightSettings *led) -{ -} +// LED support lives in led.c, included at the bottom of this file. ////////////////////////////////////////////// @@ -1033,3 +1036,8 @@ void PLAT_setNetworkTimeSync(bool on) { // We use the generic bluetooth implementation here #include "generic_bt.c" + +///////////////////////// + +// RGB LEDs (RG40XX H/V and RG CubeXX only) +#include "led.c" diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index acd9ddf2b..607efa6ac 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -17,6 +17,8 @@ extern int is_cube; extern int hdmi_active; extern int dev_has_lstick; extern int dev_has_rstick; +extern int dev_has_rgb; +extern int dev_num_leds; /////////////////////////////// @@ -175,7 +177,10 @@ extern int dev_has_rstick; #define MUTE_VOLUME_RAW 0 #define SCREEN_FPS 60.0 -#define MAX_LIGHTS 0 +// ceiling, not the count: only the RG40XX H/V and RG CubeXX have RGB LEDs, and +// the V populates one bank where the others populate two. PLAT_getNumLeds() +// reports what the running device actually has. +#define MAX_LIGHTS 2 // stock Anbernic boot logo: bootlogo.bmp on the vfat boot-resource partition #define BOOTLOGO_PARTITION "/dev/mmcblk0p2" diff --git a/workspace/makefile b/workspace/makefile index 51a2e361a..e0306251a 100644 --- a/workspace/makefile +++ b/workspace/makefile @@ -55,7 +55,7 @@ endif cd ./all/syncsettings/ && make cd ./all/nextval/ && make cd ./all/settings/ && make -ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) cd ./all/ledcontrol/ && make endif ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) @@ -84,7 +84,7 @@ clean: ifneq ($(PLATFORM), desktop) cd ./$(PLATFORM)/keymon && make clean cd ./all/syncsettings/ && make clean -ifneq (,$(filter $(PLATFORM),tg5040 tg5050)) +ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) cd ./all/ledcontrol/ && make clean endif ifneq (,$(filter $(PLATFORM),tg5040 tg5050 h700)) diff --git a/workspace/tg5040/platform/platform.c b/workspace/tg5040/platform/platform.c index 0ef532ff5..278d09816 100644 --- a/workspace/tg5040/platform/platform.c +++ b/workspace/tg5040/platform/platform.c @@ -407,6 +407,17 @@ ConnectionStrength PLAT_connectionStrength(void) { return SIGNAL_STRENGTH_LOW; } +int PLAT_getNumLeds(void) { + // PLAT_initPlatform() sets is_brick/is_brickpro and may not have run yet + // (LedControl asks for the count before GFX_init); it is idempotent. + PLAT_initPlatform(); + // must match how many slots PLAT_initDefaultLeds() below actually fills: + // the spare MAX_LIGHTS slots are zeroed, and a zeroed slot passes the + // filename != "f2" test in PLAT_setLedBrightness and writes brightness 0 + // to the global max_scale, killing every LED. + return is_brickpro ? 5 : is_brick ? 4 : 3; +} + void PLAT_initDefaultLeds() { PLAT_initPlatform(); if(is_brickpro) { diff --git a/workspace/tg5050/platform/platform.c b/workspace/tg5050/platform/platform.c index 4cd03c15e..c5660fc3d 100644 --- a/workspace/tg5050/platform/platform.c +++ b/workspace/tg5050/platform/platform.c @@ -416,6 +416,14 @@ ConnectionStrength PLAT_connectionStrength(void) { return SIGNAL_STRENGTH_LOW; } +int PLAT_getNumLeds(void) { + // MAX_LIGHTS is 4 but PLAT_initDefaultLeds() below only fills 3. The + // spare slot is a zeroed global, and a zeroed slot passes the + // filename != "f2" test in PLAT_setLedBrightness and writes brightness 0 + // to the global max_scale, killing every LED. + return 3; +} + void PLAT_initDefaultLeds() { lightsDefault[0] = (LightSettings) { "Joystick L", From 87e75e982d283dece001653e900fb57d34c75230 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 29 Jul 2026 00:02:02 +0200 Subject: [PATCH 64/76] feat(h700): detect the RG SP properly RG SP model name was not known until now, so NextUI was falling through to the default rg40xx profile, and setting screen width as 640px isntead of 720px. After inspecting the stock OS firmware for RG SP, the model name was found ("RGSP"). All detection paths were updated to allow for this to be its own device, although it is functionally equivalent to rg34xx/sp, just with some DTB changes (DRAM timing was tweaked, analog sticks were deleted, and interestingly, battery got bumped from 3300 mAh -> 3500 mAh). Also, displaycal will treat it as a different model with its own default values, even though the screen is the exact same as the RG34xxSP. The stock OS also has a 640x480 boot logo but this does not concern us. Untested on hardware (don't have it yet) but sent to a couple of people who've got the device. Hope it works all OK. --- docs/h700-port/00-device-facts.md | 34 ++++++++++++++++++- docs/h700-port/03-platform-layer.md | 16 ++++++--- docs/h700-port/04-video-display.md | 11 +++--- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 6 ++++ workspace/all/bootlogo/bootlogo.c | 2 +- workspace/all/common/displaycal.h | 5 +++ workspace/all/settings/settings.cpp | 7 ++++ workspace/h700/libmsettings/msettings.c | 10 ++++-- workspace/h700/platform/platform.c | 18 ++++++++-- workspace/h700/platform/platform.h | 5 ++- 10 files changed, 96 insertions(+), 18 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index dc0999a31..c36bdf393 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -16,6 +16,27 @@ Anbernic stock-firmware update — paths have historically been stable, but the | Anbernic RG40XXV (H700) | Probed live | 640×480, one stick, HDMI; primary probe device | | Anbernic RG34XXSP (H700) | User-tested | 720×480, dual sticks, clamshell lid sensor | | Anbernic RG28XX (H700) | User-tested | Rotated 480×640 panel | +| Anbernic RG SP (H700) | Firmware-analysed | 720×480, **no** sticks; RG34XXSP hardware minus the sticks | + +### RG SP vs RG34XXSP + +Established by comparing the stock `2026-07-27 ANBERNIC RG SP TF1.img` against both +the RG34XXSP stock and StockMod images. The two devices are near-identical: same +DRAM type (boot0 differs by 11 bytes of parameter block), same kernel size to the +byte, and `mali_kbase`/`8821cs`/`rtl_btlpm` with byte-identical `.text`. + +The entire device-tree difference is 34 lines: + +| Change | Meaning | +|---|---| +| `lcd_*` **unchanged** — `lcd_driver_name = "rg34xxsp_v1"`, 720×480, identical timings | same panel; DTB fingerprint `26-820-536`, the `34xx` entry in the panel-fix table below | +| `pmu_battery_cap` `0xce4` → `0xdac` | 3300 → 3500 mAh | +| `keyL3`/`keyR3` removed; `amux-en-gpios`, `A0_gpio`, `A1_gpio`, `adc-en-gpios` removed | no analog sticks | +| GPADC `status` `okay` → `disabled`, five unused `key0..4_vol/val` added | stick ADC turned off | + +⚠ **The stock `bootlogo.bmp` is 640×480 on a 720×480 panel — on the RG34XXSP too.** +It is a stock packaging quirk, not evidence about the panel; StockMod replaces it +with a correct 720×480 image. Do not treat the vendor bootlogo as a geometry source. ## RG40XXV (H700) — probed live @@ -221,6 +242,13 @@ Consequences: breaks: fb0 mode `480x640` → 28xx, `xres/yres` in /sys/class/disp, `axp2202-battery/display_id`, DTB lcd timings. + Strings read straight out of the vendor `dmenu.bin` in each firmware's `appfs` + (p6, the partition mounted at `/mnt/vendor`): **`RGSP`**, `RG34xx`, `RG40xxH`. + ⚠ The RG SP's is a bare **`RGSP`** — no `xx` — so it matches none of the + `RG34xx*`/`RG40xx*` family globs in launch.sh and needs its own case. Before that + case existed it hit the `*) DEVICE="rg40xx"` fallback and NextUI drew the UI at + 640×480 on a 720×480 panel, which is the "4:3 instead of 3:2" symptom users saw. + ## TG5040 (reference) — probed live - Kernel `4.9.191 aarch64` (TinaLinux/OpenWRT-flavored), **glibc 2.33** - `/sys/power/state`: `freeze mem`; same disp2 attrs incl. `color_temperature`; @@ -264,4 +292,8 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf ## Known hardware unknowns 1. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. -2. Exact stock `RGXX_MODEL` strings for the RG35XX family and RG40XXH. +2. Exact stock `RGXX_MODEL` strings for the RG35XX family. (RG40XXH is now + confirmed as `RG40xxH`, read from its StockMod `dmenu.bin`.) +3. RG SP support is derived entirely from firmware analysis — never run on the + hardware. Panel geometry, stickless input and the displaycal preset all need + confirming on a real unit. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 96f642d08..1d863b5d0 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -10,7 +10,7 @@ surface, repoint hardware access to the H700 paths (00), borrowing only hardware constants from the old rg35xxplus port (`git show 8cd78866:...`). One platform serves all devices: `DEVICE`/`RGXX_MODEL` env (set by launch.sh, see 02) -→ `detect_device()` sets `is_rg28xx / is_rg34xx / is_cube` globals that drive +→ `detect_device()` sets `is_rg28xx / is_rg34xx / is_rgsp / is_cube` globals that drive resolution and the bootlogo preview rotation (panel rotation itself is handled entirely by the SDL driver via `SDL_ROTATION=1`; nothing app-side rotates — 04), plus `dev_has_lstick / dev_has_rstick` capability flags @@ -23,6 +23,7 @@ R3 ⇔ right): | Device | Sticks | Detection key | |---|---|---| | RG28XX, RG34XX, RG35XX Plus/2024/SP | none | `RG28xx` / `RG34xx` exact; `RG35xx` prefix default | +| RG SP | none | `RGSP` exact | | RG35XX H, RG35XX Pro | dual | `RG35xx` prefix + `H`/`Pro` suffix | | RG34XXSP | dual | `RG34xxSP` exact | | RG40XX H, RG CubeXX, unknown | dual | `RG40xxH`, `RGcube*`; dual is the fallback | @@ -31,8 +32,13 @@ R3 ⇔ right): Unknown `RG35xx` variants default to stickless (most of that family is); anything else unknown defaults to dual (today's behavior, covers `DEVICE=rg40xx` without a model string). No H700 Anbernic device has an Fn switch. Exact `RGXX_MODEL` strings -still unconfirmed for the RG35xx family and RG40xxH (same caveat as msettings' -displaycal presets). +still unconfirmed for the RG35xx family (same caveat as msettings' displaycal +presets). + +The RG SP is stickless on device-tree evidence rather than spec sheets: its DTB has +no `keyL3`/`keyR3` nodes, none of the analog multiplexer pins the RG34XXSP carries +(`amux-en-gpios`, `A0_gpio`, `A1_gpio`, `adc-en-gpios`), and the GPADC itself is +`status = "disabled"`. The Input pak uses the per-device capability flags to show only the sticks that exist, including their analog axis movement and L3/R3 click state. This is verified on the @@ -42,14 +48,14 @@ left stick on RG40XXV and for both sticks on RG34XXSP. ## platform.h (as shipped) ```c -extern int is_rg28xx, is_rg34xx, is_cube; +extern int is_rg28xx, is_rg34xx, is_rgsp, is_cube; extern int hdmi_active; extern int dev_has_lstick, dev_has_rstick; #define HDMI_WIDTH 1280 #define HDMI_HEIGHT 720 #define FIXED_SCALE 2 -#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:(is_rg34xx?720:640))) +#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:((is_rg34xx||is_rgsp)?720:640))) #define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:(is_cube?720:480)) #define FIXED_BPP 2 #define SCREEN_FPS 60.0 // ⚠ assumed, never measured per panel diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index cc37b440d..f32690c0f 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -32,6 +32,7 @@ The stack: |---|---|---|---| | RG40XXV | 640×480 4:3 | 640×480 | Native landscape reference panel | | RG34XXSP | 720×480 3:2 | 720×480 | Broad UI and scaling evidence gathered during bring-up | +| RG SP | 720×480 3:2 | 720×480 | Same panel as RG34XXSP (`rg34xxsp_v1`, identical DTB timings); firmware-derived, never run on hardware | | RG28XX | 480×640 portrait | 640×480 logical | Driver-level rotation; see the rotation decision below | | RGcubexx | 720×720 | 720×720 | `is_cube` geometry path; community scaling feedback available | @@ -160,11 +161,13 @@ survive reboot. (tg5040 has the same latent bug, masked by its calibrated preset flagged as a separate task.) **Per-model default presets — plumbed, not yet measured.** `displaycal.h` has a -preset per H700 model (RG28XX, RG34XX, RG34XXSP, RG35XX = Plus/H/2024 shared, +preset per H700 model (RG28XX, RG34XX, RG34XXSP, RGSP, RG35XX = Plus/H/2024 shared, RG35XXSP, RG35XXPRO, RG40XXH, RG40XXV, RGCubeXX), all currently disabled/neutral -(100/100/100). Selection keys on `RGXX_MODEL` (exact-model string from stock -`dmenu.bin`; confirmed so far: `RG28xx`, `RG34xx`, `RG34xxSP`, `RG40xxV`, -`RGcubexx` — RG35xx-family and RG40xxH strings matched by prefix until confirmed) +(100/100/100). The RG SP keeps its own preset rather than sharing the RG34XXSP's, +so calibrating one panel cannot silently retune the other. Selection keys on +`RGXX_MODEL` (exact-model string from stock `dmenu.bin`; confirmed so far: +`RG28xx`, `RG34xx`, `RG34xxSP`, `RGSP`, `RG40xxH`, `RG40xxV`, +`RGcubexx` — RG35xx-family strings matched by prefix until confirmed) with `DEVICE` fallback, in both h700 libmsettings and the settings app's reset-to-defaults. launch.sh now maps `RG35xx*` → `DEVICE=rg35xx` instead of lumping the 35xx family into rg40xx. Calibrating a panel later = editing numbers in diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index e9efa568a..ad92592d4 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -96,6 +96,12 @@ echo "launch: starting $(date)" > "$LAUNCH_LOG" export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" case "$RGXX_MODEL" in RG28xx) export DEVICE="rg28xx" ;; + # The RG SP reports a bare "RGSP" -- no "xx" -- so it matched none of the + # family globs and fell through to the rg40xx fallback, which drew the UI + # 640x480 on its 720x480 panel. It shares the RG34XXSP panel exactly (same + # lcd_driver_name rg34xxsp_v1, DTB fingerprint 26-820-536) but has no analog + # sticks, so it gets its own DEVICE rather than an rg34xx alias. + RGSP) export DEVICE="rgsp" ;; RG34xx*|RG34XX*) export DEVICE="rg34xx" ;; RG35xx*|RG35XX*) export DEVICE="rg35xx" ;; RG40xx*|RG40XX*) export DEVICE="rg40xx" ;; diff --git a/workspace/all/bootlogo/bootlogo.c b/workspace/all/bootlogo/bootlogo.c index 307f50ee0..b27fb7ebc 100644 --- a/workspace/all/bootlogo/bootlogo.c +++ b/workspace/all/bootlogo/bootlogo.c @@ -78,7 +78,7 @@ int loadImages() // presets are shared between devices with the same panel resolution char* folder = "640x480"; // rg35xx, rg40xx if (exactMatch("rg28xx", device)) folder = "480x640"; - else if (exactMatch("rg34xx", device)) folder = "720x480"; + else if (exactMatch("rg34xx", device) || exactMatch("rgsp", device)) folder = "720x480"; else if (exactMatch("cube", device)) folder = "720x720"; snprintf(basepath, sizeof(basepath), "%s/Bootlogo.pak/%s/", TOOLS_PATH, folder); #else diff --git a/workspace/all/common/displaycal.h b/workspace/all/common/displaycal.h index d76be756f..4b9dcb4b9 100644 --- a/workspace/all/common/displaycal.h +++ b/workspace/all/common/displaycal.h @@ -65,6 +65,9 @@ static const struct DisplayCalDefaults DisplayCalDefaults_BrickPro = { static const struct DisplayCalDefaults DisplayCalDefaults_RG28XX = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG34XX = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG34XXSP = DISPLAYCAL_H700_UNCALIBRATED; +// RG SP: same panel as the RG34XXSP, kept separate so calibrating one does not +// silently retune the other if the units turn out to differ. +static const struct DisplayCalDefaults DisplayCalDefaults_RGSP = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG35XX = DISPLAYCAL_H700_UNCALIBRATED; // Plus/H/2024 static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXSP = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXPRO = DISPLAYCAL_H700_UNCALIBRATED; @@ -80,6 +83,7 @@ enum DisplayCalPreset { DISPLAYCAL_PRESET_RG28XX, DISPLAYCAL_PRESET_RG34XX, DISPLAYCAL_PRESET_RG34XXSP, + DISPLAYCAL_PRESET_RGSP, DISPLAYCAL_PRESET_RG35XX, DISPLAYCAL_PRESET_RG35XXSP, DISPLAYCAL_PRESET_RG35XXPRO, @@ -95,6 +99,7 @@ static inline DisplayCalDefaults DisplayCal_getDefaultSettings(enum DisplayCalPr case DISPLAYCAL_PRESET_RG28XX: return DisplayCalDefaults_RG28XX; case DISPLAYCAL_PRESET_RG34XX: return DisplayCalDefaults_RG34XX; case DISPLAYCAL_PRESET_RG34XXSP: return DisplayCalDefaults_RG34XXSP; + case DISPLAYCAL_PRESET_RGSP: return DisplayCalDefaults_RGSP; case DISPLAYCAL_PRESET_RG35XX: return DisplayCalDefaults_RG35XX; case DISPLAYCAL_PRESET_RG35XXSP: return DisplayCalDefaults_RG35XXSP; case DISPLAYCAL_PRESET_RG35XXPRO: return DisplayCalDefaults_RG35XXPRO; diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index e41e5f7f1..0cb747c5c 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -257,6 +257,7 @@ namespace { RG40XXH, RG34XX, RG34XXSP, + RGSP, // RG34XXSP panel, no sticks RG35XX, // Plus/H/2024 RG35XXSP, RG35XXPRO, @@ -307,6 +308,10 @@ namespace { m_vendor = Anbernic; m_model = RG34XX; m_platform = h700; + } else if(exactMatch("rgsp", device)) { + m_vendor = Anbernic; + m_model = RGSP; + m_platform = h700; } else if(exactMatch("rg28xx", device)) { m_vendor = Anbernic; m_model = RG28XX; @@ -325,6 +330,7 @@ namespace { if (model == "RG40xxV") m_model = RG40XXV; else if (model == "RG40xxH") m_model = RG40XXH; else if (model == "RG34xxSP") m_model = RG34XXSP; + else if (model == "RGSP") m_model = RGSP; else if (model.rfind("RG35xx", 0) == 0) { std::string suffix = model.substr(6); if (suffix.rfind("SP", 0) == 0) m_model = RG35XXSP; @@ -591,6 +597,7 @@ int main(int argc, char *argv[]) deviceInfo.getModel() == DeviceInfo::RG28XX ? DISPLAYCAL_PRESET_RG28XX : deviceInfo.getModel() == DeviceInfo::RG34XX ? DISPLAYCAL_PRESET_RG34XX : deviceInfo.getModel() == DeviceInfo::RG34XXSP ? DISPLAYCAL_PRESET_RG34XXSP : + deviceInfo.getModel() == DeviceInfo::RGSP ? DISPLAYCAL_PRESET_RGSP : deviceInfo.getModel() == DeviceInfo::RG35XX ? DISPLAYCAL_PRESET_RG35XX : deviceInfo.getModel() == DeviceInfo::RG35XXSP ? DISPLAYCAL_PRESET_RG35XXSP : deviceInfo.getModel() == DeviceInfo::RG35XXPRO ? DISPLAYCAL_PRESET_RG35XXPRO : diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index 0e268f83d..1e2b11d0a 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -321,13 +321,16 @@ static int prefixMatch(char* pre, char* str) { } // Pick the displaycal preset for this device. Exact RGXX_MODEL strings confirmed -// so far: RG28xx, RG34xx, RG34xxSP, RG40xxV, RGcubexx. The RG35xx family and -// RG40xxH are matched by prefix/suffix until their exact strings are confirmed. +// so far: RG28xx, RG34xx, RG34xxSP, RG40xxH, RG40xxV, RGSP, RGcubexx. The RG35xx +// family is matched by prefix/suffix until its exact strings are confirmed. static enum DisplayCalPreset displayCalPresetForDevice(void) { char* device = getenv("DEVICE"); char* model = getenv("RGXX_MODEL"); if (exactMatch("RG28xx", model) || exactMatch("rg28xx", device)) return DISPLAYCAL_PRESET_RG28XX; + // Before the RG34xx prefix test: the RG SP shares that panel but is its own + // preset, and its bare "RGSP" would not match the prefix anyway. + if (exactMatch("RGSP", model) || exactMatch("rgsp", device)) return DISPLAYCAL_PRESET_RGSP; if (exactMatch("RG34xxSP", model)) return DISPLAYCAL_PRESET_RG34XXSP; if (prefixMatch("RG34xx", model) || exactMatch("rg34xx", device)) return DISPLAYCAL_PRESET_RG34XX; if (exactMatch("RG40xxV", model)) return DISPLAYCAL_PRESET_RG40XXV; @@ -857,7 +860,8 @@ static void panelSize(int* w, int* h) { char* model = getenv("RGXX_MODEL"); *w = 640; *h = 480; if (exactMatch("RGcubexx", model) || exactMatch("cube", device)) { *w = 720; *h = 720; } - else if (exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model) || exactMatch("rg34xx", device)) { *w = 720; *h = 480; } + else if (exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model) || exactMatch("rg34xx", device) + || exactMatch("RGSP", model) || exactMatch("rgsp", device)) { *w = 720; *h = 480; } // RG SP shares the RG34XXSP panel else if (exactMatch("RG28xx", model) || exactMatch("rg28xx", device)) { *w = 480; *h = 640; } // panel is mounted portrait } diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 54f59fe14..596bd7ff2 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -28,6 +28,7 @@ int is_rg28xx = 0; int is_rg34xx = 0; +int is_rgsp = 0; int is_cube = 0; int hdmi_active = 0; int dev_has_lstick = 0; @@ -198,6 +199,14 @@ static void detect_device(void) { is_rg28xx = exactMatch("rg28xx", device) || exactMatch("RG28xx", model); is_rg34xx = exactMatch("rg34xx", device) || exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model); + // The RG SP is the RG34XXSP without the sticks: same panel (lcd_driver_name + // rg34xxsp_v1, identical DTB timings), bigger battery. Its stock RGXX_MODEL + // is a bare "RGSP", which no family glob matches -- hence its own flag + // rather than folding it into is_rg34xx, so stick and LED policy stay exact. + // Matched on the model as well as DEVICE, like the others: the installer shim + // (install/boot.sh) exports RGXX_MODEL but never DEVICE, so anything reached + // from that path sees only the model string. + is_rgsp = exactMatch("rgsp", device) || exactMatch("RGSP", model); is_cube = exactMatch("cube", device) || (model && prefixMatch("RGcube", model)); // RGB LEDs exist only on the RG40XX H, RG40XX V and RG CubeXX (same three @@ -215,11 +224,14 @@ static void detect_device(void) { // Analog sticks per model; every stick on these devices clicks (L3 = left, // R3 = right). Exact RGXX_MODEL strings confirmed so far: RG28xx, RG34xx, - // RG34xxSP, RG40xxV, RGcubexx. The RG35xx family and RG40xxH are matched by - // prefix/suffix until their exact strings are confirmed (same as msettings). + // RG34xxSP, RG40xxH, RG40xxV, RGSP, RGcubexx. The RG35xx family is matched + // by prefix/suffix until its exact strings are confirmed (same as msettings). dev_has_lstick = 1; // unknown models keep the previous dual-stick layout dev_has_rstick = 1; - if (is_rg28xx) { + if (is_rg28xx || is_rgsp) { + // The RG SP drops the RG34XXSP's sticks entirely: its device tree has no + // keyL3/keyR3 and none of the analog multiplexer pins (amux-en-gpios, + // A0/A1_gpio, adc-en-gpios), and the GPADC itself is status="disabled". dev_has_lstick = dev_has_rstick = 0; } else if (is_rg34xx) { diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index 607efa6ac..c88152416 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -13,6 +13,7 @@ extern int is_rg28xx; extern int is_rg34xx; +extern int is_rgsp; extern int is_cube; extern int hdmi_active; extern int dev_has_lstick; @@ -156,7 +157,9 @@ extern int dev_num_leds; #define HDMI_SIZE (HDMI_PITCH * HDMI_HEIGHT) #define FIXED_SCALE 2 -#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:(is_rg34xx?720:640))) +// 720 wide on the RG34xx family and the RG SP, which shares the RG34XXSP panel; +// 720x720 on the cube's square panel; 640x480 everywhere else. +#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:((is_rg34xx||is_rgsp)?720:640))) #define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:(is_cube?720:480)) #define FIXED_BPP 2 #define FIXED_DEPTH (FIXED_BPP * 8) From 43b3b455ee4c63c408819ef75f7e5acebd2a684c Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Wed, 29 Jul 2026 14:43:59 +0200 Subject: [PATCH 65/76] feat(sleep): Enable Super Standby This change enables the "super standby" mode for flip devices. On non-flip devices this is already enabled by default and cannot be turned off. However, on the flip devices for whatever reason it is not enabled. The super standby writes value 16 to `os_sleep` sysfs node, which signals to various other parts of the kernel what to do during a later suspend-to-ram command. The value 16 is not consequential. A kernel disassembly shows any non-zero value will have the same effect. To be specific this disables the lid wake interrupt and also turns off the USB controllers. Without it, the USB controllers are powered on during sleep which seems to increasese the sleep battery drain 3x. On RG34XXSP the sleep drain was 0.8%/hr while on an RG40XXV where this is already enabled the drain was 0.3%/hr. This "trick" was found by checking what the stock and stock mod OS do for super standby. I still have to test it on RG34XXSP overnight to confirm that this is better than before. --- docs/h700-port/06-power-sleep-battery.md | 9 ++++++++- skeleton/SYSTEM/h700/bin/suspend | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index 4c6e4ef81..dd80f4b2c 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -63,6 +63,12 @@ Two layers, as on tg5040: `skeleton/SYSTEM/h700/bin/suspend`: - `before()`: `alsactl store` mixer state, stop bluetoothd/wpa_supplicant, `pre-sleep.d` hooks + - when the SP-only `axp2202-battery/os_sleep` attribute exists, write stock's + persisted Super Standby value (`16`) before every attempt. Any non-zero value is + equivalent in the vendor driver, but matching stock keeps the integration + recognizable. This selects full USB-controller suspend and removes hall-open from + the kernel wake set; non-SP kernels have no attribute and already use full USB + suspend. - `echo mem > /sys/power/state` in a retry loop (5 tries, with the tg5040-style false-negative workaround: if we were asleep >5 s, a failed-looking write is counted as success) @@ -120,7 +126,8 @@ lid is still closed, the unit returns to sleep. Its lifecycle disposition is in available for future batmon extensions; not wired. - Standby-drain investigation: the first RG34XXSP observation was a capacity change from 40% to 33% over about 8.5 hours of deep sleep. Capacity is coarse, and the UI - desynchronization above may muddy the observation. Re-test with + desynchronization above may muddy the observation; it also predates the Super + Standby `os_sleep=16` integration. Re-test with `axp2202-battery/voltage_now` before/after and run the same interval on stock OS for a baseline. POWER-06 records the evidence; the follow-up is tracked in the [roadmap](09-roadmap.md#future-hardening). diff --git a/skeleton/SYSTEM/h700/bin/suspend b/skeleton/SYSTEM/h700/bin/suspend index db603481e..72fe500c9 100755 --- a/skeleton/SYSTEM/h700/bin/suspend +++ b/skeleton/SYSTEM/h700/bin/suspend @@ -84,6 +84,7 @@ after_async() { before hallkey=/sys/class/power_supply/axp2202-battery/hallkey +os_sleep=/sys/class/power_supply/axp2202-battery/os_sleep >&2 echo "Suspending..." while :; do @@ -92,6 +93,15 @@ while :; do >&2 echo "Deep sleep attempt $i of $sleep_max_tries" sleep_time=$(date +%s) + + # Enable Super Standby before sleeping. + # 16 is the value used by stock and stockmod OS, so we preserve + # it, but any non-zero value has the same effect. + # Non-SP kernels do not expose this attribute and already use the + # full USB-controller suspend path. + [ -w "$os_sleep" ] && printf '16' > "$os_sleep" + + # Now issue suspend-to-ram command. echo mem >/sys/power/state sleep_retval=$? From 97a5fa87849c69b9d277385d2e865578e66b3350 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Tue, 4 Aug 2026 01:32:39 +0200 Subject: [PATCH 66/76] fix(gpu): pin the GPU to max speed The simple_ondemand governor for the GPU doesn't perform well. It consistently keeps the GPU at the lowest or intermediate freqs when it should be throttling up. It's (probably) because our rendering is vsync'd, and our perception of the performance is based on whether or not frames are being missed. But the governor only uses GPU busy time (%) over a 100ms interval. It doesn't care if one or more frames took maybe 1ms longer to compute than 16ms, and thus missed the vsync. So spiky GPU loads will not throttle the GPU clock up. After a lot of tests (including extra power consumption test), I decided to pin the GPU to its max frequency unless powersave mode is selected. This costs between 9 to 26 mW extra power consumption depending on GPU usage (no shader vs. heavy shader that uses almost all GPU). In context, the RG40XXV running at full brightness uses 2000 mW total while running an NES game with the xbrz-freescale-multipass shader which has a spiky load that can take up all 16 ms of a frame (but not every frame). Overall this change is going to cost users about 0.5% of battery over a 6 hr run or about 2 min less battery life. There is no effect on thermals that I can measure. One issue is that the 648 MHz top GPU speed also needs a higher voltage (0.96V vs 0.90V for all other speeds) and since the power consumption increases proportional to f*V^2 going from 600 -> 648 MHz increase the power requirement by 23% instead of the more modest 8% going from 552 -> 600 MHz. In any case my estimate of the overall effect is still under 2 min of play time over the battery life of 6hr, totally acceptable and we're only paying for what we actually want: stutter free games. Also, minarch debug HUD was causing the GPU speed to be read for every frame but failing twice before hitting the last working path. This was causing *massive* cpu time drain 30-40%/frame! I changed it with help of Claude to the actual working path (1st option) and a few other potentials that other devices I don't have may be using - not proven but doesn't hurt. --- skeleton/SYSTEM/h700/bin/governor.sh | 32 +++++++++++++++++++++++++++- workspace/h700/platform/platform.c | 32 +++++++++++++++++++++------- 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/skeleton/SYSTEM/h700/bin/governor.sh b/skeleton/SYSTEM/h700/bin/governor.sh index 303ac5bb1..6f9f812ef 100755 --- a/skeleton/SYSTEM/h700/bin/governor.sh +++ b/skeleton/SYSTEM/h700/bin/governor.sh @@ -1,5 +1,5 @@ #!/bin/sh -# governor.sh - CPU governor controller for H700 +# governor.sh - CPU/GPU governor controller for H700 # Usage: governor.sh # Modes: auto, performance, powersave @@ -34,20 +34,50 @@ set_policy() { echo "$MAX_FREQ" > "$policy_path/scaling_max_freq" } +# The simple_ondemand GPU governor doesn't perform well under vsync. +# Pin to max GPU speed. It costs about 0.5% more battery usage (when screen is at +# full power), but the performance gain is worth it in my opinion. The power gating +# will reduce GPU power when it's not busy anyway: so it's a race-to-idle. Or at +# least that's my logic. +set_gpu_floor() { + local floor_type="$1" # "max" or "min" + + for devfreq in /sys/class/devfreq/*gpu*; do + [ -f "$devfreq/available_frequencies" ] || continue + [ -w "$devfreq/min_freq" ] || continue + + GPU_FREQS=$(cat "$devfreq/available_frequencies" | tr ' ' '\n' | grep -v '^$' | sort -n) + case "$floor_type" in + max) + GPU_FREQ=$(echo "$GPU_FREQS" | tail -1) + ;; + *) + GPU_FREQ=$(echo "$GPU_FREQS" | head -1) + ;; + esac + + [ -n "$GPU_FREQ" ] || continue + echo "$GPU_FREQ" > "$devfreq/min_freq" 2>/dev/null || true + done +} + case "$MODE" in auto) # H700's advertised 1.5 GHz ceiling is in-spec, not an overclock. Let # schedutil use the full hardware frequency range when load requires it. set_policy /sys/devices/system/cpu/cpufreq/policy0 "schedutil" "max" set_policy /sys/devices/system/cpu/cpu0/cpufreq "schedutil" "max" + set_gpu_floor "max" ;; performance) set_policy /sys/devices/system/cpu/cpufreq/policy0 "performance" "max" set_policy /sys/devices/system/cpu/cpu0/cpufreq "performance" "max" + set_gpu_floor "max" ;; powersave) set_policy /sys/devices/system/cpu/cpufreq/policy0 "conservative" "mid" set_policy /sys/devices/system/cpu/cpu0/cpufreq "conservative" "mid" + set_gpu_floor "min" ;; *) echo "governor.sh: unknown mode '$MODE'" >&2 diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 596bd7ff2..96068a515 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -583,14 +583,30 @@ void PLAT_getGPUTemp() { } void PLAT_getGPUSpeed() { - int speed = getInt("/sys/devices/platform/soc@03000000/1800000.gpu/devfreq/1800000.gpu/cur_freq"); - if (speed <= 0) - speed = getInt("/sys/devices/platform/soc/1800000.gpu/devfreq/1800000.gpu/cur_freq"); - if (speed <= 0) - speed = getInt("/sys/kernel/debug/clk/gpu0/clk_rate"); - if (speed <= 0) - speed = getInt("/sys/kernel/debug/clk/pll_gpu/clk_rate"); - perf.gpu_speed = speed > 0 ? speed / 1000000 : 660; // MHz + static char* path = NULL; + static int resolved = 0; + + if (!resolved) { + static char* candidates[] = { + "/sys/class/devfreq/gpu/cur_freq", + "/sys/devices/platform/gpu/devfreq/gpu/cur_freq", + "/sys/devices/platform/soc@03000000/1800000.gpu/devfreq/1800000.gpu/cur_freq", + "/sys/devices/platform/soc/1800000.gpu/devfreq/1800000.gpu/cur_freq", + "/sys/kernel/debug/clk/gpu0/clk_rate", + "/sys/kernel/debug/clk/pll_gpu/clk_rate", + NULL, + }; + for (int i = 0; candidates[i]; i++) { + if (access(candidates[i], R_OK) == 0) { + path = candidates[i]; + break; + } + } + resolved = 1; + } + + int speed = path ? getInt(path) : 0; + perf.gpu_speed = speed > 0 ? speed / 1000000 : 648; // MHz } static struct WIFI_connection connection = { From 7a69255dd562e280aff44d7ab45b0caf6d8a67e9 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 00:43:45 +0200 Subject: [PATCH 67/76] fix(h700): enable PS1 stick clicks Expose the L3 and R3 bindings in the H700 PS1 pak so DualShock games can use the physical stick clicks. Detect sticks conservatively by model, including the single-stick RG40XXV and dual-stick H, Pro, SP, and Cube variants. --- skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg | 2 ++ workspace/h700/platform/platform.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg index 84282b17a..1daef22c7 100644 --- a/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg +++ b/skeleton/SYSTEM/h700/paks/Emus/PS.pak/default.cfg @@ -22,3 +22,5 @@ bind L1 Button = L1 bind R1 Button = R1 bind L2 Button = L2 bind R2 Button = R2 +bind L3 Button = L3 +bind R3 Button = R3 diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 96068a515..9f2992177 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -226,8 +226,8 @@ static void detect_device(void) { // R3 = right). Exact RGXX_MODEL strings confirmed so far: RG28xx, RG34xx, // RG34xxSP, RG40xxH, RG40xxV, RGSP, RGcubexx. The RG35xx family is matched // by prefix/suffix until its exact strings are confirmed (same as msettings). - dev_has_lstick = 1; // unknown models keep the previous dual-stick layout - dev_has_rstick = 1; + dev_has_lstick = 0; + dev_has_rstick = 0; if (is_rg28xx || is_rgsp) { // The RG SP drops the RG34XXSP's sticks entirely: its device tree has no // keyL3/keyR3 and none of the analog multiplexer pins (amux-en-gpios, @@ -239,13 +239,15 @@ static void detect_device(void) { dev_has_lstick = dev_has_rstick = exactMatch("RG34xxSP", model); } else if (exactMatch("RG40xxV", model)) { - dev_has_rstick = 0; // single left stick + dev_has_lstick = 1; // single left stick + } + else if (exactMatch("RG40xxH", model) || is_cube) { + dev_has_lstick = dev_has_rstick = 1; } else if ((model && prefixMatch("RG35xx", model)) || exactMatch("rg35xx", device)) { - // only the H and Pro have sticks; Plus/2024/SP (and unknown variants, - // since most of the family is stickless) don't + // Only the H and Pro have sticks; Plus/2024/SP and unknown variants don't. char *suffix = (model && prefixMatch("RG35xx", model)) ? model + strlen("RG35xx") : ""; - dev_has_lstick = dev_has_rstick = prefixMatch("H", suffix) || prefixMatch("Pro", suffix); + dev_has_lstick = dev_has_rstick = exactMatch("H", suffix) || prefixMatch("Pro", suffix); } } From 2d62e5640a40d613e0a13d8b0648045fd8376f89 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 01:32:01 +0200 Subject: [PATCH 68/76] fix: fceumm patch Like on tg5040/5050, the fceumm core's patch needed an update to apply cleanly. This changeset adds that update to h700 too. --- workspace/h700/cores/patches/fceumm.patch | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/workspace/h700/cores/patches/fceumm.patch b/workspace/h700/cores/patches/fceumm.patch index 90a637c06..b8520f0f6 100644 --- a/workspace/h700/cores/patches/fceumm.patch +++ b/workspace/h700/cores/patches/fceumm.patch @@ -1,10 +1,9 @@ diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro -index 036c41f48b087c99b2276b2d41a71d661fd85145..891eb96ceeb1da868d6d2ed40392b51b65dcbb20 100644 +index 5b90d409271332a48ae726dca48a712c3be413be..8b6fc14db737e32d47b0c8ad449b0b03e78548c1 100644 --- forkSrcPrefix/Makefile.libretro +++ forkDstPrefix/Makefile.libretro -@@ -461,6 +461,23 @@ else ifeq ($(platform), miyoo) +@@ -458,5 +458,22 @@ else ifeq ($(platform), miyoo) PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s - EXTERNAL_ZLIB = 1 +# TRIMUI SMART PRO +else ifeq ($(platform), h700) From d1c9e32bca44eff45d9827f06658ce7019c1bbf8 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 02:32:10 +0200 Subject: [PATCH 69/76] feat(h700): add displaycal defaults Enable calibrated DisplayCal defaults for the RG SP, RG28XX, RG40XXV, and RG34XXSP. Keep the remaining H700 models disabled with neutral gains until they are calibrated. --- workspace/all/common/displaycal.h | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/workspace/all/common/displaycal.h b/workspace/all/common/displaycal.h index 4b9dcb4b9..744c31717 100644 --- a/workspace/all/common/displaycal.h +++ b/workspace/all/common/displaycal.h @@ -59,20 +59,17 @@ static const struct DisplayCalDefaults DisplayCalDefaults_BrickPro = { DISPLAYCAL_BRICKPRO_DEFAULT_BLUE_GAIN }; -// Anbernic H700 family. Not measured yet: disabled with neutral gains until -// each panel is calibrated, at which point only the values below change. +// Anbernic H700 family. Uncalibrated models remain disabled with neutral gains. #define DISPLAYCAL_H700_UNCALIBRATED { 0, 100, 100, 100 } -static const struct DisplayCalDefaults DisplayCalDefaults_RG28XX = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG28XX = { 1, 100, 92, 65 }; static const struct DisplayCalDefaults DisplayCalDefaults_RG34XX = DISPLAYCAL_H700_UNCALIBRATED; -static const struct DisplayCalDefaults DisplayCalDefaults_RG34XXSP = DISPLAYCAL_H700_UNCALIBRATED; -// RG SP: same panel as the RG34XXSP, kept separate so calibrating one does not -// silently retune the other if the units turn out to differ. -static const struct DisplayCalDefaults DisplayCalDefaults_RGSP = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG34XXSP = { 1, 100, 83, 86 }; +static const struct DisplayCalDefaults DisplayCalDefaults_RGSP = { 1, 100, 68, 61 }; static const struct DisplayCalDefaults DisplayCalDefaults_RG35XX = DISPLAYCAL_H700_UNCALIBRATED; // Plus/H/2024 static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXSP = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXPRO = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG40XXH = DISPLAYCAL_H700_UNCALIBRATED; -static const struct DisplayCalDefaults DisplayCalDefaults_RG40XXV = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG40XXV = { 1, 91, 100, 63 }; static const struct DisplayCalDefaults DisplayCalDefaults_RGCubeXX = DISPLAYCAL_H700_UNCALIBRATED; enum DisplayCalPreset { From 42204f77d6ca0494ec495eb4b0f7a77122956207 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 03:01:33 +0200 Subject: [PATCH 70/76] fix(h700): align 480p list spacing Use the standard 10-unit padding on 480p H700 displays so six list rows have the same spacing above the bottom button hints. Keep the existing compact padding for Cube and HDMI layouts. --- workspace/h700/platform/platform.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index c88152416..eee40e9b7 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -168,11 +168,13 @@ extern int dev_num_leds; /////////////////////////////// -// Rows that fit above the button hints: (FIXED_HEIGHT/FIXED_SCALE - 2*PADDING - PILL_SIZE) / PILL_SIZE -// 720-tall at scale 2 (HDMI and the cube's square panel) gives 10, like tg5050; 480 gives 6. +// Rows that fit above the button hints: (FIXED_HEIGHT/FIXED_SCALE - 2*PADDING - PILL_SIZE) / PILL_SIZE. +// The 480p layout needs the standard 10-unit padding so six rows and the +// bottom hints keep the same vertical spacing. The roomier 720p layouts retain +// their existing 5-unit edge padding. #define MAIN_ROW_COUNT ((hdmi_active||is_cube)?10:6) #define QUICK_SWITCHER_COUNT 3 -#define PADDING 5 +#define PADDING ((hdmi_active||is_cube)?5:10) /////////////////////////////// From a028d0e8f98f81453af5e0b22fa00f1b5e494084 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 03:13:00 +0200 Subject: [PATCH 71/76] build(h700): bundle curl for RetroAchievements Stock Anbernic firmware does not provide curl, so RetroAchievements only worked when NextUI ran on BaseOS. Build pinned curl, OpenSSL, and musl sources into a self-contained aarch64 binary and ship a private CA bundle under the NextUI system tree. This keeps the stock card unchanged and avoids glibc/NSS runtime dependencies that break DNS resolution. --- docs/h700-port/01-toolchain-and-build.md | 9 ++ docs/h700-port/08-testing-status.md | 1 + skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 1 + workspace/h700/curl/.gitignore | 4 + workspace/h700/curl/build.sh | 141 ++++++++++++++++++ workspace/h700/makefile | 8 +- workspace/h700/platform/makefile.copy | 4 + 7 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 workspace/h700/curl/.gitignore create mode 100755 workspace/h700/curl/build.sh diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index f7a73318f..dc4c5e0c3 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -87,6 +87,15 @@ Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted Rule of thumb: `ldd` every shipped .elf against a clean stock rootfs; bundle exactly the misses, nothing more. +The stock Anbernic OS also lacks the `curl` CLI used by NextUI's RetroAchievements +HTTP layer. The H700 build therefore builds pinned curl 8.21.0 with pinned OpenSSL +3.5.7 and musl 1.2.6 as a static aarch64 binary, verifies all source checksums and the +final linkage, and stages it at `.system/h700/bin/curl`. Using musl avoids static +glibc's runtime dependency on matching NSS modules for DNS. A private CA bundle is +staged at `.system/h700/etc/ssl/certs/ca-certificates.crt`; `launch.sh` sets +`CURL_CA_BUNDLE` to that path. Since NextUI's bin directory is first on `PATH`, this +works on stock OS without installing or replacing anything on TF1. + CI now applies that rule to the highest-risk h700 GUI binary: `workspace/h700/check-settings-ldd.sh` runs `ldd` for `settings.elf` in an Ubuntu 22.04/Jammy arm64 runtime with `.system/h700/lib` first, and fails on unresolved diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 95728f5ab..636f4296a 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -42,6 +42,7 @@ limit on support. | BUILD-01 | CI-style H700 staging build (`make setup`, then `make h700`) | ✅ | CI/release build | H700 binaries, tools, cores, libraries, boot shim, and installer assets stage successfully | | BUILD-02 | Full tg5040 regression build after shared-code changes | ⬜ | Candidate-specific | Must be recorded for the actual candidate; single-pak builds are insufficient | | BUILD-03 | Jammy `settings.elf` runtime linkage check | ✅ | Automated container check | H700 library path resolves and required gio/glib linkage is present | +| BUILD-04 | Bundled curl static linkage and HTTPS | ✅ | arm64 Jammy container | Pinned musl curl 8.21.0 + OpenSSL 3.5.7 has no dynamic section; DNS and TLS reach the RetroAchievements API using the bundled CA file (HTTP 422 is the expected unauthenticated response) | ## Boot, install, and launcher diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index ad92592d4..847f839cd 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -35,6 +35,7 @@ LAUNCH_LOG="$LOGS_PATH/launch.txt" export PATH="$SYSTEM_PATH/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" export LD_LIBRARY_PATH="$SYSTEM_PATH/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" +export CURL_CA_BUNDLE="$SYSTEM_PATH/etc/ssl/certs/ca-certificates.crt" export SDL_VIDEODRIVER="mali" export SDL_AUDIODRIVER="alsa" export SDL_JOYSTICK_DISABLE_UDEV=1 diff --git a/workspace/h700/curl/.gitignore b/workspace/h700/curl/.gitignore new file mode 100644 index 000000000..06ae7d588 --- /dev/null +++ b/workspace/h700/curl/.gitignore @@ -0,0 +1,4 @@ +/curl-* +/musl-* +/openssl-* +/output/ diff --git a/workspace/h700/curl/build.sh b/workspace/h700/curl/build.sh new file mode 100755 index 000000000..8f7a5fbb2 --- /dev/null +++ b/workspace/h700/curl/build.sh @@ -0,0 +1,141 @@ +#!/bin/sh +# Build the curl CLI used by NextUI's HTTP layer without relying on the stock OS. +set -eu + +: "${CROSS_COMPILE:?CROSS_COMPILE is required}" + +CURL_VERSION=8.21.0 +CURL_SHA256=aa1b66a70eace83dc624508745646c08ae561de512ab403adffb93ac87fc72e6 +OPENSSL_VERSION=3.5.7 +OPENSSL_SHA256=a8c0d28a529ca480f9f36cf5792e2cd21984552a3c8e4aa11a24aa31aeac98e8 +MUSL_VERSION=1.2.6 +MUSL_SHA256=d585fd3b613c66151fc3249e8ed44f77020cb5e6c1e635a616d3f9f82460512a +SCRIPT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd) +ARCHIVE="$SCRIPT_DIR/curl-$CURL_VERSION.tar.xz" +SOURCE_DIR="$SCRIPT_DIR/curl-$CURL_VERSION" +MUSL_ARCHIVE="$SCRIPT_DIR/musl-$MUSL_VERSION.tar.gz" +MUSL_SOURCE_DIR="$SCRIPT_DIR/musl-$MUSL_VERSION" +MUSL_PREFIX="$SCRIPT_DIR/musl-prefix" +MUSL_STAMP="$MUSL_PREFIX/.musl-$MUSL_VERSION-$MUSL_SHA256" +MUSL_CC="$MUSL_PREFIX/bin/musl-gcc" +OPENSSL_ARCHIVE="$SCRIPT_DIR/openssl-$OPENSSL_VERSION.tar.gz" +OPENSSL_SOURCE_DIR="$SCRIPT_DIR/openssl-$OPENSSL_VERSION" +OPENSSL_PREFIX="$SCRIPT_DIR/openssl-prefix" +OPENSSL_STAMP="$OPENSSL_PREFIX/.openssl-$OPENSSL_VERSION-$OPENSSL_SHA256-musl-$MUSL_VERSION-$MUSL_SHA256" +OUTPUT_DIR="$SCRIPT_DIR/output" +STAMP="$OUTPUT_DIR/.curl-$CURL_VERSION-$CURL_SHA256-openssl-$OPENSSL_VERSION-$OPENSSL_SHA256-musl-$MUSL_VERSION-$MUSL_SHA256" + +if [ -x "$OUTPUT_DIR/curl" ] && [ -s "$OUTPUT_DIR/ca-certificates.crt" ] && [ -f "$STAMP" ]; then + exit 0 +fi + +mkdir -p "$OUTPUT_DIR" +if [ ! -f "$ARCHIVE" ]; then + wget -q "https://curl.se/download/curl-$CURL_VERSION.tar.xz" -O "$ARCHIVE.tmp" + mv "$ARCHIVE.tmp" "$ARCHIVE" +fi +if ! echo "$CURL_SHA256 $ARCHIVE" | sha256sum -c -; then + rm -f "$ARCHIVE" + exit 1 +fi + +if [ ! -f "$MUSL_ARCHIVE" ]; then + wget -q "https://musl.libc.org/releases/musl-$MUSL_VERSION.tar.gz" -O "$MUSL_ARCHIVE.tmp" + mv "$MUSL_ARCHIVE.tmp" "$MUSL_ARCHIVE" +fi +if ! echo "$MUSL_SHA256 $MUSL_ARCHIVE" | sha256sum -c -; then + rm -f "$MUSL_ARCHIVE" + exit 1 +fi + +if [ ! -f "$MUSL_STAMP" ] || [ ! -x "$MUSL_CC" ] || [ ! -f "$MUSL_PREFIX/lib/libc.a" ]; then + chmod -R u+w "$MUSL_PREFIX" 2>/dev/null || true + rm -rf "$MUSL_SOURCE_DIR" "$MUSL_PREFIX" + tar -xzf "$MUSL_ARCHIVE" -C "$SCRIPT_DIR" + cd "$MUSL_SOURCE_DIR" + CROSS_COMPILE="$CROSS_COMPILE" \ + ./configure --target=aarch64 --prefix="$MUSL_PREFIX" >/dev/null + make -j"$(nproc)" >/dev/null + make install >/dev/null + touch "$MUSL_STAMP" +fi + +if [ ! -f "$OPENSSL_ARCHIVE" ]; then + wget -q "https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL_VERSION/openssl-$OPENSSL_VERSION.tar.gz" -O "$OPENSSL_ARCHIVE.tmp" + mv "$OPENSSL_ARCHIVE.tmp" "$OPENSSL_ARCHIVE" +fi +if ! echo "$OPENSSL_SHA256 $OPENSSL_ARCHIVE" | sha256sum -c -; then + rm -f "$OPENSSL_ARCHIVE" + exit 1 +fi + +if [ ! -f "$OPENSSL_STAMP" ] || [ ! -f "$OPENSSL_PREFIX/lib/libssl.a" ] || [ ! -f "$OPENSSL_PREFIX/lib/libcrypto.a" ]; then + rm -rf "$OPENSSL_SOURCE_DIR" "$OPENSSL_PREFIX" + tar -xzf "$OPENSSL_ARCHIVE" -C "$SCRIPT_DIR" + cd "$OPENSSL_SOURCE_DIR" + REALGCC="${CROSS_COMPILE}gcc" \ + CROSS_COMPILE= CC="$MUSL_CC" AR="${CROSS_COMPILE}ar" RANLIB="${CROSS_COMPILE}ranlib" \ + ./Configure linux-aarch64 \ + --prefix="$OPENSSL_PREFIX" \ + --libdir=lib \ + no-shared no-tests no-docs no-apps no-module no-dso \ + no-secure-memory no-afalgeng no-ktls >/dev/null + REALGCC="${CROSS_COMPILE}gcc" CROSS_COMPILE= make -j"$(nproc)" >/dev/null + REALGCC="${CROSS_COMPILE}gcc" CROSS_COMPILE= make install_sw >/dev/null + touch "$OPENSSL_STAMP" +fi + +rm -rf "$SOURCE_DIR" +tar -xJf "$ARCHIVE" -C "$SCRIPT_DIR" + +cd "$SOURCE_DIR" +# NextUI's HTTP client does not request compressed transfer encoding, so zlib +# is deliberately omitted instead of linking the glibc SDK's archive into musl. +REALGCC="${CROSS_COMPILE}gcc" \ +CC="$MUSL_CC" \ +AR="${CROSS_COMPILE}ar" \ +RANLIB="${CROSS_COMPILE}ranlib" \ +STRIP="${CROSS_COMPILE}strip" \ +PKG_CONFIG=false \ +PKG_CONFIG_SYSROOT_DIR= \ +CPPFLAGS="-I$OPENSSL_PREFIX/include" \ +LDFLAGS="-L$OPENSSL_PREFIX/lib" \ +./configure \ + --host=aarch64-linux-musl \ + --disable-shared \ + --enable-static \ + --with-openssl="$OPENSSL_PREFIX" \ + --without-zlib \ + --with-ca-bundle=/mnt/SDCARD/.system/h700/etc/ssl/certs/ca-certificates.crt \ + --without-ca-path \ + --without-libpsl \ + --without-brotli \ + --without-zstd \ + --without-libidn2 \ + --without-nghttp2 \ + --disable-ldap \ + --disable-ldaps \ + --disable-rtsp \ + --disable-dict \ + --disable-telnet \ + --disable-tftp \ + --disable-pop3 \ + --disable-imap \ + --disable-smb \ + --disable-smtp \ + --disable-gopher \ + --disable-mqtt \ + --disable-manual >/dev/null +REALGCC="${CROSS_COMPILE}gcc" \ +make -j"$(nproc)" LDFLAGS="-all-static -L$OPENSSL_PREFIX/lib" >/dev/null + +"${CROSS_COMPILE}strip" src/curl +cp src/curl "$OUTPUT_DIR/curl" +cp /etc/ssl/certs/ca-certificates.crt "$OUTPUT_DIR/ca-certificates.crt" +chmod 755 "$OUTPUT_DIR/curl" + +file "$OUTPUT_DIR/curl" | grep -q 'ARM aarch64' +file "$OUTPUT_DIR/curl" | grep -q 'statically linked' +test -s "$OUTPUT_DIR/ca-certificates.crt" +rm -f "$OUTPUT_DIR"/.curl-* +touch "$STAMP" diff --git a/workspace/h700/makefile b/workspace/h700/makefile index 3d0ca7c1c..33b9bb2fa 100644 --- a/workspace/h700/makefile +++ b/workspace/h700/makefile @@ -15,6 +15,8 @@ REQUIRES_JSTEST=other/jstest REQUIRES_UNZIP60=other/unzip60 REQUIRES_FILEMGR=other/NextCommander REQUIRES_SDL2=other/sdl2 + +.PHONY: curl-runtime FILEMGR_PATCH=patches/NextCommander-h700.patch FILEMGR_STAMP=.patched-h700-v3 @@ -23,7 +25,7 @@ all: readmes # SDL2 (mali-fbdev, alsa-shared, joystick patch) is prebaked into h700-toolchain # at PREFIX_LOCAL. Stage it + SDK companion libs into other/sdl2/output for packaging. # Rebuild only via the toolchain image (support/build-sdl2.sh + support/sdl2-h700.patch). -early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) +early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILEMGR) curl-runtime mkdir -p other cd $(REQUIRES_EVTEST) && $(CROSS_COMPILE)gcc -o evtest evtest.c cd $(REQUIRES_JSTEST) && $(CROSS_COMPILE)gcc -o jstest jstest.c @@ -43,10 +45,14 @@ early: $(REQUIRES_EVTEST) $(REQUIRES_JSTEST) $(REQUIRES_UNZIP60) $(REQUIRES_FILE cd $(REQUIRES_FILEMGR) && make -j PLATFORM=h700 && touch output/.platform-h700 cd boot && sh build.sh +curl-runtime: curl/build.sh + cd curl && sh build.sh + clean: cd $(REQUIRES_FILEMGR) && make clean PLATFORM=h700 cd $(REQUIRES_UNZIP60) && make -f unix/Makefile.trimuismart clean rm -rf $(REQUIRES_SDL2)/output + rm -rf curl/output curl/curl-* curl/musl-* curl/openssl-* rm -rf boot/output ########################################################### diff --git a/workspace/h700/platform/makefile.copy b/workspace/h700/platform/makefile.copy index 7f89a189e..bfac9c0f6 100644 --- a/workspace/h700/platform/makefile.copy +++ b/workspace/h700/platform/makefile.copy @@ -19,6 +19,10 @@ $(PLATFORM): cp ./workspace/$@/rfkill/rfkill.elf ./build/SYSTEM/$@/bin/ cp ./workspace/$@/other/evtest/evtest ./build/SYSTEM/$@/bin/ cp ./workspace/$@/other/jstest/jstest ./build/SYSTEM/$@/bin/ + # Private curl runtime for stock Anbernic OS, which does not ship curl. + cp ./workspace/$@/curl/output/curl ./build/SYSTEM/$@/bin/ + mkdir -p ./build/SYSTEM/$@/etc/ssl/certs + cp ./workspace/$@/curl/output/ca-certificates.crt ./build/SYSTEM/$@/etc/ssl/certs/ # extras cp ./workspace/$@/other/NextCommander/output/NextCommander ./build/EXTRAS/Tools/$@/Files.pak/ From 118211d4affc2f12957e957ad996fa239a752b5e Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sun, 9 Aug 2026 11:55:38 +0200 Subject: [PATCH 72/76] fix(h700): update mGBA core build --- workspace/h700/cores/makefile | 4 ++++ workspace/h700/cores/patches/mgba.patch | 31 ------------------------- 2 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 workspace/h700/cores/patches/mgba.patch diff --git a/workspace/h700/cores/makefile b/workspace/h700/cores/makefile index a224ff179..5d03b8f4a 100755 --- a/workspace/h700/cores/makefile +++ b/workspace/h700/cores/makefile @@ -67,6 +67,10 @@ gambatte_REPO = https://github.com/libretro/gambatte-libretro mednafen_supafaust_REPO = https://github.com/libretro/supafaust +# mGBA replaced Makefile.libretro with a CMake-based libretro build. +mgba_CORE = build-h700/mgba_libretro.so +mgba_MAKE = cmake -S . -B build-h700 -DCMAKE_BUILD_TYPE=Release -DLIBMGBA_ONLY=ON -DBUILD_LIBRETRO=ON -DLIBRETRO_STATIC=OFF -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=$(CROSS_COMPILE)gcc -DCMAKE_CXX_COMPILER=$(CROSS_COMPILE)g++ -DCMAKE_C_FLAGS="-fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -fno-common -ftree-vectorize -funswitch-loops" -DCMAKE_CXX_FLAGS="-fomit-frame-pointer -ffast-math -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -fno-common -ftree-vectorize -funswitch-loops" && cmake --build build-h700 --target mgba_libretro -- $(PROCS) + pcsx_rearmed_MAKEFILE = Makefile.libretro # pcsx has a disabled submodule for gnulib, which takes forever to check out and is unused - skil checkout pcsx_rearmed_SUBMODULES = frontend/libpicofe diff --git a/workspace/h700/cores/patches/mgba.patch b/workspace/h700/cores/patches/mgba.patch deleted file mode 100644 index 780b6cc6f..000000000 --- a/workspace/h700/cores/patches/mgba.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git forkSrcPrefix/Makefile.libretro forkDstPrefix/Makefile.libretro -index 108148f4579f4727146e5b8c1e05ef7382654208..35e6399147a4ef75947ecb2ad4a94f0820ef24d0 100644 ---- forkSrcPrefix/Makefile.libretro -+++ forkDstPrefix/Makefile.libretro -@@ -417,6 +417,26 @@ else ifeq ($(platform), miyoo) - CFLAGS += -fno-common -ftree-vectorize -funswitch-loops - DEFINES += -std=c99 - -+# TRIMUI SMART PRO -+else ifeq ($(platform), h700) -+ TARGET := $(TARGET_NAME)_libretro.so -+ CC = $(CROSS_COMPILE)gcc -+ CXX = $(CROSS_COMPILE)g++ -+ AR = $(CROSS_COMPILE)ar -+ SHARED := -shared -Wl,--version-script=link.T -+ fpic := -fPIC -+ PLATFORM_DEFINES += -D_GNU_SOURCE -DHAVE_STRTOF_L -DHAVE_LOCALE -+ CFLAGS += -fomit-frame-pointer -ffast-math -+ CFLAGS += -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -+ CFLAGS += -fno-common -ftree-vectorize -funswitch-loops -+ HAVE_NEON = 1 -+ ARCH = arm64 -+ BUILTIN_GPU = neon -+ CPU_ARCH := arm -+ MMAP_JIT_CACHE = 1 -+ HAVE_DYNAREC = 1 -+ DEFINES += -std=c99 -+ - # Windows - else - TARGET := $(TARGET_NAME)_libretro.dll From 4057f54194f8493277bbaf8c6efbb5f25fdff87c Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sat, 15 Aug 2026 18:20:04 +0200 Subject: [PATCH 73/76] docs(h700): bring the port docs up to date for rc8 Catch the docs up with what the code actually does now, mark h700-rc8 as the golden master for the upstream PR, and record where the remaining known issues stand. --- docs/h700-port/00-device-facts.md | 4 +- docs/h700-port/01-toolchain-and-build.md | 7 +- docs/h700-port/02-boot-and-installer.md | 6 +- docs/h700-port/03-platform-layer.md | 26 +++--- docs/h700-port/04-video-display.md | 41 ++++++--- docs/h700-port/06-power-sleep-battery.md | 24 +++--- docs/h700-port/08-testing-status.md | 34 ++++---- docs/h700-port/09-roadmap.md | 101 +++++++++++++---------- docs/h700-port/10-core-game-matrix.md | 4 +- docs/h700-port/README.md | 5 +- 10 files changed, 148 insertions(+), 104 deletions(-) diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md index c36bdf393..c1884213f 100644 --- a/docs/h700-port/00-device-facts.md +++ b/docs/h700-port/00-device-facts.md @@ -295,5 +295,5 @@ is not the whole story — see the libasound symbol-versioning and libpng12 pitf 2. Exact stock `RGXX_MODEL` strings for the RG35XX family. (RG40XXH is now confirmed as `RG40xxH`, read from its StockMod `dmenu.bin`.) 3. RG SP support is derived entirely from firmware analysis — never run on the - hardware. Panel geometry, stickless input and the displaycal preset all need - confirming on a real unit. + hardware. Panel geometry, stickless input, and the calibrated displaycal + preset all need confirming on a real unit. diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md index dc4c5e0c3..754993ec5 100644 --- a/docs/h700-port/01-toolchain-and-build.md +++ b/docs/h700-port/01-toolchain-and-build.md @@ -164,9 +164,10 @@ links reappear. After `make setup && make h700`, the staging tree contains: - `build/SYSTEM/h700/bin/*` — nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf, clock, … - (tg5040 list minus ledcontrol, which is gated to tg50x0; bootlogo.elf builds for - h700 too and ships in `EXTRAS/Tools/h700/Bootlogo.pak`) plus `rfkill` - (h700 builds its own minimal `/dev/rfkill` ioctl tool — stock rfkill may be absent) + plus `ledcontrol.elf` and `bootlogo.elf` (both gated to tg5040/tg5050/h700; Bootlogo + ships in `EXTRAS/Tools/h700/Bootlogo.pak`), `poweroff_next`/`reboot_next`, `curl`, and + `rfkill` (h700 builds its own minimal `/dev/rfkill` ioctl tool — stock rfkill may be + absent) - `build/SYSTEM/h700/lib/` — libmsettings.so, libbatmondb.so, libgametimedb.so, … plus the bundled SDL2/tinyalsa/libpng12 set above - `build/SYSTEM/h700/cores/*.so` — full tg5040-parity core list diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md index bf15da4e9..02a2f0293 100644 --- a/docs/h700-port/02-boot-and-installer.md +++ b/docs/h700-port/02-boot-and-installer.md @@ -132,8 +132,10 @@ Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~2 - Spawns `keymon.elf`, `batmon.elf`, `audiomon.elf`; wifi/bt init per settings (07); runs boot hooks; then the standard crash-restart loop around `nextui.elf` / `/tmp/next` chaining. -- Poweroff/reboot via sentinel files: `/tmp/poweroff` → `poweroff`, `/tmp/reboot` → - `reboot` (systemd handles clean unmounts — works; no `poweroff_next` port needed). +- Poweroff/reboot via sentinel files: `/tmp/poweroff` → `poweroff_next`, + `/tmp/reboot` → `reboot_next`, each falling back to plain `poweroff`/`reboot` if + the tool exits non-zero. Bare systemd `poweroff` is not enough on this PMIC — + see 06. - Crash-loop handling: after 5 consecutive `nextui.elf` crashes, the loop logs the crash limit, removes `/tmp/nextui_exec`, and falls through to poweroff. H700 does not ship an automatic WiFi/SSH rescue path in the release runtime. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md index 1d863b5d0..8e1850eda 100644 --- a/docs/h700-port/03-platform-layer.md +++ b/docs/h700-port/03-platform-layer.md @@ -24,16 +24,18 @@ R3 ⇔ right): |---|---|---| | RG28XX, RG34XX, RG35XX Plus/2024/SP | none | `RG28xx` / `RG34xx` exact; `RG35xx` prefix default | | RG SP | none | `RGSP` exact | -| RG35XX H, RG35XX Pro | dual | `RG35xx` prefix + `H`/`Pro` suffix | +| RG35XX H, RG35XX Pro | dual | `RG35xx` prefix + exact `H` / `Pro*` suffix | | RG34XXSP | dual | `RG34xxSP` exact | -| RG40XX H, RG CubeXX, unknown | dual | `RG40xxH`, `RGcube*`; dual is the fallback | +| RG40XX H, RG CubeXX | dual | `RG40xxH`, `RGcube*` / `DEVICE=cube` | | RG40XX V | left only | `RG40xxV` exact | +| Unrecognized / missing model | none | conservative default — sticks stay off until a known match | -Unknown `RG35xx` variants default to stickless (most of that family is); anything -else unknown defaults to dual (today's behavior, covers `DEVICE=rg40xx` without a -model string). No H700 Anbernic device has an Fn switch. Exact `RGXX_MODEL` strings -still unconfirmed for the RG35xx family (same caveat as msettings' displaycal -presets). +Unknown `RG35xx` variants and any other unrecognized model stay stickless. That is +deliberate: `DEVICE=rg40xx` alone (launch.sh fallback without a usable +`RGXX_MODEL`) no longer assumes dual sticks. No H700 Anbernic device has an Fn +switch. Exact `RGXX_MODEL` strings are still unconfirmed for the RG35xx family +(same caveat as msettings' displaycal presets). The H700 PS1 pak binds L3/R3 so +DualShock titles can use stick clicks on models that have them. The RG SP is stickless on device-tree evidence rather than spec sheets: its DTB has no `keyL3`/`keyR3` nodes, none of the analog multiplexer pins the RG34XXSP carries @@ -51,6 +53,7 @@ left stick on RG40XXV and for both sticks on RG34XXSP. extern int is_rg28xx, is_rg34xx, is_rgsp, is_cube; extern int hdmi_active; extern int dev_has_lstick, dev_has_rstick; +extern int dev_has_rgb, dev_num_leds; #define HDMI_WIDTH 1280 #define HDMI_HEIGHT 720 @@ -61,7 +64,8 @@ extern int dev_has_lstick, dev_has_rstick; #define SCREEN_FPS 60.0 // ⚠ assumed, never measured per panel #define SDCARD_PATH "/mnt/SDCARD" // symlink to the real TF2 mountpoint (02) #define MAX_LIGHTS 2 // ceiling; PLAT_getNumLeds() reports 0/1/2 per model -#define MAIN_ROW_COUNT (hdmi_active?10:(is_cube?8:6)) +#define MAIN_ROW_COUNT ((hdmi_active||is_cube)?10:6) // cube was under-filled at 8 +#define PADDING ((hdmi_active||is_cube)?5:10) // 480p keeps standard 10-unit gaps ``` ## Input — dual path, evdev primary (deviation from plan) @@ -135,7 +139,7 @@ open/closed per poll and could drop the wake press between polls. | CPU speed | `governor.sh` via `system()`: auto=schedutil and performance both permit the greatest advertised frequency; powersave=conservative capped mid-range. H700's advertised 1.5 GHz ceiling is in-spec, not an overclock, so Auto no longer caps it one step below maximum. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | | CPU temp | thermal_zone0 | | GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | -| GPU speed | devfreq `cur_freq` (two SoC paths) → debug clk paths → 660 MHz literal as last-resort fallback | +| GPU speed / governor | HUD read resolves `devfreq`/`clk` paths once (first readable candidate wins) with a 648 MHz last-resort fallback. `governor.sh` also pins GPU `min_freq` to max under auto/performance and to min under powersave — `simple_ondemand` under-clocks vsync'd spiky loads (06) | | Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | | LEDs | RGB on RG40XX H / RG40XX V / RG CubeXX only, via an MCU on `/dev/ttyS5` (115200 8N1) gated by `axp2202-battery/mcu_pwr` — see `platform/led.c`. `MAX_LIGHTS 2` is a ceiling; `PLAT_getNumLeds()` returns 0 (no RGB), 1 (RG40XXV, one populated bank) or 2. Effects are rendered by the MCU firmware, not in userspace. `work_led` remains the sleep/backlight indicator on every model | | Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | @@ -207,8 +211,8 @@ integration. Review them when rebasing or adding another platform: LUT after suspend. - `workspace/all/bootlogo/bootlogo.c` contains the diagnostic empty-state handling and the optional `BOOTLOGO_PREVIEW_ROTATE_CW` hook used by RG28XX. -- Root/workspace makefiles register the H700 platform, tg5040-image reuse, rfkill, - and the H700 Bootlogo build. +- Root/workspace makefiles register the H700 platform, dedicated `h700-toolchain`, + rfkill, LedControl, and the H700 Bootlogo build. Any change in this surface requires the H700 build plus the tg5040 regression build recorded as BUILD-01 and BUILD-02 in 08. A new shared button or `PLAT_*` hook must be diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md index f32690c0f..b0354a928 100644 --- a/docs/h700-port/04-video-display.md +++ b/docs/h700-port/04-video-display.md @@ -132,6 +132,14 @@ same way for free. whichever commit lands last wins against the attach path's restore; commit again after unblank. The blob's pans then keep the crop in sync (they copy the committed config). + 3. **Reset the pan origin to page 0.** `fb_var_screeninfo`'s `xoffset`/`yoffset` + survive `FBIOPUT_VSCREENINFO` resize. Coming off a 640×480 panel, `yoffset` + can still be 480 — not a page boundary of the new 1280×720×2 buffer. Measured + on RG40XXV, that wedges the mali fbdev winsys (it never pans again; every + frame lands in page 0) while `commitLayerGeometry()` had cropped scanout to + page 1 → black on both TV and panel. `SetHDMI()` clears both offsets and + commits `crop.y = 0`, and the read-back retry also requires page 0 so a late + attach-path restore cannot revive the old offset. - **Hardware evidence (RG40XXV + TV, 2026-07-16):** plug/unplug in launcher and in-game (autosave → auto-resume), repeated cycles, game scaling correct at 1280×720, and HDMI audio @@ -160,18 +168,27 @@ only when the file is missing or predates v11. Verified on RG40XXV: patched valu survive reboot. (tg5040 has the same latent bug, masked by its calibrated presets — flagged as a separate task.) -**Per-model default presets — plumbed, not yet measured.** `displaycal.h` has a -preset per H700 model (RG28XX, RG34XX, RG34XXSP, RGSP, RG35XX = Plus/H/2024 shared, -RG35XXSP, RG35XXPRO, RG40XXH, RG40XXV, RGCubeXX), all currently disabled/neutral -(100/100/100). The RG SP keeps its own preset rather than sharing the RG34XXSP's, -so calibrating one panel cannot silently retune the other. Selection keys on -`RGXX_MODEL` (exact-model string from stock `dmenu.bin`; confirmed so far: -`RG28xx`, `RG34xx`, `RG34xxSP`, `RGSP`, `RG40xxH`, `RG40xxV`, -`RGcubexx` — RG35xx-family strings matched by prefix until confirmed) -with `DEVICE` fallback, in both h700 libmsettings and the settings app's -reset-to-defaults. launch.sh now maps `RG35xx*` → `DEVICE=rg35xx` instead of lumping -the 35xx family into rg40xx. Calibrating a panel later = editing numbers in -displaycal.h only. Default brightness on h700 is 4 (tg5040 Brick keeps 2). +**Per-model default presets — partly calibrated.** `displaycal.h` has a preset per +H700 model (RG28XX, RG34XX, RG34XXSP, RGSP, RG35XX = Plus/H/2024 shared, +RG35XXSP, RG35XXPRO, RG40XXH, RG40XXV, RGCubeXX). Calibrated and enabled today: + +| Model | Enabled | R / G / B | +|---|---|---| +| RG28XX | yes | 100 / 92 / 65 | +| RG34XXSP | yes | 100 / 83 / 86 | +| RG SP | yes | 100 / 68 / 61 | +| RG40XXV | yes | 91 / 100 / 63 | + +The remaining models stay disabled with neutral 100/100/100 until measured. The +RG SP keeps its own preset rather than sharing the RG34XXSP's, so calibrating one +panel cannot silently retune the other. Selection keys on `RGXX_MODEL` +(exact-model string from stock `dmenu.bin`; confirmed so far: `RG28xx`, `RG34xx`, +`RG34xxSP`, `RGSP`, `RG40xxH`, `RG40xxV`, `RGcubexx` — RG35xx-family strings +matched by prefix until confirmed) with `DEVICE` fallback, in both h700 +libmsettings and the settings app's reset-to-defaults. launch.sh maps `RG35xx*` → +`DEVICE=rg35xx` instead of lumping the 35xx family into rg40xx. Further panel +calibration = editing numbers in `displaycal.h` only. Default brightness on h700 +is 4 (tg5040 Brick keeps 2). **What actually works on RG XX panels:** LCD backlight brightness, color temperature, white-point correction (displaycal), RGB tuning. The `enhance_*` display controls diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md index dd80f4b2c..d6a5a795b 100644 --- a/docs/h700-port/06-power-sleep-battery.md +++ b/docs/h700-port/06-power-sleep-battery.md @@ -124,13 +124,9 @@ lid is still closed, the unit returns to sleep. Its lifecycle disposition is in [roadmap](09-roadmap.md#accepted-behavior-and-non-gates). - Richer metrics (`time_to_empty_now`, `voltage_now`, `temp`, `charge_counter`) are available for future batmon extensions; not wired. -- Standby-drain investigation: the first RG34XXSP observation was a capacity change - from 40% to 33% over about 8.5 hours of deep sleep. Capacity is coarse, and the UI - desynchronization above may muddy the observation; it also predates the Super - Standby `os_sleep=16` integration. Re-test with - `axp2202-battery/voltage_now` before/after and run the same interval on stock OS - for a baseline. POWER-06 records the evidence; the follow-up is tracked in the - [roadmap](09-roadmap.md#future-hardening). +- Standby drain: [POWER-06](08-testing-status.md#power-sleep-and-battery) completed — + sleep-drain work verified against stock OS on RG34XXSP (supersedes the earlier + coarse 40%→33% / 8.5 h capacity-only observation from before Super Standby). ## Power off / reboot @@ -192,10 +188,10 @@ powered-off case; leave it alone. - `--dry-run` reports the detected bus, resolved card path and planned writes, and touches nothing. Safe on a live device. -## CPU governor +## CPU / GPU governor -`governor.sh` reads the available frequency list. Auto uses `schedutil` across the -full advertised range, performance uses `performance` at the greatest advertised +`governor.sh` reads the available CPU frequency list. Auto uses `schedutil` across +the full advertised range, performance uses `performance` at the greatest advertised frequency, and powersave uses `conservative` capped mid-range. H700's advertised 1.5 GHz ceiling is in-spec rather than an overclock, so Auto no longer caps its maximum one frequency step below that ceiling. Menu vs in-game profiles ride the @@ -204,3 +200,11 @@ are clean. ~~RG34XXSP MD Auto CPU slowdown~~ Fixed (user-verified 2026-07-20): earlier, some shader/scale combos left Auto near 480 MHz and felt slow; that no longer reproduces. Manual powersave/performance were already smooth. Single cluster → no core pinning. + +The same script also manages the GPU floor. Stock `simple_ondemand` under-clocks +vsync'd spiky shader loads (busy-% over 100 ms does not care about a single missed +frame), so auto/performance raise GPU `min_freq` to the greatest advertised rate +and powersave drops it to the minimum. Measured cost on RG40XXV is about 0.5% of +a 6-hour run (~2 minutes); the HUD read path resolves the working `devfreq` node +once (648 MHz last-resort fallback) so minarch does not burn CPU probing dead +paths every frame. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md index 636f4296a..87d80911a 100644 --- a/docs/h700-port/08-testing-status.md +++ b/docs/h700-port/08-testing-status.md @@ -6,7 +6,9 @@ blocks Alpha, Beta, RC, or Release; those decisions live in [09-roadmap.md](09-roadmap.md). Detailed per-core coverage lives in [10-core-game-matrix.md](10-core-game-matrix.md). -Results recorded through 2026-07-20. +Results recorded through 2026-08-09. Artifact lineage: Alpha → `h700-beta1` → +`h700-rc1`…`h700-rc8`. **`h700-rc8` is GM** (rebuild on the NextUI v6.14.0 commit to +keep RetroAchievements working; see [09](09-roadmap.md#current-position)). ## Status and evidence rules @@ -40,7 +42,7 @@ limit on support. | ID | Test | Status | Evidence/device | Result and notes | |---|---|---|---|---| | BUILD-01 | CI-style H700 staging build (`make setup`, then `make h700`) | ✅ | CI/release build | H700 binaries, tools, cores, libraries, boot shim, and installer assets stage successfully | -| BUILD-02 | Full tg5040 regression build after shared-code changes | ⬜ | Candidate-specific | Must be recorded for the actual candidate; single-pak builds are insufficient | +| BUILD-02 | Full tg5040 regression build after shared-code changes | ✅ | TrimUI Brick / shared `h700-rc8` artifact | Same candidate runs on tg5040. Users report LedControl settings do not stick on TrimUI in this version ([#23](https://github.com/pvaibhav/NextUI/issues/23)); H700 LED path is separate (LED-01…), treat as a tg5040 regression to track rather than an H700 build failure | | BUILD-03 | Jammy `settings.elf` runtime linkage check | ✅ | Automated container check | H700 library path resolves and required gio/glib linkage is present | | BUILD-04 | Bundled curl static linkage and HTTPS | ✅ | arm64 Jammy container | Pinned musl curl 8.21.0 + OpenSSL 3.5.7 has no dynamic section; DNS and TLS reach the RetroAchievements API using the bundled CA file (HTTP 422 is the expected unauthenticated response) | @@ -50,7 +52,7 @@ limit on support. |---|---|---|---|---| | BOOT-01 | Cold boot to NextUI and 10+ reboot soak | ✅ | RG40XXV | Stable boot with reasonable startup time | | BOOT-02 | Stock-card hijack with the required **old style** theme | ✅ | RG40XXV/RG34XXSP | `/mnt/mmc/dmenu.bin` launches NextUI from TF2 | -| BOOT-03 | Repeated launcher crash limit | ⬜ | Code present | The launcher implements a five-consecutive-crash cutoff followed by poweroff, but it has not been exercised end to end | +| BOOT-03 | Repeated launcher crash limit | ➖ | Design / accepted | Five-crash cutoff then poweroff is implemented; deliberately not required as an induced E2E release gate for `h700-rc8` | | BOOT-04 | Remove `dmenu.bin` to restore stock boot | ➖ | Design inspection | Stock `dmenu_ln` cannot launch NextUI when the single hijack file is absent; no separate uninstall workflow exists | | BOOT-05 | Stock **MU style** theme behavior | ✅ | On-device observation | MU style bypasses `/mnt/mmc/dmenu.bin` and boots the stock/MU frontend; NextUI cannot display an in-shim warning | @@ -85,7 +87,7 @@ limit on support. | AUDIO-01 | Internal volume UI, mute, and levels from 0–100% | ✅ | RG40XXV, RG34XXSP | Audible levels and reversed `digital volume` scale behave correctly | | AUDIO-02 | Game audio and underruns | ✅ | RG40XXV, tested RG34XXSP games | GBA/SNES and broader gameplay have clean audio with no observed underruns | | AUDIO-03 | Headphone insertion and speaker routing | ✅ | RG34XXSP | Hardware auto-mutes the speaker and routes to headphones; NextUI does not expose a separate HP icon/volume | -| AUDIO-04 | Bluetooth A2DP pairing and playback | ✅ | RG40XXV + AirPods 4 ANC | Pairing is remembered; manual Connect routes audible SBC audio; returning AirPods to the case restores the internal speaker. Nearby iPhone/Mac devices may win auto-connect | +| AUDIO-04 | Bluetooth A2DP pairing and playback | ✅ | RG40XXV + AirPods 4 ANC | Pairing is remembered; manual Connect routes audible SBC audio; returning AirPods to the case restores the internal speaker. Nearby iPhone/Mac devices may win auto-connect. One post-sleep auto-repair report is expected-not-supported behavior pending triage ([#20](https://github.com/pvaibhav/NextUI/issues/20)) | | AUDIO-05 | HDMI audio routing and restoration | ✅ | RG40XXV + TV | HDMI route is audible; unplug restores the panel/internal route | ## Network and online features @@ -107,7 +109,7 @@ limit on support. | POWER-03 | RG34XXSP lid close/open | ✅ | RG34XXSP | Close sleeps and open wakes. POWER may wake light sleep with lid closed; deep sleep re-sleeps while the lid remains closed | | POWER-04 | Charging indication and sleep while charging | ✅ | RG34XXSP | Indicator works; shared product behavior permits light/screen-off sleep and suppresses deep sleep while charging | | POWER-05 | Battery percentage versus stock | ✅ | RG34XXSP | Fresh-boot percentage matches stock; after long sleep the top-bar icon and Battery pak briefly disagreed with each other | -| POWER-06 | Overnight suspend drain versus stock | ⚠️ | RG34XXSP | First point: about 7% over 8.5 hours. No voltage-based stock comparison is recorded | +| POWER-06 | Overnight suspend drain versus stock | ✅ | RG34XXSP | Sleep-drain work completed and verified against stock OS | ## Games and performance @@ -120,12 +122,12 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger | GAME-03 | MD/PicoDrive launch, gameplay, and Auto CPU | ✅ | RG34XXSP | Former slowdown near 480 MHz is fixed | | GAME-04 | PS1/PCSX-ReARMed launch and performance | ✅ | RG40XXV, RG34XXSP | Clean core rebuild fixed the stale/corrupted packaged artifact | | GAME-05 | FBNeo happy path and missing-BIOS error path | ⚠️ | RG34XXSP | With required BIOS, launch/play pass. Without BIOS, the upstream core stops polling frontend input and MinArch cannot open menu/exit | -| GAME-06 | Remaining EXTRAS core smoke | ⚠️ | RG34XXSP | A2600, MGBA, and SMS pass; the remaining long-tail systems are not fully covered | +| GAME-06 | Remaining EXTRAS core smoke | ⚠️ | RG34XXSP (maintainer) | Maintainer-tested Pass: A2600, mGBA, SMS, and Pico-8 (Fake-08). Remaining long-tail systems in [10](10-core-game-matrix.md) are untested by the maintainer; other users may have exercised them — no specific bug reports so far. Known incomplete coverage, not a merge blocker | | PERF-01 | GBA/SNES full speed with vsync | ✅ | RG40XXV, tested RG34XXSP games | Full speed with no observed audio underruns | | PERF-02 | Frame pacing, tearing, and input latency | ✅ | RG40XXV | No visible issue during gameplay; result is observational, not instrumented | | PERF-03 | Manual CPU governor changes during play | ✅ | RG34XXSP | Powersave/performance changes do not stutter audio | | PERF-04 | Automatic governor load/frequency selection | ✅ | RG34XXSP | MD Auto CPU regression is resolved | -| PERF-05 | Auto governor full-range scaling | ⬜ | Implementation ready; hardware result pending | With Auto selected, `scaling_max_freq` should equal the greatest advertised frequency (about 1.5 GHz) and schedutil should scale up to it under load without new performance, thermal, or audio regressions | +| PERF-05 | Auto governor full-range scaling | ✅ | Representative H700 device | With Auto selected, `scaling_max_freq` reaches the greatest advertised frequency (~1.5 GHz) and schedutil scales under load; no new performance, thermal, or audio regressions observed | ## Applications and device-specific hardware @@ -136,7 +138,7 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger | DEV-01 | RG40XXV 640×480/single-stick baseline | ✅ | RG40XXV | UI, input, game runtime, HDMI, and Bluetooth paths pass | | DEV-02 | RG34XXSP 720×480/lid/dual-stick delta | ✅ | RG34XXSP | UI scaling, lid, controls, apps, and games pass | | DEV-03 | RG28XX 480×640 rotation delta | ✅ | RG28XX | UI, game Aspect/Fullscreen scaling, bootlogo apply, and rotated preview pass | -| DEV-04 | RGcubexx 720×720 delta | ⚠️ | Community report | General UI scaling passes; the main list under-filled the panel (8 rows instead of the 10 that fit) until [#18](https://github.com/pvaibhav/NextUI/issues/18) — fix is untested on cube hardware; no full local functional/core walk exists | +| DEV-04 | RGcubexx 720×720 delta | ✅ | Community / user confirmation | General UI scaling passes. [#18](https://github.com/pvaibhav/NextUI/issues/18) under-fill fixed (`MAIN_ROW_COUNT` 10 on cube/HDMI); user confirmed the 10-row layout on cube hardware | | DEV-05 | Bootlogo 640×480 apply/backup | ✅ | RG40XXV | Carousel, apply, backup, and original entry pass; restore uses the same apply path | | DEV-06 | Bootlogo 720×480 preview/apply/backup/restore | ✅ | RG34XXSP | All 23 presets render; first backup and restore pass | | DEV-07 | Bootlogo 480×640 apply and preview orientation | ✅ | RG28XX | Applied logo and rotated previews are upright | @@ -145,8 +147,8 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger | ID | Test | Status | Evidence/device | Result and notes | |---|---|---|---|---| -| ROBUST-01 | Stock `launcher.sh stop` SIGUSR1 does not terminate the NextUI boot shim | ⬜ | Code present | The shim deliberately ignores USR1 with `trap '' USR1`; no end-to-end result is recorded | -| ROBUST-02 | Dirty FAT card recovery via `fsck.fat -a` | ⬜ | Code present | Boot hook exists; no induced dirty-card recovery result is recorded | +| ROBUST-01 | Stock `launcher.sh stop` SIGUSR1 does not terminate the NextUI boot shim | ➖ | Design / accepted | Shim uses `trap '' USR1`; not exercised end to end and not required as a Release blocker for `h700-rc8` | +| ROBUST-02 | Dirty FAT card recovery via `fsck.fat -a` | ➖ | Design / accepted | Boot `fsck.fat -a` / repair path exists; not induced end to end and not required as a Release blocker for `h700-rc8` | ## Capability boundaries @@ -157,16 +159,16 @@ See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger | LED-01 | RGB LEDs driven over the UART5 MCU | ✅ | RG40XXV | Verified end to end: raw frames light the L stick ring, and NextUI drives it with the seeded `0x440044` default after update. Second bank drives nothing on the V, confirming `dev_num_leds = 1`. `/dev/ttyS5` is free (console and getty are on `ttyS0`) | | LED-02 | Colour, brightness, all four effects | ✅ | RG40XXV | User-verified in LedControl | | LED-03 | Ambient Mode narrowed to Off/On | ✅ | RG40XXV | User-verified | -| LED-01b | Two-bank models, bank order | ⏳ | RG40XX H / RG CubeXX | Untested — nobody in the fleet has one. Gated to 2 zones, `H700_LED_RIGHT_FIRST 1` per muOS. The V cannot settle bank order: with one populated bank both halves get the same colour, so its "first bank lights the left stick" observation does not generalise | -| LED-06 | tg5040 regression after `PLAT_getNumLeds` | ✅ | TrimUI Brick | Per-LED mapping still correct — each LED responded to its own mode change. This is the path where a wrong count would write brightness 0 to the global `max_scale` and kill every LED | +| LED-04 | LedControl on a model without RGB | ✅ | RG34XXSP, RG28XX | Shows the "no RGB lights" screen, exits on B, and does not open `/dev/ttyS5` | | LED-05 | Speed control | ✅ | RG40XXV | Rainbow/Rainbow Multi take a continuous 0-255 speed byte and vary smoothly across the whole 0-4900 range. Breathe has only the three firmware rates (modes 2/3/4), so its Speed row quantises into thirds — a known cosmetic wart, not a defect | -| LED-02 | LedControl on a model without RGB | ⏳ | RG34XXSP / RG28XX | Pak now ships to every h700 device; must show the "no RGB lights" screen, exit on B, and never open `/dev/ttyS5` | -| LED-03 | Ambient Mode narrowed to Off/On | ⏳ | RG40XXV | Option is hidden entirely at 0 lights and reduced to two entries at ≤2 | +| LED-06 | tg5040 regression after `PLAT_getNumLeds` | ✅ | TrimUI Brick | Per-LED mapping still correct — each LED responded to its own mode change. This is the path where a wrong count would write brightness 0 to the global `max_scale` and kill every LED | +| LED-07 | Ambient Mode UI when lights ≤2 / 0 | ✅ | RG40XXV, RG34XXSP | Ambient Mode appears on RG40XXV (≤2 lights, Off/On). Hidden on RG34XXSP (0 lights / no RGB) | +| LED-01b | Two-bank models, bank order | ⚠️ | External users (RG40XX H / RG CubeXX class) | Only the right LED responds; the left cannot be changed. Likely bank-order / `H700_LED_RIGHT_FIRST` mapping. Single-bank RG40XXV path (LED-01) remains Pass. **Accepted known bug** for the merge PR — maintainer has no dual-bank device; upstream decides merge-with-bug vs wait-for-fix | ## Test execution protocol -- Candidate builds must record BUILD-01, BUILD-02, and BUILD-03 against the actual - artifact being promoted. +- Candidate builds must record BUILD-01, BUILD-02, BUILD-03, and BUILD-04 against + the actual artifact being promoted. - Changes under `workspace/all/` require both H700 and tg5040 builds. - A new device needs a short shared-runtime smoke plus tests for its hardware/model delta; it does not need the full matrix repeated without a specific risk. diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md index 54ea9f7f2..3f9fe4676 100644 --- a/docs/h700-port/09-roadmap.md +++ b/docs/h700-port/09-roadmap.md @@ -8,10 +8,17 @@ every test ID points to the canonical report in ## Current position -Alpha 1, Alpha 2, and Alpha 3 are complete. The port is preparing its Beta candidate. -The H700 Auto governor now permits the full in-spec 1.5 GHz range; PERF-05 hardware -validation, the planned per-model out-of-box profiles, and the candidate-specific -H700/tg5040 build and linkage checks remain. +Alpha 1–3, Beta (`h700-beta1`), and RC1–RC8 are complete. **`h700-rc8` is the golden +master** about to be opened as the PR for official merge upstream. + +RC8 was not a feature delta over RC7: it is a rebuild that rebased the H700 port onto +the exact upstream commit used by NextUI **v6.14.0**, deliberately excluding a later +RetroAchievements-related change that prevented many achievements from triggering. +minarch was rebuilt on that base; the H700 platform work itself is otherwise the same +lineage as RC7. + +Remaining work for this document is gate/evidence hygiene for the merge PR (open +rows in 08, any unsettled RC/Release checklist items), not further Alpha/Beta bring-up. ## Stage roadmap @@ -23,9 +30,9 @@ these definitions when reading older alpha artifacts and commit notes. | Alpha 1 — platform bring-up | Prove stock-card boot, basic display/input/audio, WiFi, and playable cores on the RG40XXV baseline | [BUILD-01](08-testing-status.md#build-and-binary-compatibility), [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | ✅ Complete | | Alpha 2 — family expansion | Fix sleep/Files/UI regressions and prove real hardware deltas: RG34XXSP panel/lid/sticks, RG28XX rotation, Bootlogo sizes, and shared capability gating | [POWER-01, POWER-03](08-testing-status.md#power-sleep-and-battery), [APP-01](08-testing-status.md#applications-and-device-specific-hardware), [DISP-02, DISP-03, DISP-04, DISP-05, DISP-06, DISP-07](08-testing-status.md#display-and-user-interface), [INPUT-02, INPUT-03](08-testing-status.md#input-and-controllers), [DEV-02, DEV-03, DEV-05, DEV-06, DEV-07](08-testing-status.md#applications-and-device-specific-hardware) | ✅ Complete | | Alpha 3 — Beta hardening | Close feature gaps and ambiguous policies: HDMI, Bluetooth controller/audio, screenshots, headphone route, MD Auto CPU, PS1 packaging, and representative core smoke | [DISP-08](08-testing-status.md#display-and-user-interface), [INPUT-05](08-testing-status.md#input-and-controllers), [AUDIO-03, AUDIO-04, AUDIO-05](08-testing-status.md#audio), [GAME-03, GAME-04, GAME-06](08-testing-status.md#games-and-performance), [PERF-04](08-testing-status.md#games-and-performance) | ✅ Complete; partial long-tail rows are classified below | -| Beta — public validation | Publish the supported H700 family build, collect broader device/firmware evidence, and fix any new critical regression | Beta entry gates and planned work below | Preparing: PERF-05, per-model defaults, and candidate checks remain | -| RC — release qualification | Freeze scope, close recovery checks, validate the packaged candidate, and accept or fix all Beta findings | RC entry gates below | Planned | -| Release — supported baseline | Promote an RC with no open release blocker and with support/known-issue documentation matching behavior | Release gates below | Planned | +| Beta — public validation | Publish the supported H700 family build, collect broader device/firmware evidence, and fix any new critical regression | Beta entry gates below | ✅ Complete (`h700-beta1`) | +| RC — release qualification | Freeze scope, close recovery checks, validate the packaged candidate, and accept or fix all Beta findings | RC entry gates below | ✅ Complete through `h700-rc8` (GM) | +| Release — supported baseline | Promote an RC with no open release blocker and with support/known-issue documentation matching behavior | Release gates below | ✅ Release gates satisfied for `h700-rc8`; open the upstream merge PR | ## Beta entry gates @@ -34,26 +41,26 @@ unless the code or hardware differs. | Gate | Required tests | Current disposition | |---|---|---| -| Candidate build integrity | [BUILD-01, BUILD-02, BUILD-03](08-testing-status.md#build-and-binary-compatibility) | Pending only on the published-candidate run | +| Candidate build integrity | [BUILD-01, BUILD-02, BUILD-03, BUILD-04](08-testing-status.md#build-and-binary-compatibility) | Satisfied on `h700-rc8`; BUILD-02 notes a tg5040 LedControl persistence report ([#23](https://github.com/pvaibhav/NextUI/issues/23)) | | Boot and shared runtime | [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | Satisfied | | Power and resume | [POWER-01, POWER-02](08-testing-status.md#power-sleep-and-battery) | Satisfied | -| Hardware deltas | [DEV-01, DEV-02, DEV-03](08-testing-status.md#applications-and-device-specific-hardware) | Satisfied; DEV-04 depth is future work | +| Hardware deltas | [DEV-01, DEV-02, DEV-03, DEV-04](08-testing-status.md#applications-and-device-specific-hardware) | Satisfied (DEV-04 user-confirmed on cube) | | HDMI | [DISP-08](08-testing-status.md#display-and-user-interface), [AUDIO-05](08-testing-status.md#audio) | Satisfied | | Bluetooth audio | [AUDIO-04](08-testing-status.md#audio) | Satisfied | | Core/performance baseline | [GAME-02, GAME-03, GAME-04](08-testing-status.md#games-and-performance), [PERF-01, PERF-04](08-testing-status.md#games-and-performance) | Satisfied | -| Auto CPU full range | [PERF-05](08-testing-status.md#games-and-performance) | High priority: implementation complete; hardware result pending | +| Auto CPU full range | [PERF-05](08-testing-status.md#games-and-performance) | Satisfied | ## Beta planned work | Work | Priority / target | Completion condition | |---|---|---| -| Auto governor full-range scaling | High — ASAP, required for Beta | PERF-05 passes on a representative H700 device | -| Per-model out-of-box defaults | Planned for Beta | Ship tested H700-model profiles covering shader choice, emulator/core options, and relevant frontend defaults so each model starts with sensible settings | +| ~~Auto governor full-range scaling~~ | Was required for Beta | ✅ [PERF-05](08-testing-status.md#games-and-performance) passed on hardware | +| Per-model out-of-box defaults | **Post-merge enhancement** (not a `h700-rc8` merge blocker) | Ship tested H700-model profiles covering shader choice, emulator/core options, and relevant frontend defaults so each model starts with sensible settings | -The per-model profiles are an intentional H700-specific departure from NextUI's +The per-model profiles remain an intentional H700-specific departure from NextUI's otherwise barebones cross-platform defaults. Keep the overrides narrow, documented, and tested so they improve first-run behavior without silently changing other -platforms. +platforms. They are **not** required to open or merge the upstream PR. Beta does not require every device or long-tail core to be tested. A new Beta finding becomes a Beta blocker only when it causes data loss, prevents boot/gameplay on the @@ -65,21 +72,21 @@ does not generalize. | Gate | Exit condition | |---|---| | Beta blocker closure | Every critical/high-impact Beta regression is fixed, or the affected feature/model is explicitly removed from RC scope | -| Recovery | [BOOT-03](08-testing-status.md#boot-install-and-launcher), [ROBUST-01 and ROBUST-02](08-testing-status.md#recovery-and-robustness) pass end to end | -| Packaged build | [BUILD-01, BUILD-02, BUILD-03](08-testing-status.md#build-and-binary-compatibility) pass on the RC artifact | +| Recovery | — | [BOOT-03](08-testing-status.md#boot-install-and-launcher), [ROBUST-01](08-testing-status.md#recovery-and-robustness), and [ROBUST-02](08-testing-status.md#recovery-and-robustness) are accepted non-gates (code present; induced E2E not required for `h700-rc8`) | +| Packaged build | [BUILD-01, BUILD-02, BUILD-03, BUILD-04](08-testing-status.md#build-and-binary-compatibility) pass on the RC artifact | | Regression smoke | [BOOT-01](08-testing-status.md#boot-install-and-launcher), [GAME-01, GAME-04](08-testing-status.md#games-and-performance), [POWER-01, POWER-02](08-testing-status.md#power-sleep-and-battery), [NET-02](08-testing-status.md#network-and-online-features), and [AUDIO-02, AUDIO-04](08-testing-status.md#audio) are rerun on a representative H700 device | | Hardware-change targeting | Re-run the relevant DEV/INPUT/DISP row only when Beta changes touch that hardware delta | | Documentation | Install prerequisites, supported models, and accepted issues below match the RC behavior | ## Release gates -| Gate | Exit condition | -|---|---| -| RC soak | No unresolved boot, suspend/resume, audio-route, save-state, or data-integrity regression is found during RC use | -| Final artifact | BUILD-01, BUILD-02, BUILD-03, and the RC regression smoke pass on the exact release package | -| Known issues | Every accepted partial/failing row is documented with user impact and workaround where one exists | -| Support boundary | Supported family behavior, hardware-specific exceptions, firmware prerequisites, and out-of-scope features are explicit | -| Rollback | The one-file `dmenu.bin` removal path and old-style-theme prerequisite are present in release instructions | +| Gate | Exit condition | Disposition (`h700-rc8`) | +|---|---|---| +| RC soak | No unresolved boot, suspend/resume, audio-route, save-state, or data-integrity regression is found during RC use | ✅ Satisfied | +| Final artifact | BUILD-01, BUILD-02, BUILD-03, BUILD-04, and the RC regression smoke pass on the exact release package | ✅ Satisfied on `h700-rc8`. AUDIO-04 remains Pass; one report of no automatic BT re-pair after sleep/wake is expected-not-to-work and filed for triage ([#20](https://github.com/pvaibhav/NextUI/issues/20)) | +| Known issues | Every accepted partial/failing row is documented with user impact and workaround where one exists | ✅ Documented. Includes accepted known bug [LED-01b](08-testing-status.md#capability-boundaries) (dual-bank left LED; no maintainer test device — upstream merge call). Other non-blockers: INPUT-06, GAME-05, GAME-06, [#20](https://github.com/pvaibhav/NextUI/issues/20), [#23](https://github.com/pvaibhav/NextUI/issues/23) | +| Support boundary | Supported family behavior, hardware-specific exceptions, firmware prerequisites, and out-of-scope features are explicit | ✅ Satisfied as the docs stand (`README` install/theme notes, accepted non-gates, stretch/out-of-scope, and 08/10 known partials) | +| Rollback | The one-file `dmenu.bin` removal path and old-style-theme prerequisite are present in release instructions | ✅ Satisfied (`skeleton/BASE/README.txt`) | ## Accepted behavior and non-gates @@ -88,22 +95,28 @@ These are settled decisions, not unfinished stage work. | Item | Test evidence | Decision | |---|---|---| | AirPods do not always auto-connect | [AUDIO-04](08-testing-status.md#audio) | AirPods may prefer a nearby paired iPhone/Mac. Remembered pairing plus manual Connect is the supported path | +| No automatic BT audio re-pair after sleep/wake | [AUDIO-04](08-testing-status.md#audio) / [#20](https://github.com/pvaibhav/NextUI/issues/20) | Not a supported promise; manual Connect remains the path. Filed for triage, not a `h700-rc8` Release blocker | | RG34XXSP POWER while lid is closed | [POWER-03](08-testing-status.md#power-sleep-and-battery) | Light sleep may wake; deep sleep re-sleeps while the lid remains closed | | Charging permits light sleep only | [POWER-04](08-testing-status.md#power-sleep-and-battery) | Shared product behavior is accepted | | FBNeo missing-BIOS hard-lock | [GAME-05](08-testing-status.md#games-and-performance) | Upstream core defect; ship as a known issue. Valid-BIOS gameplay passes | +| Long-tail EXTRAS core smoke incomplete | [GAME-06](08-testing-status.md#games-and-performance) | Maintainer covered A2600 / mGBA / SMS / Pico-8; remaining systems in [10](10-core-game-matrix.md) stay untested by the maintainer with no specific user bug reports — known, not a merge blocker | +| Two-bank RGB left stick dead | [LED-01b](08-testing-status.md#capability-boundaries) | **Accepted known bug** for the `h700-rc8` PR: dual-bank models report only the right LED changeable. Maintainer has no dual-bank test device. Upstream may merge with this open or wait for a fix; not silently treated as Pass | | Clean uninstall exercise | [BOOT-04](08-testing-status.md#boot-install-and-launcher) | Not a runtime gate; deleting the only hijack file restores stock boot by design | | Stock MU-style theme | [BOOT-05](08-testing-status.md#boot-install-and-launcher) | Install prerequisite: use old style. MU style bypasses NextUI before its code runs | | Full matrix on every H700 model | [Test rules](08-testing-status.md#status-and-evidence-rules) | Not required without a hardware/firmware delta or contrary evidence | | FN1/FN2/HOME and keep-awake-over-USB | [CAP-01, CAP-02](08-testing-status.md#capability-boundaries) | Unsupported RG XX/Brick-specific capabilities; not release promises | +| Crash-loop cutoff exercise | [BOOT-03](08-testing-status.md#boot-install-and-launcher) | Guard exists in the launcher; inducing the five-crash poweroff path is not a Release blocker for `h700-rc8` | +| Stock-launcher SIGUSR1 resilience | [ROBUST-01](08-testing-status.md#recovery-and-robustness) | Shim ignores USR1 by design; untested end to end and not a Release blocker for `h700-rc8` | +| Dirty-card recovery exercise | [ROBUST-02](08-testing-status.md#recovery-and-robustness) | Boot fsck/repair path exists; untested end to end and not a Release blocker for `h700-rc8` | ## Deferred from Beta to RC -| Work | Test | Reason | -|---|---|---| -| Crash-loop cutoff | [BOOT-03](08-testing-status.md#boot-install-and-launcher) | The five-crash poweroff guard exists in code; inducing and observing the full sequence belongs in release qualification | -| Stock-launcher signal resilience | [ROBUST-01](08-testing-status.md#recovery-and-robustness) | The ignore-signal guard exists; end-to-end service-stop behavior belongs in release qualification | -| Dirty-card recovery | [ROBUST-02](08-testing-status.md#recovery-and-robustness) | Code exists; induced recovery test belongs in release qualification | -| Final cross-platform candidate build | [BUILD-02](08-testing-status.md#build-and-binary-compatibility) | Must be executed against each artifact being promoted, not treated as a one-time feature result | +All former recovery deferrals ([BOOT-03](08-testing-status.md#boot-install-and-launcher), +[ROBUST-01](08-testing-status.md#recovery-and-robustness), +[ROBUST-02](08-testing-status.md#recovery-and-robustness)) and the cross-platform +build check ([BUILD-02](08-testing-status.md#build-and-binary-compatibility)) are +resolved for `h700-rc8`: BUILD-02 passed; the recovery rows are accepted non-gates. +See [Accepted behavior and non-gates](#accepted-behavior-and-non-gates). ## Future hardening @@ -112,24 +125,26 @@ evidence turns one into a supported-baseline defect. | Work | Evidence / next result needed | |---|---| -| Overnight drain comparison | Extend [POWER-06](08-testing-status.md#power-sleep-and-battery) with `voltage_now` and a stock-OS baseline | | Battery UI consistency | Reproduce the top-bar versus Battery-pak desynchronization noted in POWER-05 | -| Bluetooth soak | Longer suspend/resume, device-switch, and game-switch cycles beyond the passing AUDIO-04 path | +| Bluetooth soak | Longer suspend/resume, device-switch, and game-switch cycles beyond the passing AUDIO-04 path; triage [#20](https://github.com/pvaibhav/NextUI/issues/20) (no auto re-pair after sleep) | | Controller normalization | Fix and retest [INPUT-06](08-testing-status.md#input-and-controllers) across tg5040/tg5050/H700 | +| TrimUI LedControl persistence | [BUILD-02](08-testing-status.md#build-and-binary-compatibility) / [#23](https://github.com/pvaibhav/NextUI/issues/23) — settings do not stick on tg5040 with the shared `h700-rc8` lineage; not an H700 LED failure | | Bluetooth audio-link detection | Distinguish A2DP from controller-only ACL links before applying sample-rate policy | -| Long-tail core coverage | Expand [GAME-06](08-testing-status.md#games-and-performance) and the matrix in [10](10-core-game-matrix.md) | -| RGcubexx depth | Expand [DEV-04](08-testing-status.md#applications-and-device-specific-hardware) from community UI scaling to functional/core coverage | -| Additional model strings | Confirm RG35XX-family and RG40XXH `RGXX_MODEL` values on hardware | +| Long-tail core coverage | Expand [GAME-06](08-testing-status.md#games-and-performance) and the matrix in [10](10-core-game-matrix.md) — known incomplete, not a merge blocker | +| RGcubexx deeper functional/core walk | [DEV-04](08-testing-status.md#applications-and-device-specific-hardware) UI/10-row layout is Pass; optional broader core coverage on cube remains post-merge | +| Two-bank LED bank order | [LED-01b](08-testing-status.md#capability-boundaries) — accepted known bug (left LED unchangeable on dual-bank reports); fix when a dual-bank device is available or a remote repro lands. Upstream may hold the merge on this | +| Additional model strings | Confirm remaining RG35XX-family `RGXX_MODEL` values on hardware (`RG40xxH` / `RGSP` / etc. already confirmed from firmware) | ## Enhancements | Enhancement | Scope | |---|---| | H700 overlay packs | Ship useful overlays for 640×480, 720×480, and 720×720 logical output. Target Beta if tested packs are ready; otherwise ship after Release. This is not a Beta gate because the rendering pipeline already passes DISP-05 | -| Per-panel DisplayCal defaults | Measure panels and replace the neutral presets | +| Per-panel DisplayCal defaults | Partly done: RG28XX, RG34XXSP, RG SP, and RG40XXV ship calibrated enabled presets. Remaining H700 models stay neutral until measured | | Headphone UI | Optional HP icon and independent headphone volume; hardware routing already passes AUDIO-03 | | Richer battery metrics | Add voltage, charge-counter, and time-to-empty data to the battery model | -| Broader per-game tuning | Extend the planned Beta per-model defaults only where a core or title demonstrably needs a narrower override | +| Broader per-game tuning | Extend the planned post-merge per-model defaults only where a core or title demonstrably needs a narrower override | +| Per-model out-of-box defaults | Post-merge: shader / emulator / frontend defaults per H700 model (not a `h700-rc8` merge blocker) | | 720×480 Files density | Evaluate PPU 3; PPU 2 already passes APP-01 | ## Stretch goals and out-of-scope work @@ -144,11 +159,9 @@ evidence turns one into a supported-baseline defect. ## Next actions -1. Validate PERF-05 on hardware and record the result in 08. -2. Define, test, and ship the per-model shader/emulator/frontend defaults planned for Beta. -3. Build the Beta artifact and record BUILD-01, BUILD-02, and BUILD-03 against it. -4. Publish Beta with the accepted behaviors and support boundary above. -5. Triage Beta findings against the blocker definition; add new evidence to 08 rather - than duplicating it here. -6. Before RC, close BOOT-03 and ROBUST-01/02 and run the packaged regression smoke. -7. Promote RC to Release only after the final-artifact and documentation gates pass. +1. Open the upstream merge PR from the `h700-rc8` golden master (rebased on the + NextUI v6.14.0 commit so RetroAchievements behave correctly). +2. Keep post-merge follow-ups in Future hardening / Enhancements (per-model defaults, + long-tail cores, [#20](https://github.com/pvaibhav/NextUI/issues/20), + [#23](https://github.com/pvaibhav/NextUI/issues/23), remaining LED fleet gaps). +3. After merge, promote documentation and tags to the published Release baseline. diff --git a/docs/h700-port/10-core-game-matrix.md b/docs/h700-port/10-core-game-matrix.md index c0fc54d24..d506384bb 100644 --- a/docs/h700-port/10-core-game-matrix.md +++ b/docs/h700-port/10-core-game-matrix.md @@ -32,7 +32,7 @@ repeated for that system. | SFC | Snes9x | ✅ | Launch and gameplay perfect | | MD | PicoDrive | ✅ | Launch and gameplay good. Former Auto CPU slowdown (some shader/scale combos stuck near 480 MHz) is fixed — user-verified 2026-07-20 | | FBN | FBNeo | ⚠️ | With required BIOS: launch and play OK (2026-07-20). Without BIOS: MinArch hard-locks (no menu/exit; power cycle required). The upstream FBNeo error path does not poll frontend input. Track upstream. | -| PS | PCSX-ReARMed | ✅ | Launch and gameplay pass after a clean core rebuild. The earlier crashes across 2–3 titles were caused by a stale/corrupted core, not a model-specific runtime defect | +| PS | PCSX-ReARMed | ✅ | Launch and gameplay pass after a clean core rebuild. The earlier crashes across 2–3 titles were caused by a stale/corrupted core, not a model-specific runtime defect. H700 `PS.pak/default.cfg` binds L3/R3 for DualShock stick clicks | | 32X | PicoDrive | ⬜ | — | | A2600 | Stella 2014 | ✅ | Launch and gameplay pass (2026-07-20) | | A5200 | a5200 | ⬜ | — | @@ -48,7 +48,7 @@ repeated for that system. | MSX | blueMSX | ⬜ | — | | NGP | RACE | ⬜ | — | | NGPC | RACE | ⬜ | — | -| P8 | Fake-08 | ⬜ | — | +| P8 | Fake-08 | ✅ | Launch and gameplay pass (maintainer-tested) | | PCE | Mednafen PCE Fast | ⬜ | — | | PET | VICE xpet | ⬜ | — | | PKM | PokeMini | ⬜ | — | diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md index 6d90eaade..2556b348d 100644 --- a/docs/h700-port/README.md +++ b/docs/h700-port/README.md @@ -4,8 +4,9 @@ the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top of the stock Anbernic OS*, no reflash, fully reversible. -**Lifecycle:** preparing the Beta candidate. See [09](09-roadmap.md) for stage gates -and [08](08-testing-status.md) for current evidence. +**Lifecycle:** `h700-rc8` is golden master — the build intended for the upstream merge +PR. See [09](09-roadmap.md) for stage gates and [08](08-testing-status.md) for +current evidence. This directory is the H700 maintainer knowledge base. Documents 00–07 record durable facts, architecture, decisions, rationale, failure analysis, diagnostics, and lessons From e7b9e1935da50ddac7d27f99b294f973796dfeec Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sat, 15 Aug 2026 18:54:23 +0200 Subject: [PATCH 74/76] docs(h700): pull the H700 docs out of the tree They live on the wiki now. --- docs/h700-port/00-device-facts.md | 299 ----------------------- docs/h700-port/01-toolchain-and-build.md | 180 -------------- docs/h700-port/02-boot-and-installer.md | 151 ------------ docs/h700-port/03-platform-layer.md | 243 ------------------ docs/h700-port/04-video-display.md | 241 ------------------ docs/h700-port/05-audio.md | 115 --------- docs/h700-port/06-power-sleep-battery.md | 210 ---------------- docs/h700-port/07-wifi-bluetooth.md | 91 ------- docs/h700-port/08-testing-status.md | 178 -------------- docs/h700-port/09-roadmap.md | 167 ------------- docs/h700-port/10-core-game-matrix.md | 64 ----- docs/h700-port/README.md | 77 ------ 12 files changed, 2016 deletions(-) delete mode 100644 docs/h700-port/00-device-facts.md delete mode 100644 docs/h700-port/01-toolchain-and-build.md delete mode 100644 docs/h700-port/02-boot-and-installer.md delete mode 100644 docs/h700-port/03-platform-layer.md delete mode 100644 docs/h700-port/04-video-display.md delete mode 100644 docs/h700-port/05-audio.md delete mode 100644 docs/h700-port/06-power-sleep-battery.md delete mode 100644 docs/h700-port/07-wifi-bluetooth.md delete mode 100644 docs/h700-port/08-testing-status.md delete mode 100644 docs/h700-port/09-roadmap.md delete mode 100644 docs/h700-port/10-core-game-matrix.md delete mode 100644 docs/h700-port/README.md diff --git a/docs/h700-port/00-device-facts.md b/docs/h700-port/00-device-facts.md deleted file mode 100644 index c1884213f..000000000 --- a/docs/h700-port/00-device-facts.md +++ /dev/null @@ -1,299 +0,0 @@ -# 00 — Device & OS Facts - -Ground truth and probe notebook for the H700 platform. Current pass/fail results live -in [08](08-testing-status.md); release decisions live in [09](09-roadmap.md). -Everything here was verified live on hardware -over SSH (probed 2026-07-08, corrections folded in from the implementation/review -cycle through 2026-07-10) or recovered from git history. Re-run the probes after any -Anbernic stock-firmware update — paths have historically been stable, but the -`dmenu_ln`/muOS hooks are stockmod-version-dependent. - -## Devices - -| Device | Evidence | Role | -|---|---|---| -| TrimUI Brick (TG5040, A133P) | Probed live | Reference — NextUI runs perfectly | -| Anbernic RG40XXV (H700) | Probed live | 640×480, one stick, HDMI; primary probe device | -| Anbernic RG34XXSP (H700) | User-tested | 720×480, dual sticks, clamshell lid sensor | -| Anbernic RG28XX (H700) | User-tested | Rotated 480×640 panel | -| Anbernic RG SP (H700) | Firmware-analysed | 720×480, **no** sticks; RG34XXSP hardware minus the sticks | - -### RG SP vs RG34XXSP - -Established by comparing the stock `2026-07-27 ANBERNIC RG SP TF1.img` against both -the RG34XXSP stock and StockMod images. The two devices are near-identical: same -DRAM type (boot0 differs by 11 bytes of parameter block), same kernel size to the -byte, and `mali_kbase`/`8821cs`/`rtl_btlpm` with byte-identical `.text`. - -The entire device-tree difference is 34 lines: - -| Change | Meaning | -|---|---| -| `lcd_*` **unchanged** — `lcd_driver_name = "rg34xxsp_v1"`, 720×480, identical timings | same panel; DTB fingerprint `26-820-536`, the `34xx` entry in the panel-fix table below | -| `pmu_battery_cap` `0xce4` → `0xdac` | 3300 → 3500 mAh | -| `keyL3`/`keyR3` removed; `amux-en-gpios`, `A0_gpio`, `A1_gpio`, `adc-en-gpios` removed | no analog sticks | -| GPADC `status` `okay` → `disabled`, five unused `key0..4_vol/val` added | stick ADC turned off | - -⚠ **The stock `bootlogo.bmp` is 640×480 on a 720×480 panel — on the RG34XXSP too.** -It is a stock packaging quirk, not evidence about the panel; StockMod replaces it -with a correct 720×480 image. Do not treat the vendor bootlogo as a geometry source. - -## RG40XXV (H700) — probed live - -### SoC / kernel / userland -- SoC: Allwinner H700, device-tree compatible: `allwinner,h616`, `arm,sun50iw9p1` -- `/proc/device-tree/model`: `sun50iw9` -- Kernel: `Linux ANBERNIC 4.9.170 #16 SMP PREEMPT aarch64` (built 2026-05-21) -- Userland: **Ubuntu 22.04 (Jammy) arm64, glibc 2.35** — full apt-capable distro, - systemd, sshd out of the box. **`/bin/sh` is dash, not bash** — pak/launch scripts - must be POSIX (`&>` silently backgrounds under dash; this broke game launch once). -- RAM: 1 GB (`MemTotal: 996628 kB`) -- CPU: 4× Cortex-A53 (`CPU part 0xd03`), cpufreq 480 MHz – 1.512 GHz, single cluster - - governors: `interactive conservative ondemand userspace powersave performance schedutil` - - policy path: `/sys/devices/system/cpu/cpu0/cpufreq/` -- Thermal zones (`/sys/class/thermal/thermal_zone*/type`): - **zone0=cpu, zone1=gpu, zone2=ve, zone3=ddr, zone4=battery** - (a first-draft platform.c read zone2 for GPU — wrong; it's the video engine) - -### Display -- `/dev/fb0`: 640×480 (virtual_size `640,480`); modes list includes `U:1280x1024p-59`, `U:640x480p-75`, `U:640x480p-59` (HDMI modes appear here) -- Allwinner **disp2** driver: `/dev/disp` char device present -- `/sys/class/disp/disp/attr/` contains: `color_temperature`, `enhance_bright`, `enhance_contrast`, `enhance_saturation`, `enhance_mode`, `xres`, `yres`, … — near-identical attribute set to TG5040 (same disp2 driver family). ⚠ `color_temperature` works; the `enhance_*` attrs accept writes but have **no visible effect** on RG XX panels (unlike tg5040) -- **No `/sys/class/backlight`** — brightness via `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS` (0x102), args `{0, raw 0-255, 0, 0}`. Confirmed working in the shipped port (level curve in 03). There is also a `brightness` file under the AXP battery sysfs used by the stock `brightCtrl.bin` daemon — we kill that daemon at launch. -- Gamma LUT ioctls `DISP_LCD_SET_GAMMA_TABLE (0x10b)` / `GAMMA_CORRECTION_ENABLE (0x10c)` / `DISABLE (0x10d)` — **confirmed working**: displaycal RGB gains visibly act, persist, and survive sleep + game launch on RG40XXV. -- Boot arg: `lcd_type=boe` (panel vendor in cmdline — may vary per unit) -- HDMI hotplug: `/sys/class/extcon/hdmi/` (extcon0); `state` and `cable.0/state` both probed by the shipped `GetHDMI()`. - -### GPU — fully verified ✔ -- Mali-G31 MP2 ("bifrost"), kernel module `mali_kbase` **r20p0-01rel0 (UK 11.17)**, `/dev/mali0` -- Vendor blob: monolithic `/usr/lib/libmali.so.0.20.0` (19 MB) — **ELF 64-bit aarch64**; - `libEGL.so.1.4.0` / `libGLESv2.so.2.1.0` / `libGLESv1_CM.so` are 4 KB 64-bit shims over it -- Blob version string: **`OpenGL ES 3.2 v1.r20p0-01rel0`** — userspace r20p0 matches kernel kbase r20p0 ✔ -- Blob EGL winsys = **fbdev** (`mali_egl_winsys_fbdev.c` paths in binary) — what the SDL mali-fbdev backend targets. Confirmed end-to-end: NextUI's full GLES 3 shader pipeline (shaders, overlays, effects) runs on it. -- Stock `/usr/lib/libSDL2-2.0.so.0.12.0` is 64-bit, built with only the `mali` + `dummy` video drivers — the stock OS itself uses the SDL-on-mali-fbdev stack. -- **Do not link GLES via the tg5040 SDK's `glesv2` pkg-config** — it drags in libUMP (Utgard-era, absent on Mali-G31 stock). Link `-lGLESv2 -lEGL` directly. -- Mesa copies under `/usr/lib/aarch64-linux-gnu/` are irrelevant on the 4.9 kernel (no DRM). - -### Audio -- ALSA cards: `0 audiocodec` (speaker/lineout/headphone), `1 ahubdam`, `2 ahubhdmi` (HDMI audio) -- amixer simple controls on card 0: `'digital volume'`, `'lineout volume'`, `'LINEOUT'`, `'SPK'`, `'OutputL/R Mixer DACL/R'`, `'tx hub mode'` -- `digital volume` is an **attenuator with a reversed scale** (range 0–63; larger raw value = quieter). The shipped msettings writes `100 - val` percent — confirmed correct by listening on device. Volume control has no known issues on RG40XXV or RG34XXSP; the UI and audible levels are correct from mute through 100%. -- Codec supports 48000/44100 natively. -- **Stock libasound quirk (critical):** the device's `/usr/lib/libasound.so` exports both - versioned symbols and legacy unversioned `ALSA_0.9` value-semantic `snd_pcm_hw_params_set_*` - symbols. A binary cross-built against a libasound *without* symbol versioning (the tg5040 - SDK's) resolves the unversioned variants at load time → `set_rate_near` behaves like the - 0.9 API and clamped the codec to 192 kHz while SDL believed 32.768 kHz → sliced/glitchy - audio. Fix: build SDL2 with `--enable-alsa-shared` so it **dlopens** the device libasound - (dlsym picks the default/new-API symbols). See 05. -- Headphone jack: the codec/hardware auto-mutes the speaker and routes audio without - NextUI. The old `snd_soc_sunxi_component_jack/parameters/jack_state` software path - was historically always 0 and remains unused; see 05. - -### Input -- `event0` — `axp2202-pek` (power button, PMIC). KEY_POWER = 116. -- `event1` — `ANBERNIC-keys` (gpio-keys-polled): handlers `kbd js0 event1` - - KEY bits: {1, 114, 115, 304–316, 354} — **no d-pad keycodes**; the d-pad is delivered - as ABS_HAT0X/Y (the old port's UP 103 / DOWN 108 / LEFT 105 / RIGHT 106 codes do - **not** appear on current firmware) - - ABS bits `0x3003c` = ABS_Z, ABS_RX, ABS_RY, ABS_RZ (analog sticks; H700 scales - the signed values by ×32767/4096) + ABS_HAT0X/Y (d-pad) - - FF bits present (input-FF rumble is theoretically available; port uses `moto` sysfs instead) -- `event2` — `dierct-keys-polled` (volume keys: PLUS 115, MINUS 114) -- `/dev/input/js0` exists. The in-tree SDL patch restores no-udev classification of - the built-in pad, but the H700 platform deliberately skips it as an SDL joystick: - raw evdev already supplies those events, and SDL's built-in ordering does not match - the external-pad `JOY_*` mapping. SDL joystick input remains enabled for external - controllers (`SDL_JOYSTICK_DISABLE_UDEV=1`). -- Verified evdev button codes (event1): A 304, B 305, Y 306, X 307, L1 308, R1 309, - SELECT 310, START 311, MENU 312, L3 313, L2 314, R2 315, R3 316, - PLUS 115, MINUS 114. -- **MENU emits a compound sequence on short taps** (verified via evtest on RG34XXSP, - likely all RG XX H700 models): 312 down at press, 312 up at release, then a - synthetic 354 (`KEY_GOTO`) down at the same instant as the 312 up, 354 up ~190 ms - later. On a long hold, only 312 fires (down/up, no 354). So 312 tracks the physical - button; 354 is a firmware "tap detected" pulse and **must not be mapped to - BTN_MENU** — doing so extends every tap past the 250 ms long-press threshold - (tap misread as hold → brightness overlay instead of shortcuts). The extra - KEY_ESC (code 1) capability bit has not been observed to fire. -- After the no-udev classification patch, SDL orders the built-in pad by evdev key - code: ESC/VOL−/VOL+ occupy indices 0–2 and the gamepad cluster starts at A=3 - through MENU=11. This ordering is diagnostic only; the runtime skips this SDL - device and reads it through evdev. The `JOY_*` constants in `platform.h` describe - the expected external-pad mapping, not the built-in pad. -- `evtest` is available on the device for mapping discovery. - -### Power / battery / sleep -- `/sys/power/state`: **`freeze mem`** — real suspend-to-RAM (same as TG5040) -- `echo mem` suspend works; wake source is the **power button** (AXP2202 PEK). - **RTC alarm wake does NOT fire** — no timed wake; don't build features on it. - The shipped sleep/wake path is reliable in repeated RG40XXV/RG34XXSP testing, - including in-game resume and power-off auto-resume. On RG34XXSP, POWER can wake - light sleep while the lid is closed; deep sleep re-sleeps if the lid remains closed - (06). Charging intentionally prevents deep sleep in shared code. -- PMIC: **AXP2202** — `/sys/class/power_supply/axp2202-battery/` and `axp2202-usb/` -- Battery: `capacity`, `status`, `voltage_now`, `temp`, `time_to_empty_now`, - `time_to_full_now`, `charge_counter`, `health` -- Anbernic kernel extras under `axp2202-battery/`: - - `moto` — rumble motor (write 1/0) — **confirmed working** - - `work_led` — small power-indicator LED, next to the charge LED. Present on every - H700 model, unrelated to the RGB stick LEDs. **Polarity is `0=off, 1=on`** — an - earlier note here had it backwards. Verified the same way on RG40XXV and RG28XX: - the LED is lit through stock boot and goes out as soon as NextUI's `launch.sh` - writes `0`. Plugging in USB lights it independently of any of this. - The port writes `0` on wake and `1` on sleep (`PLAT_enableBacklight`), so in - practice the LED marks *sleep*, not power. That is inherited from the old - rg35xxplus port, is the same across models, and is deliberate — don't "correct" - the polarity of those writes on the strength of the old comment. - - `workled_sleep` — LED behavior during sleep - - `lowpwr_led`, `led_test` - - `mcu_pwr` — power rail for the RGB LED MCU (write 1 to enable). See "RGB LEDs" below. - - `hallkey` — lid/hall sensor (RG34XXSP only; absent on RG40XXV) — polarity verified - (`1` = open); lid close sleeps and lid open wakes screen-off. Deep suspend still - requires power. POWER can wake light sleep while closed; deep sleep re-sleeps if - the lid remains closed (06). - - `brightness`, `display_id` (panel variant id), `spk_state`, `mcu_esckey`, `nds_esckey`, `boot_mode` -- `/sys/class/pwm/pwmchip0` exists (alternative rumble path; `moto` is simpler) - -### RGB LEDs - -Only three models have them: **RG40XX H, RG40XX V, RG CubeXX** (the same three muOS -flags with `device//config/led/rgb = 1`; every other RG XX is `0`). - -An early probe concluded RG XX had no RGB LEDs. That was wrong. They are not exposed -as LED-class devices — on an RG40XXV `/sys/class/leds` is empty, there is no -`led_anim` driver (TrimUI only), and the device tree has no LED node. They hang off a -**separate MCU reached over UART5**: - -- `/dev/ttyS5`, 115200 8N1 raw (`uart@05001400`; char 248,5 — verified present) -- `/sys/class/power_supply/axp2202-battery/mcu_pwr` must be `1` to power the MCU -- Frame: ` `, checksum = `sum(preceding) & 0xFF`, - written as raw bytes. Brightness is one byte for the whole strip (0-255). - - mode 1 solid — payload 8x(R,G,B) for one bank then 8x(R,G,B) for the other - (16 positions in two banks of 8); the only mode with per-bank colour - - mode 2/3/4 breath fast/med/slow — payload 16x(R,G,B), one colour for all - - mode 5/6 rainbow mono/multi — payload `<1> <1> ` -- The MCU animates on its own, so there is no userspace animation in the port — - effect ids are translated onto these modes in `workspace/h700/platform/led.c`. -- Protocol source: muOS `MustardOS/internal`, `script/device/rgb.sh` (SERIAL backend). - -### Network / Bluetooth -- WiFi: RTL8821CS (SDIO), module `8821cs`; interfaces `wlan0` (+`wlan1` virtual); - `/sys/class/net/wlan0/operstate` for link state -- Stock runs wpa_supplicant (`-u -s` dbus mode) + NetworkManager + dnsmasq — the port - stops NetworkManager and owns its own wpa_supplicant instance (07) -- **WiFi does not recover on its own after `mem` suspend** — confirmed; the suspend - script bounces it on resume (06/07) -- Bluetooth: `rtl_btlpm` module and stock BlueZ (5.66 on clean 2026 RG40XXV; - 5.64 was observed on earlier firmware). The stock frontend normally runs - `rtk_hciattach -n -s 115200 ttyS1 rtk_h5`, but NextUI replaces that frontend - before it performs the attach, so the H700 init script must invoke the vendor - `setBluetooth.sh` path itself. -- The clean 2026 RG40XXV image contains BlueALSA 4.2.0, its ALSA PCM/control - plugins, ALSA configuration, and D-Bus policy, contrary to the earlier probe - recorded here. Its `a2dp-source` profile successfully registers SBC media - endpoints with stock BlueZ. NextUI uses these stock components directly and does - not bundle or replace BlueALSA, its ALSA plugins, SBC, or BlueZ. Ubuntu has no - `udhcpc` (DHCP = `dhclient`). - -### Storage & partitions (TF1 = the stock OS card) -``` -mmcblk0p1..4 special/boot-resource/env/boot (u-boot, kernel, DTB…) -mmcblk0p5 → / ext4 (Ubuntu rootfs) -mmcblk0p6 → /mnt/vendor ext4 (stock frontend, emulators, libs) -mmcblk0p7 → /mnt/data ext4 (also used as swap by loadapp.sh) -mmcblk0p8 → /mnt/mmc vfat (ROMs partition — user-visible FAT32; our dmenu.bin lives here) -``` -- TF2 (second slot): `/dev/mmcblk1p1` → stock mountpoint `/mnt/sdcard`; the port - mounts it itself when needed (vfat or exfat via helper, with fsck repair — see 02) -- DTB is read raw from `/dev/mmcblk0` by the old "Panel Fix" tool (offset 17954816, magic `d00dfeed`) -- Kernel 4.9 has no native exfat; boot shim falls back through vfat → exfat → auto - -### Stock OS boot chain (THE hijack point) -systemd `launcher.service` → `/etc/init.d/launcher.sh start` → starts `brightCtrl.bin` + -`cexpert` + `/mnt/vendor/ctrl/loadapp.sh` → (swap, resize, retroarch cfg) → -`/mnt/vendor/ctrl/dmenu_ln`, which does: - -```sh -CMD="/mnt/vendor/bin/dmenu.bin" # stock fallback -MISCBIN="/mnt/mmc/dmenu.bin" # ← OUR HIJACK POINT (FAT partition!) -if [ -f "/mnt/vendor/muos1.ini" ]; then MISCBIN="/mnt/vendor/bin/muos1.bin"; fi # stockmod! -if [ -f "/mnt/vendor/muos2.ini" ]; then MISCBIN="/mnt/vendor/bin/muos2.bin"; fi -[ -f $MISCBIN ] && CMD=$MISCBIN -... -if $CMD; then - [ -f /tmp/.next ] && sh /tmp/.next # chain-exec mechanism after CMD exits -fi -``` - -Consequences: -1. Dropping an executable named **`dmenu.bin` onto the FAT ROMs partition (`/mnt/mmc`)** - makes the stock OS run it instead of its own frontend. No reflashing. This is how the - shipped port (and old MinUI, and muOS "in-place") installs. -2. **MU-style theme caveat:** selecting stock/stockmod **MU style 1/2** drops - `muos1.ini`/`muos2.ini` under `/mnt/vendor`, which *override* the - `/mnt/mmc/dmenu.bin` check so the MU frontend runs instead. NextUI never starts - and cannot show a warning from that path. Install requires stock **old style** - theme (documented in `skeleton/BASE/README.txt`; see 02). -3. `/tmp/.next` chain-exec exists in the stock wrapper; NextUI runs its own launch loop. -4. `launcher.sh stop` kills via `SIGUSR1 dmenu.bin` — the shim `trap`s USR1. -5. Model detection: `strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG` → `RGXX_MODEL` - env — **confirmed working on 2026 firmware** (RG40XXV). Fallback detectors if it ever - breaks: fb0 mode `480x640` → 28xx, `xres/yres` in /sys/class/disp, - `axp2202-battery/display_id`, DTB lcd timings. - - Strings read straight out of the vendor `dmenu.bin` in each firmware's `appfs` - (p6, the partition mounted at `/mnt/vendor`): **`RGSP`**, `RG34xx`, `RG40xxH`. - ⚠ The RG SP's is a bare **`RGSP`** — no `xx` — so it matches none of the - `RG34xx*`/`RG40xx*` family globs in launch.sh and needs its own case. Before that - case existed it hit the `*) DEVICE="rg40xx"` fallback and NextUI drew the UI at - 640×480 on a 720×480 panel, which is the "4:3 instead of 3:2" symptom users saw. - -## TG5040 (reference) — probed live -- Kernel `4.9.191 aarch64` (TinaLinux/OpenWRT-flavored), **glibc 2.33** -- `/sys/power/state`: `freeze mem`; same disp2 attrs incl. `color_temperature`; - also no `/sys/class/backlight` -- NextUI install: `/mnt/SDCARD/.system/tg5040/{bin,lib,cores,paks,shaders,etc}`. - **SDL2 comes from the stock OS there** — on H700 we bundle our own (04). - -## glibc compatibility conclusion - -| | kernel | arch | glibc | -|---|---|---|---| -| TG5040 | 4.9.191 | aarch64 | 2.33 | -| H700 stock | 4.9.170 | aarch64 | **2.35** | - -h700-toolchain-built binaries (GCC 8.3, glibc ≤ 2.33 from the TG5040 SDK sysroot, -aarch64, cortex-a53) load and run on the H700 stock OS unmodified — proven in -production by this port (first via the shared tg5040 image, now via dedicated -`h700-toolchain`). No ABI wall. (Caveat discovered the hard way: libc compatibility -is not the whole story — see the libasound symbol-versioning and libpng12 pitfalls in 01.) - -## Old rg35xxplus port — git archaeology summary - -- Last full commit at its canonical path: **`8cd78866`** - (`git show 8cd78866:workspace/rg35xxplus/`). Renamed to `workspace/_unmaintained/` - in `fc9a5f3a`, deleted in `57e53bbe`. -- Was **32-bit** (`arm-buildroot-linux-gnueabihf`), toolchain `LoveRetro/rg35xxplus-toolchain`; - custom SDL2 2.28.5 from `JohnnyonFlame/SDL-malifbdev-rot` (the same repo the new port uses, rebuilt 64-bit) -- Its sysfs inventory was the hardware-paths reference for this port; everything relevant - is re-verified and captured above. Remaining old-port material of interest: - - Panel geometry per model: default (RG35XX+/H/SP, RG40XX*) 640×480; RG34xx 720×480; - RGcubexx 720×720 (only overscan-capable device); RG28XX physically 480×640 portrait - - Panel-fix DTB timing table (SKU fingerprints, `lcd_dclk_freq-lcd_ht-lcd_vt`): - `24-770-526`=35xx2024/Plus, `24-770-528`=35xxH, `24-586-686`=28xx, `24-770-525`=35xxSP, - `24-770-522`=40xxH, `36-812-756`=CubeXX, `26-820-536`=34xx - - HDMI machinery: `hdmimon.sh` via `/sys/kernel/debug/dispdbg` + `fbset` - (`git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`) -- Scope note: the old port is a hardware-paths reference only; its software architecture - (SDL_Renderer compositing, 32-bit, pre-shader APIs) is obsolete. tg5040 was the code - clone base. - -## Known hardware unknowns - -1. Real panel refresh rate — `SCREEN_FPS 60.0` is assumed, never measured. -2. Exact stock `RGXX_MODEL` strings for the RG35XX family. (RG40XXH is now - confirmed as `RG40xxH`, read from its StockMod `dmenu.bin`.) -3. RG SP support is derived entirely from firmware analysis — never run on the - hardware. Panel geometry, stickless input, and the calibrated displaycal - preset all need confirming on a real unit. diff --git a/docs/h700-port/01-toolchain-and-build.md b/docs/h700-port/01-toolchain-and-build.md deleted file mode 100644 index 754993ec5..000000000 --- a/docs/h700-port/01-toolchain-and-build.md +++ /dev/null @@ -1,180 +0,0 @@ -# 01 — Toolchain & Build System - -Build architecture, dependency decisions, and cross-toolchain lessons. Test results -live in [08](08-testing-status.md); promotion requirements live in -[09](09-roadmap.md). - -## How the h700 build works - -The CI-supported single-platform staging sequence is `make setup` followed by -`make h700`. (`make all` builds every configured platform; adding `PLATFORM=h700` -does not narrow it.) H700 builds inside the dedicated -**`ghcr.io/loveretro/h700-toolchain`** image (`LoveRetro/h700-toolchain`). Same arch -(aarch64/cortex-a53), same `-mcpu=cortex-a53` tuning, and the image's glibc (2.33, -via the TG5040 SDK sysroot) is older than the target's (Ubuntu 22.04, glibc 2.35) — -forward-compatible by construction. This was empirically validated early in the port -(a cross-built displaycal.elf ran unmodified on RG40XXV stockmod and an RG34XXSP -running Knulli) and has held up in production. The image is a sibling of -`tg5040-toolchain` (same GCC 8.3 + SDK recipe) with its own GHCR lifecycle so H700 -no longer shares the tg5040 container tag. - -Integration points: -- Root `makefile`: `PLATFORMS = tg5050 tg5040 h700`; the `make h700` dispatcher runs - the full `common` staging target for H700, while `make shell` passes - `PLATFORM=$(PLATFORM)` through (and `makefile.toolchain` injects - `-e PLATFORM -e UNION_PLATFORM` into the container). -- `makefile.toolchain`: `PLATFORM=h700` → clone `toolchains/h700-toolchain/`, image - `ghcr.io/loveretro/h700-toolchain:latest` (same pattern as tg5040/tg5050; no remap). -- `workspace/h700/platform/makefile.env`: tg5040-derived flags (`-mcpu=cortex-a53`, - `SDL = SDL2`, `GL = GLES`), with the in-tree SDL2 prefix first in include/lib order. -- `workspace/h700/makefile`: platform-local `early` stages prebaked SDL2 from the - image and builds other deps (NextCommander, boot shim) before the apps. -- The full tg5040 core list (28 cores + patches) builds unchanged — same arch, same tuning. - -### Never pass the platform as a `make` argument to the guest build - -See the note above the `build` target in `makefile.toolchain`. A command-line variable is -recorded in `MAKEOVERRIDES` and overrides same-named assignments in *every* recursive -make, including the `PLATFORM = libretro` that picodrive and pcsx_rearmed set in their -picoarch-derived build system. Their libretro frontend objects then never reach `OBJS`, -and because the link uses `-flto`, a version script that keeps only `retro_*` global, -and `--gc-sections`, nothing is reachable: the linker emits a ~10KB stub that segfaults -as soon as minarch resolves `retro_init`. Upstream is unaffected — it invokes a bare -`make` in the container and lets `UNION_PLATFORM` flow through the environment, where a -makefile assignment still wins. The h700 branch introduced the command-line form in -`d4fc5b51`, which broke picodrive (worked around per-core in `04a1d62d`) and shipped a -stub PS1 core for h700, tg5040, and tg5050 in the 20260720 and 20260724 builds -([#19](https://github.com/pvaibhav/NextUI/issues/19)). The guest invocations now match -upstream and the per-core workarounds are gone. - -A stub core is silent — it links, installs, and only fails when minarch resolves -`retro_init` — so if a core is ever suspected, check it directly rather than by size: - -``` -nm -D workspace//cores/output/_libretro.so | grep retro_api_version -``` - -### Prebaked SDL2 (h700-toolchain `PREFIX_LOCAL`) -On tg5040 the stock OS supplies runtime SDL2; on H700 we ship our own. The -**h700-toolchain** image builds **`JohnnyonFlame/SDL-malifbdev-rot`** (commit -`d4a7d7503524cc469fe775242f3f925d4dd56c88` + `support/sdl2-h700.patch`) into -`PREFIX_LOCAL=/opt/nextui`. NextUI's `early` target only stages those libs (plus -SDK `SDL2_image`/`ttf`, tinyalsa, libpng12) into `other/sdl2/output` for packaging. -`makefile.env` still prefers `PREFIX_LOCAL` for includes/libs/pkg-config. - -Configure highlights (see `h700-toolchain/support/build-sdl2.sh`): - -- `--enable-video-mali --enable-video-opengles`, x11/wayland/kmsdrm disabled. - The build **asserts `#define SDL_VIDEO_DRIVER_MALI 1` in the generated - `SDL_config.h`** right after configure — a silent fallback to the dummy driver - produces a black screen much later, so fail fast here. -- `--enable-alsa --enable-alsa-shared` — ALSA loaded via **dlopen at runtime**, not - direct-linked. This is load-bearing, not an optimization (see pitfall #1 below). -- `--enable-loadso --enable-filesystem` — loadso is required for GL context creation - and for alsa-shared/image-shared dlopen to work at all. (An early draft disabled - both; don't.) -- No udev (`SDL_JOYSTICK_DISABLE_UDEV=1` is also exported at runtime — see 03). -- **`support/sdl2-h700.patch`** (in h700-toolchain) restores joystick classification - via `BTN_GAMEPAD` / `BTN_JOYSTICK` (the fork's Batocera patches removed heuristics - in favor of udev). - -### Runtime library bundling (`platform/makefile.copy`) -Bundle into `.system/h700/lib` only what the stock OS lacks or can't be trusted for: -`libSDL2*` (our custom build + matching SDL2_image/ttf), `libtinyalsa.so*`, -`libpng12.so*` (see pitfall #2). **Deliberately not bundled:** `libasound` -(dlopened from the device — bundling the SDK's copy caused the audio bug) and -`libUMP` (doesn't exist on Mali-G31 systems; an early build bundled it by cargo-cult). -Rule of thumb: `ldd` every shipped .elf against a clean stock rootfs; bundle exactly -the misses, nothing more. - -The stock Anbernic OS also lacks the `curl` CLI used by NextUI's RetroAchievements -HTTP layer. The H700 build therefore builds pinned curl 8.21.0 with pinned OpenSSL -3.5.7 and musl 1.2.6 as a static aarch64 binary, verifies all source checksums and the -final linkage, and stages it at `.system/h700/bin/curl`. Using musl avoids static -glibc's runtime dependency on matching NSS modules for DNS. A private CA bundle is -staged at `.system/h700/etc/ssl/certs/ca-certificates.crt`; `launch.sh` sets -`CURL_CA_BUNDLE` to that path. Since NextUI's bin directory is first on `PATH`, this -works on stock OS without installing or replacing anything on TF1. - -CI now applies that rule to the highest-risk h700 GUI binary: -`workspace/h700/check-settings-ldd.sh` runs `ldd` for `settings.elf` in an Ubuntu -22.04/Jammy arm64 runtime with `.system/h700/lib` first, and fails on unresolved -libraries or missing gio/glib linkage. - -### Updater detection (multi-platform SD cards) -`skeleton/BOOT/common/updater` detects H700 via `grep -q sun50iw9 -/proc/device-tree/model` **before** the `*"0xd03"*` cpuinfo case — H700's cpuinfo is -indistinguishable from other A53 platforms. On Anbernic the normal boot path doesn't go -through `updater` (our dmenu.bin calls `.tmp_update/h700.sh` directly), but correct -detection prevents mis-flash if a multi-platform card moves between devices. - -## Sysroot-mismatch pitfalls (lessons for future platform ports) - -H700 originally built inside the tg5040 image and still uses that SDK as the -h700-toolchain sysroot. Cross-building against a *sibling platform's* rootfs works, -but every failure below came from exactly that gap. Check these first on any -future stock-OS port: - -1. **libasound symbol versioning → glitchy audio.** The tg5040 SDK's libasound has no - symbol versioning. Direct-linking SDL against it made the dynamic linker resolve the - *unversioned* legacy `ALSA_0.9` `snd_pcm_hw_params_set_*` symbols from the device's - (versioned) libasound at runtime. Those have value semantics instead of - pointer-in/out — `set_rate_near` silently clamped the codec to 192 kHz while SDL - believed 32.768 kHz → sliced, glitchy audio that *almost* worked. Fix: - `--enable-alsa-shared` (dlopen; dlsym always picks the default/current symbol - version). General lesson: **for libraries that exist on the target, prefer dlopen - over cross-linking whenever the SDK's copy may differ in symbol versioning.** -2. **dlopen'd deps have their own arch requirements.** SDL2_image dlopens - `libpng12.so.0`. The stock H700 OS only has a *32-bit* copy (under - `/mnt/vendor/lib`); dlopen fails silently → no PNG loading. We bundle the - toolchain's 64-bit `libpng12.so.0`. Lesson: audit not just `ldd` output but the - *dlopen list* of every shipped library (`strings *.so | grep '\.so'`). -3. **pkg-config lies across rootfs boundaries.** The tg5040 SDK's `glesv2.pc` links - libUMP (a Utgard-GPU-era dependency that doesn't exist on Mali-G31/bifrost - systems). Link `-lGLESv2 -lEGL` directly instead of trusting sibling-platform - pkg-config for GPU libs. -4. **LTO + libretro cores.** The inherited `-flto` broke picodrive: the linker plugin - dropped libretro glue objects. The h700 cores makefile disables LTO / filters - linker-plugin flags for affected cores, and pins `override PLATFORM := libretro` - for reproducible clean rebuilds. -5. **Target shell ≠ build assumptions.** Stock `/bin/sh` is **dash**. The bashism `&>` - (used throughout the tg5040 pak scripts we cloned) parses under dash as - "background the command and truncate a file named by the next word" — launch - scripts exited instantly and games bounced back to menu. All h700 pak scripts use - POSIX `> file 2>&1`. Grep any cloned script for bashisms before shipping. -6. **Shared-code makefile gates.** `workspace/all/minarch/makefile` gates features - (RetroAchievements, CHD, SRM, libsamplerate) by platform name — a new platform - must be added to those filter lists or minarch silently builds featureless (or not - at all). - -## Decision: dedicated h700-toolchain (same SDK recipe for now) - -The port first reused `tg5040-toolchain` in-process; the **pitfalls above are solved -in NextUI** (dlopen ALSA, direct GLES link, bundled libpng12). We now use a -**dedicated** `h700-toolchain` image/repo so H700 builds do not share the tg5040 -container lifecycle, while keeping the proven GCC 8.3 + TG5040 SDK sysroot. - -The image prebakes mali-fbdev SDL2 into `PREFIX_LOCAL` and does **not** rebuild -BlueZ (stock H700 BlueALSA/BlueZ at runtime — see 05 and 07). Optional later: -jammy-matched libasound in the sysroot to harden pitfall #1 further if direct -links reappear. - -## Build outputs - -After `make setup && make h700`, the staging tree contains: -- `build/SYSTEM/h700/bin/*` — nextui.elf, minarch.elf, keymon.elf, batmon.elf, audiomon.elf, - gametimectl.elf, syncsettings.elf, nextval.elf, show2.elf, settings.elf, clock, … - plus `ledcontrol.elf` and `bootlogo.elf` (both gated to tg5040/tg5050/h700; Bootlogo - ships in `EXTRAS/Tools/h700/Bootlogo.pak`), `poweroff_next`/`reboot_next`, `curl`, and - `rfkill` (h700 builds its own minimal `/dev/rfkill` ioctl tool — stock rfkill may be - absent) -- `build/SYSTEM/h700/lib/` — libmsettings.so, libbatmondb.so, libgametimedb.so, … - plus the bundled SDL2/tinyalsa/libpng12 set above -- `build/SYSTEM/h700/cores/*.so` — full tg5040-parity core list -- `build/SYSTEM/h700/shaders/` — tg5040 `.glsl` set (ES 3.0, portable) -- `build/BOOT/common/h700.sh` (installer), `build/BASE/h700/dmenu.bin` (boot shim — see 02), - NextCommander built via `patches/NextCommander-h700.patch` - -The later `make special && make package` steps rename `build/SYSTEM` to -`build/PAYLOAD/.system`, move the updater tree to `.tmp_update`, and create the -release archives. diff --git a/docs/h700-port/02-boot-and-installer.md b/docs/h700-port/02-boot-and-installer.md deleted file mode 100644 index 02a2f0293..000000000 --- a/docs/h700-port/02-boot-and-installer.md +++ /dev/null @@ -1,151 +0,0 @@ -# 02 — Boot Hijack, Installer & SD Layout - -Reference for the stock boot chain, takeover mechanism, storage policy, installer, -and runtime launcher. Current tests live in [08](08-testing-status.md); lifecycle -gates live in [09](09-roadmap.md). - -## How NextUI takes over the stock OS (no reflash, fully reversible) - -The stock launcher wrapper `/mnt/vendor/ctrl/dmenu_ln` prefers **`/mnt/mmc/dmenu.bin`** -(the FAT32 ROMs partition of the boot SD, TF1) over the built-in frontend (verified, -full chain in 00). Placing our own `dmenu.bin` there hijacks boot; deleting it restores -pure stock. This shipped as designed and is the entire install/uninstall story on TF1. -The rollback invariant is simple: when that file is absent, `dmenu_ln` cannot select -NextUI. BOOT-04 records the corresponding design inspection; 09 owns its gate policy. - -``` -stock boot: systemd launcher.service → launcher.sh → loadapp.sh → dmenu_ln - │ - /mnt/mmc/dmenu.bin exists? ───────────┤ - YES → run it (= NextUI boot shim) │ - NO → /mnt/vendor/bin/dmenu.bin (stock UI) -``` - -### Stock “MU style” theme caveat (install prerequisite) -The real hijack break is a **stock UI theme setting**, not a separate muOS install. -In stock (and stockmod) Settings, **MU style 1 / MU style 2** causes `dmenu_ln` to -prefer the MU frontend (`muos1.bin` / `muos2.bin`, gated by `/mnt/vendor/muos*.ini`) -**before** `/mnt/mmc/dmenu.bin` ever runs. Result on hardware: the device boots the -stock/MU UI normally; NextUI never starts; no splash or warning appears — our shim -is simply not executed. - -There is nothing useful to do from inside NextUI for that path. The install docs -already state the requirement (`skeleton/BASE/README.txt`): set the stock theme to -**“old style” (default)**, not MU style. The maintained decision is to document this -as an install prerequisite; a warn-or-hard-stop path cannot run before the override. - -Note: `boot/boot.sh` still has a `muos1.ini`/`muos2.ini` → “STOCK TARGET REQUIRED” -check (and `launch.sh` can drop `stockmod-warning.txt`), but that path is only -reachable if our `dmenu.bin` was already selected — which the same override prevents. -Treat the splash as defensive dead code unless stock’s `dmenu_ln` logic changes. - -## SD card layout: TF1 stays stock, NextUI lives on TF2 - -**Policy (project owner), implemented as designed:** -- TF1's only write, ever, is the single `dmenu.bin` file on its user-visible FAT - partition. Stock partitions p1–p7 are never written — no bootlogo replacement, no DTB - Panel-Fix writes, no apt installs. Both writers of that file (`install/update.sh` and - the launch.sh self-heal) guard with `mountpoint -q /mnt/mmc` **and** `cmp -s` so they - only touch TF1 when it's genuinely mounted and the content actually differs. - - **One sanctioned exception**: the optional `Bootlogo.pak` tool (EXTRAS, see 03) - writes `bootlogo.bmp` on the vfat boot-resource partition `mmcblk0p2` — the same - mechanism the old port used at install time, but here only on an explicit user - action inside the pak, never automatically. Before the first overwrite it copies - the stock logo into the pak's preset folder as `original.bmp`, so the stock look - is always restorable from within the pak. The installer/boot shim remain - write-free on p1–p7. -- **TF2 = NextUI's card** (`/dev/mmcblk1p1`): `.system`, `.tmp_update`, `.userdata`, - Bios, Roms, Saves. FAT32 recommended; the shim also tries exfat and `-t auto` as - fallbacks (kernel 4.9 has no native exfat — exfat works only if the stock OS has a - helper). `SDCARD_PATH` stays `/mnt/SDCARD` via symlink/bind to the real mountpoint, - so shared code's hardcoded paths keep working. -- **TF1-only layout: not supported** (deliberate scope cut vs the old port — keeps the - stock card pristine and the support matrix small). No TF2 → "INSERT NEXTUI TF2 CARD" - splash, then fall through to the stock frontend so the device always boots something. - -**End-user install** (documented in `skeleton/BASE/README.txt`): -1. Drag `h700/dmenu.bin` from the release onto TF1's ROMs partition root (any PC + card - reader). -2. Copy `MinUI.zip` (plus Bios/Roms) onto a FAT32 TF2. First boot self-installs. -3. Uninstall: delete `dmenu.bin` from TF1 → pure stock boot. `.system`/`.userdata` on - TF2 remain inert data. - -## The boot shim (`workspace/h700/boot/`) - -`build.sh` produces `dmenu.bin` as a self-extracting script: `boot.sh` + an -`echo BINARY` sentinel + a gzipped tar payload (`fbsplash`, static `unzip` helper). -Notable implementation details (`boot/boot.sh`): - -- `trap '' USR1` — the stock `launcher.sh stop` sends SIGUSR1; must not kill the shim. -- Payload offset found with `grep -na '^BINARY' "$0" | cut -d: -f1 | head -1` - (`head`, not `tail` — the script's own grep line would otherwise match last). -- Logs to `/tmp/nextui-h700.log` by default; only writes a log to TF1 if it is a real - mountpoint, truncating per boot (no unbounded growth on the stock card). -- **Splash**: `fbsplash` (`boot/fbsplash.c`, ~180 lines) mmaps `/dev/fb0` and renders - text with a built-in 5×7 bitmap font. It is statically bundled and safe for early - boot; the shim extracts the embedded payload before invoking it. Messages: - `INSTALLING NEXTUI`, `UPDATING NEXTUI`, - `INSERT NEXTUI TF2 CARD`, `NEXTUI INSTALL MISSING`, `STOCK TARGET REQUIRED`. - (The old port's per-panel raw-BMP `dd` scheme was dropped — rendered text needs no - per-resolution assets. Post-install, SDL-based `show2.elf` takes over as usual.) -- **Shared helpers**: `shim-common.sh` is packed into the self-extracting payload and - sourced after extraction, so boot and installer share TF2 mount/repair, `/mnt/SDCARD` - compatibility, and logging helpers. -- **TF2 mount**: tries vfat → exfat → auto; on failure runs `repair_tf2()` — - `fsck.fat -a` or `fsck.exfat -a` chosen by `blkid` — then retries once. -- **Update trigger**: `MinUI.zip` always enters the update path. If - `.tmp_update/h700.sh` is missing (fresh card), the shim bootstrap-extracts only - `.tmp_update/*` from that zip first, then delegates — **the zip is left in place for - the installer to own**. Root-level `*.pakz` files also invoke the installer when an - executable `.tmp_update/h700.sh` is already present; a pakz alone cannot bootstrap - a fresh card. -- Then `exec`s `.system/h700/paks/MinUI.pak/launch.sh`; any failure falls back to the - stock frontend. -- Prefers the stock OS's `unzip` when present; the embedded static helper is the - fallback (stock Ubuntu has a full userland — use it). - -## The installer (`workspace/h700/install/`) - -- `boot.sh` → ships as `.tmp_update/h700.sh`. Owns the update transaction: - clean-replaces `.system/h700/bin`, `lib`, and `paks/MinUI.pak` (`rm -rf` then - extract) so stale files can't survive an update, processes `*.pakz` (including - `post_install.sh` hooks), and deletes `MinUI.zip` itself when done. -- `update.sh` → ships as `.system/h700/bin/install.sh` (in-place updates from within - the running OS). Also performs the TF1 `dmenu.bin` self-heal (mountpoint + cmp - guarded, above). - -## `MinUI.pak/launch.sh` (the master runtime script) - -Responsibilities as shipped (`skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh`, ~225 lines): -- `export PLATFORM=h700`, path exports, `/mnt/SDCARD` compat symlink. -- **Device detection**: `RGXX_MODEL=$(strings /mnt/vendor/bin/dmenu.bin | grep -m1 ^RG)` - → `DEVICE` case (rg28xx / rg34xx / cube / rg40xx default). Confirmed working on 2026 - firmware. -- `LD_LIBRARY_PATH=$SYSTEM_PATH/lib:...` — our SDL2 first. -- Env for the graphics/audio/input stack: `SDL_VIDEODRIVER=mali`, - `SDL_AUDIODRIVER=alsa`, `SDL_JOYSTICK_DISABLE_UDEV=1`, and `SDL_ROTATION=1` when - `DEVICE=rg28xx`. -- Kills/stops stock services we replace: `brightCtrl.bin`, `cexpert`, NetworkManager; - writes a `/run/systemd/logind.conf.d/nextui-h700.conf` drop-in with - `HandlePowerKey=ignore` + `HandlePowerKeyLongPress=ignore` and restarts logind (so - systemd never races us on the power button). -- Spawns `keymon.elf`, `batmon.elf`, `audiomon.elf`; wifi/bt init per settings (07); - runs boot hooks; then the standard crash-restart loop around `nextui.elf` / - `/tmp/next` chaining. -- Poweroff/reboot via sentinel files: `/tmp/poweroff` → `poweroff_next`, - `/tmp/reboot` → `reboot_next`, each falling back to plain `poweroff`/`reboot` if - the tool exits non-zero. Bare systemd `poweroff` is not enough on this PMIC — - see 06. -- Crash-loop handling: after 5 consecutive `nextui.elf` crashes, the loop logs the - crash limit, removes `/tmp/nextui_exec`, and falls through to poweroff. H700 does - not ship an automatic WiFi/SSH rescue path in the release runtime. - -## Maintainer development loop - -- The stock OS runs sshd with a full Ubuntu userland. After the first install, copy - freshly built `.elf` files into `.system/h700/bin` and restart the launch loop; - routine iteration does not require moving SD cards. -- The bounded crash loop writes its diagnostics before powering off. Retrieve logs - from TF2, or use stock SSH while the device is already reachable. -- Test the self-extracting shim and installer as separate layers: the shim owns early - mount/repair/fallback, while `.tmp_update/h700.sh` owns the update transaction. diff --git a/docs/h700-port/03-platform-layer.md b/docs/h700-port/03-platform-layer.md deleted file mode 100644 index 8e1850eda..000000000 --- a/docs/h700-port/03-platform-layer.md +++ /dev/null @@ -1,243 +0,0 @@ -# 03 — Platform Layer (`workspace/h700/`) - -Reference map for the platform API, device detection, input architecture, settings -backend, and H700-specific tools. Evidence is indexed in [08](08-testing-status.md) -and release classification in [09](09-roadmap.md). - -Strategy, as planned and executed: **clone `workspace/tg5040/`**, keep the -`generic_video.c`/`generic_wifi.c`/`generic_bt.c` includes and the current `PLAT_*` API -surface, repoint hardware access to the H700 paths (00), borrowing only hardware -constants from the old rg35xxplus port (`git show 8cd78866:...`). - -One platform serves all devices: `DEVICE`/`RGXX_MODEL` env (set by launch.sh, see 02) -→ `detect_device()` sets `is_rg28xx / is_rg34xx / is_rgsp / is_cube` globals that drive -resolution and the bootlogo preview rotation (panel rotation itself is handled -entirely by the SDL driver via `SDL_ROTATION=1`; nothing app-side rotates — 04), -plus `dev_has_lstick / dev_has_rstick` capability flags -that drive stick availability — the tg5040 `is_brick` pattern. - -Analog stick matrix (verified against Retro Catalog/Anbernic specs 2026-07, RG40XXV -and RG34XXSP confirmed on hardware; every stick present clicks, so L3 ⇔ left stick, -R3 ⇔ right): - -| Device | Sticks | Detection key | -|---|---|---| -| RG28XX, RG34XX, RG35XX Plus/2024/SP | none | `RG28xx` / `RG34xx` exact; `RG35xx` prefix default | -| RG SP | none | `RGSP` exact | -| RG35XX H, RG35XX Pro | dual | `RG35xx` prefix + exact `H` / `Pro*` suffix | -| RG34XXSP | dual | `RG34xxSP` exact | -| RG40XX H, RG CubeXX | dual | `RG40xxH`, `RGcube*` / `DEVICE=cube` | -| RG40XX V | left only | `RG40xxV` exact | -| Unrecognized / missing model | none | conservative default — sticks stay off until a known match | - -Unknown `RG35xx` variants and any other unrecognized model stay stickless. That is -deliberate: `DEVICE=rg40xx` alone (launch.sh fallback without a usable -`RGXX_MODEL`) no longer assumes dual sticks. No H700 Anbernic device has an Fn -switch. Exact `RGXX_MODEL` strings are still unconfirmed for the RG35xx family -(same caveat as msettings' displaycal presets). The H700 PS1 pak binds L3/R3 so -DualShock titles can use stick clicks on models that have them. - -The RG SP is stickless on device-tree evidence rather than spec sheets: its DTB has -no `keyL3`/`keyR3` nodes, none of the analog multiplexer pins the RG34XXSP carries -(`amux-en-gpios`, `A0_gpio`, `A1_gpio`, `adc-en-gpios`), and the GPADC itself is -`status = "disabled"`. - -The Input pak uses the per-device capability flags to show only the sticks that exist, -including their analog axis movement and L3/R3 click state. This is verified on the -single-stick RG40XXV and dual-stick RG34XXSP: movement is visualized correctly for the -left stick on RG40XXV and for both sticks on RG34XXSP. - -## platform.h (as shipped) - -```c -extern int is_rg28xx, is_rg34xx, is_rgsp, is_cube; -extern int hdmi_active; -extern int dev_has_lstick, dev_has_rstick; -extern int dev_has_rgb, dev_num_leds; - -#define HDMI_WIDTH 1280 -#define HDMI_HEIGHT 720 -#define FIXED_SCALE 2 -#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:((is_rg34xx||is_rgsp)?720:640))) -#define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:(is_cube?720:480)) -#define FIXED_BPP 2 -#define SCREEN_FPS 60.0 // ⚠ assumed, never measured per panel -#define SDCARD_PATH "/mnt/SDCARD" // symlink to the real TF2 mountpoint (02) -#define MAX_LIGHTS 2 // ceiling; PLAT_getNumLeds() reports 0/1/2 per model -#define MAIN_ROW_COUNT ((hdmi_active||is_cube)?10:6) // cube was under-filled at 8 -#define PADDING ((hdmi_active||is_cube)?5:10) // 480p keeps standard 10-unit gaps -``` - -## Input — dual path, evdev primary (deviation from plan) - -The plan preferred the tg5040-style pure-SDL-joystick route. **Shipped: raw evdev is -the primary path for built-in controls**, with SDL joystick as a secondary path for -external controllers. Reasons discovered during bring-up: -- SDL is built without udev and `SDL_JOYSTICK_DISABLE_UDEV=1` is exported. During - bring-up the built-in pad did not enumerate because the SDL fork's Batocera - patches deleted the joystick heuristic in `SDL_EVDEV_GuessDeviceClass()`, so the - no-udev fallback path never classified any device as a joystick. Fixed by - h700-toolchain's `support/sdl2-h700.patch` (see 01); SDL joystick enumeration of - the built-in pad now works. Note the fork assigns SDL button indices in - ascending evdev-keycode order, so the pad's ESC/VOL−/VOL+ (1/114/115) occupy - indices 0–2 and the gamepad cluster starts at index 3 (A=3 … MENU=11). - **Because of that, platform.c must never open the built-in pad as an SDL - joystick**: `poll_sdl_input()` interprets SDL joysticks with the BT-pad - `JOY_*` layout, so the built-in pad's events would double-apply with scrambled - meanings (B→L1, VOL−→back, MENU→volume UI — seen in Settings 2026-07-09). - `is_builtin_pad()` skips "ANBERNIC-keys" in both the init scan and the - hotplug path; evdev is the sole path for built-in controls, SDL joystick is - for external (BT) pads only. -- evdev codes are needed for keymon and wake handling anyway. - -Implementation: `poll_evdev_input()` scans/reads `/dev/input/event0..11` directly with -periodic (2 s) rescans for hotplug, mapping via `CODE_*` defines; `poll_sdl_input()` -handles SDL joystick events (BT pads) via `JOY_*` indices. - -Verified mappings (also recorded in 00): -- evdev (event1 `ANBERNIC-keys`): A 304, B 305, Y 306, X 307, L1 308, R1 309, - SELECT 310, START 311, MENU 312, L3 313, L2 314, R2 315, R3 316; PLUS 115 / - MINUS 114 (event2); POWER 116 (event0, `axp2202-pek` — note tg5040 uses 102). - **D-pad has no keycodes on current firmware — it arrives as ABS_HAT0X/Y.** -- **MENU compound-tap quirk (fixed)**: the firmware reports the physical MENU button - faithfully on 312 (down while held, up on release), but on a *short tap* it also - emits a synthetic 354 (`KEY_GOTO`) pulse that starts the instant 312 releases and - lasts ~190 ms (verified via evtest on RG34XXSP; on a long hold 354 never fires). - Mapping both 312 and 354 to `BTN_MENU` (as the old rg35xxplus platform did via - `CODE_MENU_ALT`) stretched every tap past the 250 ms `MENU_DELAY` threshold — - a quick MENU tap registered as a hold, so the home screen flipped from the - shortcuts overlay into brightness mode. Fix: `button_from_code()` no longer maps - `CODE_MENU_ALT` to `BTN_MENU` (keymon likewise ignores it); tap-vs-hold is derived - from the clean 312 timing. The SDL path was never affected (`JOY_MENU_ALT = JOY_NA`). -- Analog sticks: ABS_Z/RX/RY/RZ; signed values are scaled ×32767/4096. Presence varies - per model (see the stick matrix above); `dev_has_lstick`/`dev_has_rstick` gate - CODE_L3/R3, JOY_L3/R3, and AXIS_LX/LY/RX/RY to NA where the stick is absent, so - the Input pak and shared input code adapt without platform-independent changes. - (Previously CODE_L3/R3 were unconditional, so the Input pak drew L3/R3 pills on - every device, and `is_rg34xx` wrongly stripped L3/R3 from the RG34XXSP.) -- SDL indices (secondary path): A=0 B=1 Y=2 X=3 L1=4 R1=5 SELECT=6 START=7 MENU=8, - L3=9 L2=10 R2=11 R3=12, MINUS=15 PLUS=16; axes LX=0 LY=1 RX=2 RY=3. - -Button semantics: `BTN_RESUME=BTN_X`, `BTN_SLEEP/WAKE=BTN_POWER`, -`BTN_MOD_BRIGHTNESS=BTN_MENU`, `BTN_MOD_COLORTEMP=BTN_SELECT`, dedicated -`BTN_MOD_PLUS/MINUS` on the volume keys — parity with tg5040 conventions. - -**Not supported:** user-assignable FN1/FN2/HOME pak-launch actions (upstream #788). -H700 has no dedicated FN1/FN2/HOME buttons, so `BTN_FN*` are `BTN_NONE` with empty -names (Settings hides the Assignments menu; main-menu FN presses are no-ops). - -`PLAT_shouldWake` keeps a **persistent** `wake_fd` on event0 (opened once -O_NONBLOCK|O_CLOEXEC, drained per poll, closed in `PLAT_quitInput`) — an early version -open/closed per poll and could drop the wake press between polls. - -## platform.c — subsystem map (as shipped) - -| Subsystem | Implementation | -|---|---| -| Video | `#include "generic_video.c"` — custom SDL2 mali driver does the rest (04) | -| Battery | `axp2202-battery/capacity` + `axp2202-usb/online`, with coarse bucketing in shared code. Unlike tg5040, H700 charging detection uses `online` alone | -| CPU speed | `governor.sh` via `system()`: auto=schedutil and performance both permit the greatest advertised frequency; powersave=conservative capped mid-range. H700's advertised 1.5 GHz ceiling is in-spec, not an overclock, so Auto no longer caps it one step below maximum. Manual changes work. Former MD Auto slowdown near 480 MHz is fixed (user-verified 2026-07-20). Single A53 cluster → `PLAT_pinToCores` no-op | -| CPU temp | thermal_zone0 | -| GPU temp | thermal_zone1 (zone map in 00 — zone2 is the video engine, a first draft got this wrong) | -| GPU speed / governor | HUD read resolves `devfreq`/`clk` paths once (first readable candidate wins) with a 648 MHz last-resort fallback. `governor.sh` also pins GPU `min_freq` to max under auto/performance and to min under powersave — `simple_ondemand` under-clocks vsync'd spiky loads (06) | -| Rumble | `echo 1/0 > axp2202-battery/moto` — on/off only, strength>0 → 1. Works (tested). Input-FF (event1 advertises FF bits) unexplored | -| LEDs | RGB on RG40XX H / RG40XX V / RG CubeXX only, via an MCU on `/dev/ttyS5` (115200 8N1) gated by `axp2202-battery/mcu_pwr` — see `platform/led.c`. `MAX_LIGHTS 2` is a ceiling; `PLAT_getNumLeds()` returns 0 (no RGB), 1 (RG40XXV, one populated bank) or 2. Effects are rendered by the MCU firmware, not in userspace. `work_led` remains the sleep/backlight indicator on every model | -| Backlight | raw brightness 0 via disp ioctl + fb blank + `work_led` on/off around it | -| Lid | `hallkey` path wired into `PLAT_initLid`/`PLAT_lidChanged` (`has_lid` = file exists); lid close → sleep and lid open wakes screen-off. RG34XXSP: POWER can wake light sleep with lid closed; deep sleep re-sleeps if the lid remains closed (06). | -| Model | `PLAT_getModel` copies the raw `RGXX_MODEL` into a static buffer; when unavailable it returns `Anbernic RG XX` | -| Date/time | `timedatectl` / `hwclock` / `date` via snprintf-bounded commands; timezone choices are parsed from `/usr/share/zoneinfo/zone.tab`, setting uses `timedatectl set-timezone`, and NTP uses `set-ntp` (systemd-timesyncd) | -| Turbo | `PLAT_canTurbo()=false`, no-ops (tg5040's turbo rides trimui_inputd; no H700 equivalent wired) | -| Deep sleep | `PLAT_supportsDeepSleep()=1`; `suspend` script wraps `echo mem` (06) | -| Sample rate | tg5040 logic; consults `PLAT_bluetoothConnected()` only — calling `GetAudioSink()` here segfaulted minarch pre-`InitSettings()` (shm not yet mapped) | -| WiFi/BT | generic_wifi.c / generic_bt.c + init scripts (07) | - -## libmsettings (`workspace/h700/libmsettings/msettings.c`, ~1600 lines) - -- **Brightness**: `/dev/disp` ioctl `DISP_LCD_SET_BRIGHTNESS (0x102)`, args - `{0, raw, 0, 0}`; level curve `0→4, 1→6, 2→10, 3→16, 4→32, 5→48, 6→64, 7→96, - 8→128, 9→192, 10→255`. Stock `brightCtrl.bin` is killed at launch so it can't fight us. -- **Volume**: tinyalsa on card 0. `digital volume` is a 0–63 **attenuator** — the code - writes `mixer_ctl_set_percent(digital, 0, 100 - val)` (reversed mapping, confirmed - correct by ear; the control's TLV metadata is garbage). `lineout volume` secondary. - Tested on RG40XXV and RG34XXSP: UI and audible levels are correct from mute through - 100%, with no current volume-control issues. -- **Mute**: `SPK` switch off + store/restore volume (no `/sys/class/speaker/mute` on - H700). The physical volume UI still supports mute; Fn-switch settings are gated off - because RG XX devices have no Fn switch. -- **Color temperature**: `/sys/class/disp/disp/attr/color_temperature` — works - (tested ✅). The sibling `enhance_contrast` / `enhance_saturation` / - `enhance_bright` attrs are also written, **but have no visible effect on RG XX - panels** — those settings are gated off for h700 (04). All - `scale*()` switches carry `default:` cases (a draft could hit uninitialized - values on out-of-range input). -- **DisplayCal**: same gamma-LUT ioctls as tg5040 (0x10b/0x10c/0x10d) — worked 1:1 as - predicted; tested passing on RG40XXV including persistence across sleep and game - launch. -- **HDMI**: `GetHDMI()` probes `/sys/class/extcon/hdmi/{state,cable.0/state,...}` and - `SetHDMI()` switches disp0, framebuffer/layer geometry, and the ALSA route. Menu, - game, audio, and in-game hotplug in both directions pass on RG40XXV (04). -- **Jack detection**: not wired (path exists but historically dead — 00). -- Debug printfs were stripped/commented from the runtime path; remaining prints are - error paths. - -## keymon (`workspace/h700/keymon/keymon.c`) - -tg5040 structure + H700 codes: reads event1 (buttons) + event2 (volume 115/114) + -event0 (power 116). MENU+vol = brightness, SELECT+vol = colortemp, plain vol = volume — -tg5040 parity. No mute DIP switch on H700 (gpio243 watcher dropped). Tracks MENU on -code 312 only — the synthetic 354 post-tap pulse is ignored (see MENU quirk above). - -## Cores (`workspace/h700/cores/`) - -tg5040's list verbatim — the full 28-core set builds and ships (same aarch64/a53 -target), with the picodrive LTO/patch-hygiene fixes noted in 01. - -## Shared-code integration surface - -Most H700 code is platform-local, but these shared areas knowingly carry H700 -integration. Review them when rebasing or adding another platform: - -- `workspace/all/common/generic_video.c` fails fast on SDL/window/GL initialization - errors instead of continuing into a black screen. -- `workspace/all/common/api.c` / `api.h` expose `PWR_requestSleep()` for lid-driven - sleep and close audio with `SND_quit()` before suspend. -- `workspace/all/audiomon/audiomon.cpp` checks BlueALSA availability; its Makefile - gives H700 the compile-time omission for the unsupported `delay 0` option. -- `workspace/all/minarch/makefile` includes H700 in the tg5040-class RA/CHD/SRM/ - sample-rate feature filters. -- `workspace/all/settings/settings.cpp`, `btmenu.*`, and the settings Makefile carry - the Anbernic vendor/model capabilities and stock-Bluetooth-audio integration. -- `workspace/all/syncsettings/syncsettings.c` restores the display settings and gamma - LUT after suspend. -- `workspace/all/bootlogo/bootlogo.c` contains the diagnostic empty-state handling - and the optional `BOOTLOGO_PREVIEW_ROTATE_CW` hook used by RG28XX. -- Root/workspace makefiles register the H700 platform, dedicated `h700-toolchain`, - rfkill, LedControl, and the H700 Bootlogo build. - -Any change in this surface requires the H700 build plus the tg5040 regression build -recorded as BUILD-01 and BUILD-02 in 08. A new shared button or `PLAT_*` hook must be -defined on every platform; a full build is required because single-pak builds omit -some translation units. - -## What disappeared vs tg5040 (as planned) -- `btmanager/` (BlueZ-upgrade pakz — H700 uses firmware-provided BlueZ) -- ~~`poweroff_next/`, `reboot_next` (systemd poweroff/reboot work fine)~~ **Reversed.** - That reasoning was wrong twice over: the tg5040 limbo is a PMIC latch that no - init system can fix, and the base OS runs BusyBox init with no systemd at all. - Both tools are now ported — see [06](06-power-sleep-battery.md#power-off--reboot). -- ~~LED animation wiring (`led_anim`), ledcontrol.elf (gated to tg50x0 in `workspace/makefile`)~~ - **Partly reversed.** `led_anim` really is TrimUI-only, but the premise that RG XX has - no RGB LEDs was wrong — RG40XX H/V and RG CubeXX drive theirs from an MCU over UART5 - (00). `ledcontrol.elf` now builds and ships for h700 as well, and LedControl is - platform-aware: it asks the platform for the light count, names and effect list, and - shows a "no RGB lights" screen on the models without them. - Bootlogo was initially gated off too, but has since been ported: `Bootlogo.pak` - builds for h700 with resolution-keyed preset folders (`640x480`, `720x480`, - `480x640`, `720x720`) selected via `$DEVICE`, writes `bootlogo.bmp` to `mmcblk0p2` - (`BOOTLOGO_PARTITION` in `platform.h`), backs up the stock logo as - `original.bmp` on first apply (see 02 for the TF1-write-policy exception), and on - the RG28XX rotates previews to boot orientation (`BOOTLOGO_PREVIEW_ROTATE_CW`, 04) -- `trimui_inputd` interactions (turbo, gpio 5V export) - -New vs tg5040: `rfkill/` — a minimal from-scratch `/dev/rfkill` ioctl tool (~120 -lines), since the stock binary can't be relied on. diff --git a/docs/h700-port/04-video-display.md b/docs/h700-port/04-video-display.md deleted file mode 100644 index b0354a928..000000000 --- a/docs/h700-port/04-video-display.md +++ /dev/null @@ -1,241 +0,0 @@ -# 04 — Video, Display, Rotation, HDMI, DisplayCal - -This chapter records the H700 display stack, the decisions behind it, and the -hardware evidence that established those decisions. The current test results and -per-device coverage live in [08 — Testing status](08-testing-status.md); release -criteria and deferrals live in [09 — Roadmap](09-roadmap.md). - -## Rendering architecture - -NextUI renders via `workspace/all/common/generic_video.c`: SDL2 window → -`SDL_GL_CreateContext` → GLES 3 shader pipeline → `SDL_GL_SwapWindow`. The H700 -platform provides SDL2 + a working EGL/GLES stack and gets the entire feature set -(shaders, overlays, effects, scrolling text, screenshots) for free. **Confirmed on -hardware**: all shipped `.glsl` shaders, overlays, and effects run on the Mali-G31 at -full speed at 640×480. - -The stack: -- Kernel 4.9 BSP, no DRM/KMS. Display = Allwinner disp2 (`/dev/disp` + fbdev). -- Mali-G31 MP2, kbase r20p0 + vendor blob (64-bit, ES 3.2, fbdev EGL winsys — 00). -- **Custom SDL2** from `JohnnyonFlame/SDL-malifbdev-rot`, pinned commit - `d4a7d750…`, built aarch64 in-tree (01), `SDL_VIDEODRIVER=mali` exported by - launch.sh. SDL 2.28-era — sufficient for current NextUI; no 2.30 rebase was needed. -- GLES linked directly (`-lGLESv2 -lEGL`), **not** via the SDK's pkg-config (libUMP - trap, see 01). `generic_video.c` gained hard error checks: SDL init / window / - renderer / GL-context failures now `exit(1)` instead of limping on — on a device - with no display fallback, failing loudly into the bounded crash-restart loop beats - a black screen; the launcher powers off after the crash limit. - -## Panel geometry and scaling context - -| Device | Panel | FIXED_W×H | Implementation / evidence | -|---|---|---|---| -| RG40XXV | 640×480 4:3 | 640×480 | Native landscape reference panel | -| RG34XXSP | 720×480 3:2 | 720×480 | Broad UI and scaling evidence gathered during bring-up | -| RG SP | 720×480 3:2 | 720×480 | Same panel as RG34XXSP (`rg34xxsp_v1`, identical DTB timings); firmware-derived, never run on hardware | -| RG28XX | 480×640 portrait | 640×480 logical | Driver-level rotation; see the rotation decision below | -| RGcubexx | 720×720 | 720×720 | `is_cube` geometry path; community scaling feedback available | - -### 480p UI observations and overlay assets -These panels are ~half the resolution of tg5040 (1280×720 / 1024×768); NextUI hadn't -rendered at 480p for ~2 years. Bring-up on RG40XXV and RG34XXSP found no systemic -scaling breakage; the 720×480 sweep included the RetroAchievements keyboard and -screenshots. Local observations also cover 640×480 and rotated 480×640; a community -tester reported normal general UI scaling on the 720×720 RGCubeXX. Refer to the test -report for the maintained coverage record. - -**Panel-matched overlay assets** are a separate content question. The H700 tree ships -empty `Overlays//` directories plus two GBA PNGs at **1024×768** (TrimUI -Brick), not assets for H700's three logical rendering resolutions: 640×480 (including -the driver-rotated RG28XX), 720×480, and 720×720. The overlay GLES path itself runs on -Mali. The Input tester is device-aware, ineffective display controls are hidden, and -Fn-switch settings are disabled on H700. - -## RG28XX rotation decision (2026-07-12) - -Hardware testing answered both open questions, and the answer retired one of the -two planned layers: - -1. **SDL level (the only layer)**: launch.sh exports `SDL_ROTATION=1` when - `DEVICE=rg28xx`, consumed by the malifbdev-rot driver. It **does** cover the GL - context path — the entire 640×480 landscape frame is rotated onto the portrait - panel at present time. The app-side coordinate space is plain 640×480 landscape; - no NextUI code needs to know the panel is rotated. -2. **GL level — removed.** `platform.c` initially also set `should_rotate = - is_rg28xx`, feeding `generic_video.c`'s dst-rect w/h swap in - `setRectToAspectRatio()`. The feared double-rotation was real: the UI path - doesn't go through that function so menus looked fine, but minarch scaling - broke — Aspect produced an undersized rect fitting neither axis (480×360 inside - 640×480), and Fullscreen stretched into a 480×640 rect that filled only the left - 75% of the screen with the bottom clipped. Removing the flag fixed both modes, - user-verified on hardware (`d738014`). A NOTE in `PLAT_initPlatform` documents - why `should_rotate` must stay 0. (That flag was originally minarch's - TATE/vertical-arcade content-rotation hook — a feature since removed — not a - panel-orientation flag; h700 is the only platform that ever set it.) - -One consequence for the Bootlogo pak: the bootloader blits `bootlogo.bmp` -panel-native (unrotated), so the 480×640 presets are authored 90° CCW in file -space. The pak now rotates previews 90° CW on the RG28XX -(`BOOTLOGO_PREVIEW_ROTATE_CW` in platform.h, default-off for other devices) so the -carousel shows what the panel will actually display at boot; apply itself was -already correct (user-verified: applied logo renders upright at power-on). - -## HDMI output switching - -Plug-and-play design: when a cable is (dis)connected the running app quits via the -existing `GFX_hdmiChanged()` plumbing (nextui inline, minarch `hdmimon()`, settings -main loop), the relauncher restarts it, and `PLAT_initPlatform()` converges the -output to the cable state *before* SDL video comes up. Boot-with-cable works the -same way for free. - -- `GetHDMI()` probes `/sys/class/extcon/hdmi/state` plus `cable.0/state` and - `cable.1/state` — hotplug detection (verified: `cable.0/state` is a bare 0/1; the - top-level `state` file is `HDMI=n` text which `getInt` parses as 0, so a cable-state - file is the effective check). -- `SetHDMI()` (libmsettings) now performs the proven old-port sequence in C: - blank fb0 → zero fb → `/sys/kernel/debug/dispdbg` `disp0/switch` with param - `"4 10 0 0 0x4 0x101 0 0 0 8"` (HDMI type 4, mode 10 = **1080p60 signal**) → - `FBIOPUT_VSCREENINFO` to **1280×720** 32bpp double-buffered (the DE - hardware-scales the 720p fb to the 1080p signal) → unblank. Unplug reverses to - param `"1 0"` (LCD) + panel-native fb dims (RG28XX portrait 480×640!). Idempotent: - it reads the live output type from `/sys/class/disp/disp/attr/sys` and no-ops - when already correct. `dispdbg` presence verified on RG40XXV (4.9.170). -- The mali SDL winsys latches fb0 geometry at video init, so the restarted app - automatically gets a 1280×720 EGL surface. `hdmi_active` (latched in - `PLAT_initPlatform`) drives `FIXED_WIDTH/HEIGHT` → 1280×720, `MAIN_ROW_COUNT` → 10 - (tg5050's proven 720p/scale-2 layout); minarch rescales games via its runtime - `DEVICE_WIDTH` latch. `HAS_HDMI`/`HDMI_*` are defined, which also activates the - dormant guards (SCALE_CROPPED downgrade, power-off screen dims). -- RG28XX: `PLAT_initPlatform` overrides `SDL_ROTATION` to 0 while HDMI is active - (fb is landscape then); back to 1 on the panel. -- Audio: `SetHDMI` routes ALSA `default` to card `ahubhdmi` (card 2, verified on - RG40XXV) via `$USERDATA_PATH/.asoundrc`, marker-guarded (`# nextui-hdmi`) so - audiomon's Bluetooth/USB routing always wins and we never clobber a file we - didn't write. -- **The hard part (learned the hard way, all validated on RG40XXV):** this BSP's - fbdev glue has **no `fb_set_par` hook** — `FBIOPUT_VSCREENINFO` records the var - and nothing else, and `sunxi_fb_pan_display` rebuilds only the layer *crop* - from the var each flip (never `fb.size`/`screen_win`). The scanout layer's - buffer size and output window are only written by the boot-time fb request and - by the device-attach path, which *asynchronously restores the previous mode's - layer config* — so after a switch the layer is stale: blank-but-backlit panel - after unplug (crop exceeds the shrunken fb → DE rejects every pan), shifted + - slowed-down picture after in-game plug (stale 640-wide buffer size under a - 1280-wide crop → per-frame DE errors). Two mechanisms fix it in `SetHDMI()`: - 1. `waitForOutput()` — the dispdbg switch is async (~700ms for LCD panel init; - "attached ok" in dmesg); poll `attr/sys` for the target output before - touching the fb. - 2. `commitLayerGeometry()` — read-modify-write the fb0 layer (`/dev/disp` - `DISP_LAYER_GET_CONFIG`/`SET_CONFIG` 0x48/0x47, channel 1 layer 0, structs - in `libmsettings/sunxi_display2_min.h`) with the correct buffer size, crop - and screen window, **verify by read-back and retry until it sticks** — - whichever commit lands last wins against the attach path's restore; commit - again after unblank. The blob's pans then keep the crop in sync (they copy - the committed config). - 3. **Reset the pan origin to page 0.** `fb_var_screeninfo`'s `xoffset`/`yoffset` - survive `FBIOPUT_VSCREENINFO` resize. Coming off a 640×480 panel, `yoffset` - can still be 480 — not a page boundary of the new 1280×720×2 buffer. Measured - on RG40XXV, that wedges the mali fbdev winsys (it never pans again; every - frame lands in page 0) while `commitLayerGeometry()` had cropped scanout to - page 1 → black on both TV and panel. `SetHDMI()` clears both offsets and - commits `crop.y = 0`, and the read-back retry also requires page 0 so a late - attach-path restore cannot revive the old offset. -- **Hardware evidence (RG40XXV + TV, 2026-07-16):** plug/unplug in launcher and - in-game (autosave → - auto-resume), repeated cycles, game scaling correct at 1280×720, and HDMI audio - routing all worked. An earlier - "audio stutter on TV" symptom was collateral from the stale-layer DE errors, - not GPU load. If a display rejects mode 10, mode 5 = 720p60 is the known one-line - fallback; broader EDID evidence is tracked in 09. Old reference: - `git show 8cd78866:skeleton/SYSTEM/rg35xxplus/bin/hdmimon.sh`. -- Observed unplug-to-panel restore is ~4–5s. The current shared MinArch/NextUI - handlers contribute a 1s cable-seating debounce; the remaining time is the output - switch and panel restore. - -## DisplayCal implementation and evidence - -Same `/dev/disp` gamma-LUT ioctls as tg5040 (`0x10b` set / `0x10c` enable / `0x10d` -disable). On RG40XXV: RGB gain sliders visibly act, persist, and **survive sleep and -game launch** (syncsettings.elf re-applies the LUT after resume — 06). `settings.cpp` -gained the Anbernic vendor + RG XX models. H700 enables color-temperature, -DisplayCal, WiFi, and Bluetooth settings; the FN/mute-toggle menu remains disabled. - -**Reboot persistence — fixed 2026-07-09.** `InitSettings()` used to call -`applyDisplayCalDefaultsForDevice()` unconditionally *after* loading the persisted -`msettings.bin`, clobbering white point / RGB gains back to off/100/100/100 on every -boot (and every client attach). Now only the shm host seeds displaycal defaults, and -only when the file is missing or predates v11. Verified on RG40XXV: patched values -survive reboot. (tg5040 has the same latent bug, masked by its calibrated presets — -flagged as a separate task.) - -**Per-model default presets — partly calibrated.** `displaycal.h` has a preset per -H700 model (RG28XX, RG34XX, RG34XXSP, RGSP, RG35XX = Plus/H/2024 shared, -RG35XXSP, RG35XXPRO, RG40XXH, RG40XXV, RGCubeXX). Calibrated and enabled today: - -| Model | Enabled | R / G / B | -|---|---|---| -| RG28XX | yes | 100 / 92 / 65 | -| RG34XXSP | yes | 100 / 83 / 86 | -| RG SP | yes | 100 / 68 / 61 | -| RG40XXV | yes | 91 / 100 / 63 | - -The remaining models stay disabled with neutral 100/100/100 until measured. The -RG SP keeps its own preset rather than sharing the RG34XXSP's, so calibrating one -panel cannot silently retune the other. Selection keys on `RGXX_MODEL` -(exact-model string from stock `dmenu.bin`; confirmed so far: `RG28xx`, `RG34xx`, -`RG34xxSP`, `RGSP`, `RG40xxH`, `RG40xxV`, `RGcubexx` — RG35xx-family strings -matched by prefix until confirmed) with `DEVICE` fallback, in both h700 -libmsettings and the settings app's reset-to-defaults. launch.sh maps `RG35xx*` → -`DEVICE=rg35xx` instead of lumping the 35xx family into rg40xx. Further panel -calibration = editing numbers in `displaycal.h` only. Default brightness on h700 -is 4 (tg5040 Brick keeps 2). - -**What actually works on RG XX panels:** LCD backlight brightness, color temperature, -white-point correction (displaycal), RGB tuning. The `enhance_*` display controls -(contrast/saturation/exposure) **do nothing on RG XX** — the sysfs attrs exist (00) -yet have no visible effect — so since 2026-07-09 they are hidden on h700 via the -`DeviceInfo` capability gates in settings.cpp (including the mute-toggle variants), -visually verified on RG40XXV. -The libmsettings plumbing remains (harmless no-ops; the shared API keeps the -symbols), and syncsettings still "restores" them on resume — a cosmetic cleanup at -most. - -## Incident: alpha/tinted-bitmap blits (libpng, not blending) - -During bring-up, graphical glitches were blamed on main's alpha-blending work; a -compat experiment (`GFX_needsBitmapBlendCompat()` gated in shared `api.c`) was -committed and reverted 16 minutes later, and the branch stayed pinned on the -pre-alpha graphics stack. **The real root cause turned out to be the missing 64-bit -`libpng12` bundle** — SDL2_image dlopens libpng, the stock OS only has a 32-bit copy, -and the silent dlopen failure corrupted image loading (fixed in `510d3bb1`, see -pitfall #2 in 01). The alpha-blending code on main was never at fault. - -Consequence: the h700 branch was **rebased onto main with the alpha-blending work -included** (done 2026-07-09). `workspace/all/` carried zero net change from the -reverted experiment, so the rebase was clean on that front. Game-switcher and box-art -checks at 720×480 and RG34XXSP screenshots supported the conclusion; retained -coverage details belong in the testing report. Panel-matched overlay assets remain -Brick-sized GBA only. - -## Incident: Bootlogo preset previews (2026-07-13) - -The RG34XXSP "no visible presets" issue was traced by driving the pak remotely over -SSH on the SP with the current branch build: all 23 `720x480/` presets loaded and -the carousel rendered correctly in a framebuffer capture, which the user also -confirmed. The failing binary was -the alpha1.1-era `bootlogo.elf` (built from a pre-commit working tree); the exact -defect in that binary was never pinned because current source no longer reproduces -it. To keep this class of failure diagnosable, `bootlogo.c` now logs the preset -search path, per-file `IMG_Load` failures, and the final count to the pak's -`log.txt`, renders the searched path on screen when nothing loads, and guards -scroll/apply against an empty preset list (apply previously dereferenced a NULL -array). RG28XX previews are rotated to boot orientation (see rotation section -above). Community feedback covers the 720×720 scaling path; maintained cube coverage -belongs in the testing report. - -## Boot splash decision - -Deviation from plan: instead of per-panel raw-BMP `dd` assets, the shim ships -`fbsplash` — a dependency-free fb0 text renderer (02). Post-install, SDL-based -`show2.elf` handles rich splash/progress as on other platforms. No per-resolution -splash assets to maintain. diff --git a/docs/h700-port/05-audio.md b/docs/h700-port/05-audio.md deleted file mode 100644 index 21dadd90b..000000000 --- a/docs/h700-port/05-audio.md +++ /dev/null @@ -1,115 +0,0 @@ -# 05 — Audio - -This chapter records the H700 audio architecture, decisions, and diagnostic evidence. -The maintained test report is [08 — Testing status](08-testing-status.md); release -criteria and deferred work are in [09 — Roadmap](09-roadmap.md). - -## Playback architecture - -`SND_init` (shared `api.c`) → SDL audio → **ALSA backend → card 0 `audiocodec`**. -`SDL_AUDIODRIVER=alsa` exported by launch.sh. GBA/SNES/PS1 run full speed with clean -audio and no underruns in H700 bring-up observations; see the testing report for the -current device coverage. - -``` -card 0: audiocodec ← speaker / lineout / headphone (the one we use) -card 1: ahubdam -card 2: ahubhdmi ← HDMI audio -``` - -## The dlopen'd-ALSA fix (the port's hardest bug — full story) - -Symptom: audio played but was glitchy/"sliced". Cause chain: - -1. SDL2 was direct-linked against the tg5040 SDK's `libasound`, which has **no symbol - versioning**; the SDK's copy of libasound was also bundled at first. -2. At runtime against the device's (versioned) libasound, the dynamic linker resolved - SDL's *unversioned* references to the **legacy `ALSA_0.9` compatibility symbols** — - which have value semantics, not the modern pointer-in/out semantics — for the - whole `snd_pcm_hw_params_set_*` family. -3. `snd_pcm_hw_params_set_rate_near` therefore misbehaved: the codec was clamped to - **192 kHz** while SDL believed it got **32.768 kHz** → resample math produced - sliced audio. - -Fix (commit `752cefe8`): build SDL2 with `--enable-alsa-shared` so it **dlopens the -device's own libasound** — `dlsym` always resolves the default (current) symbol -version. The bundled libasound copy was removed. Only `libtinyalsa` (used directly by -libmsettings) is bundled. Lesson generalized in 01: prefer dlopen over cross-linking -for libraries that exist on the target. - -## Volume and mute behavior (libmsettings — details in 03) - -- Master: `digital volume`, a 0–63 **attenuator with a reversed scale** — code writes - `100 - val` percent. Confirmed correct by listening; the control's TLV metadata is - garbage, so don't trust `amixer` ranges here. `lineout volume` secondary. -- Mute: `SPK` switch off + saved/restored volume (H700 has no - `/sys/class/speaker/mute`). The settings application enables the mute toggle. -- Bring-up evidence: on RG40XXV and RG34XXSP, the volume UI and audible level range - behaved as intended from mute through 100%. -- Suspend: the `suspend` script saves the full mixer state (`alsactl store`) in - `before()` and **restores it in `after_sync()`** on resume (an early version had - the restore commented out; it's live now). - -## Headphone jack routing and detection - -**Hardware behavior:** plugging headphones auto-mutes the speaker and routes audio -to the jack with no NextUI involvement. - -**Software:** Brick-style `SetJack` / separate speaker vs headphones volume / HP -volume icon are **not** wired on h700 — `keymon` never monitors a jack event, so -`GetJack()` stays 0 and the volume UI keeps the speaker path. That is cosmetic / -dual-volume behavior only; routing does not depend on it. The HP-icon/independent- -volume enhancement is classified in 09. (`jack_state` sysfs was -historically always 0 and was never needed once hardware auto-mute was confirmed.) - -## Bluetooth audio — stock-first A2DP enabled - -The clean 2026 RG40XXV stock image contains BlueALSA 4.2.0, its ALSA PCM/control -plugins, `/etc/alsa/conf.d/20-bluealsa.conf`, and the system D-Bus policy. A live -startup probe confirmed that `bluealsa -p a2dp-source` acquires `org.bluealsa` and -registers two SBC source endpoints below `/org/bluez/hci0`. - -H700 now follows the tg5040 lifecycle with a stock-only implementation: -- `bt_init.sh` starts BlueALSA only after `hci0` and stock BlueZ are ready, waits for - its D-Bus name, uses BlueALSA's default volume mode with `--initial-volume=100`, - and logs useful startup failures. It deliberately omits `--a2dp-volume`, which can - leave AirPods at absolute volume zero on this firmware -- `/usr/bin/bluealsa`, the ALSA PCM/control plugins, SBC runtime, ALSA configuration, - and BlueZ all come from the stock firmware; none are bundled or replaced -- settings exposes the existing maximum-sampling-rate control (the H700-specific - `NO_BT_AUDIO` build gate is removed) -- shared `audiomon` selects the connected device and writes `$HOME/.asoundrc`; MinArch's - existing device watcher then reopens SDL audio against the stock `bluealsa` PCM. The - H700 build alone omits the `delay 0` option rejected by its stock BlueALSA plugin; - tg5040 and tg5050 output is unchanged -- disabling Bluetooth stops BlueALSA before BlueZ; no `bluetoothd`, `bluetoothctl`, - or other BlueZ component is bundled or replaced - -### Evidence and observed behavior - -**RG40XXV / AirPods 4 ANC:** pairing, remembered pairing, -manual connection, A2DP routing, SBC transport, and user-audible game audio pass. -Putting the AirPods back in their case disconnects them and restores audio to the -internal speaker as expected. -The original silent stream was not a 44.1/48 kHz problem: BlueZ created the AirPods -transport with absolute volume zero. Setting its `MediaTransport1.Volume` to 127 made -the already-running stream audible. The shipped path instead starts BlueALSA with an -initial mixer volume and has libmsettings update the connected A2DP mixer control. -An A2DP PCM publication race was also observed during an artificial daemon -restart while the device remained logically connected; it is not handled by an -H700-only shared-code workaround unless a normal connection flow reproduces it. - -### Connection policy and operating limits - -AirPods auto-connect is intentionally outside NextUI's control: they commonly connect -to a nearby paired iPhone or Mac instead. NextUI retains the pairing and provides the -reliable manual Connect path. If the stock firmware lacks runnable BlueALSA, the -device remains controller-only rather than receiving a replacement Bluetooth audio -stack from NextUI. - -## Sample rates - -`PLAT_pickSampleRate`: tg5040 logic. One H700-specific fix: it must not call -`GetAudioSink()` (shared-memory settings) — minarch calls it before `InitSettings()` -maps the shm, which segfaulted; it now consults only `PLAT_bluetoothConnected()`. -Codec natively supports 48000/44100. diff --git a/docs/h700-port/06-power-sleep-battery.md b/docs/h700-port/06-power-sleep-battery.md deleted file mode 100644 index d6a5a795b..000000000 --- a/docs/h700-port/06-power-sleep-battery.md +++ /dev/null @@ -1,210 +0,0 @@ -# 06 — Power, Sleep, Battery, Lid - -This is the H700 power-management knowledge base: platform behavior, implementation -decisions, incident analysis, and diagnostic leads. The current test evidence and -device results are in [08-testing-status.md](08-testing-status.md#power-sleep-and-battery); -stage requirements and accepted product behavior are in -[09-roadmap.md](09-roadmap.md). - -## Sleep/wake incident and resolution (2026-07-09) - -The former "#1 open defect" turned out to be four separate bugs, all found and fixed: - -1. **Deep sleep powered off instead of suspending.** The `suspend` script began with - `set -uo pipefail`; the device's `/bin/sh` rejects `-o pipefail` and the script - exited 2 *before ever writing to `/sys/power/state`*. `PWR_deepSleep` treats a - non-zero script exit as suspend failure and escalates to `PWR_powerOff`. Fix: - `set -u` only (comment in the script warns about this). -2. **Second and later sleeps bounced back awake (~1 s black screen).** The persistent - `wake_fd` (a second open of event0 used only by `PLAT_shouldWake`) was never - drained while awake, so the power-key release that *triggered* a sleep was still - buffered and woke the device instantly. Only the first sleep of a process worked - (fd opened lazily); launching any pak "fixed" it once by restarting nextui.elf. - Fix: `drain_wake_fd()` runs every `PLAT_pollInput`. -3. **Lid close never slept.** Lid close injected `just_released |= BTN_SLEEP`, but the - manual-sleep condition in `PWR_update` also requires `power_pressed_at` (a real - power-key press), so it was a guaranteed no-op. Fix: lid close now calls the new - `PWR_requestSleep()` (api.c), which the existing "hardware requested sleep" branch - honors; the old injection also mis-fired on lid *open* and is gone. -4. **Keys/UI frozen ~5–10 s after wake.** Two stacked causes: (a) the script's - `after()` (alsactl restore, syncsettings, wifi/bt restart) ran synchronously while - the caller blocks in `system()`; (b) far worse, an ALSA PCM left open across - suspend takes SDL ~9–10 s to close on wake (`SND_quit` inside `SND_resetAudio`). - Fix: `PWR_enterSleep` now calls `SND_quit()` (close the healthy PCM *before* - suspend; wake just reopens), and the script splits resume work into `after_sync` - (alsactl/syncsettings, must finish before the script exits) and `after_async &` - (wifi/bt/hooks). Measured wake-to-responsive: ~0.5–1.2 s (audio reinit 150–200 ms, - formerly 9–10 s). - -Physical evidence for the resolved paths—including repeated cycles, autosleep, -in-game resume, lid handling, and state restoration—is recorded in POWER-01 through -POWER-04 of the [test report](08-testing-status.md#power-sleep-and-battery). The -implementation leaves long-press power-off unchanged. - -Stockmod/logind interference was ruled out: `HandlePowerKey=ignore` is in place (our -launch.sh drop-in), stockmod's `pwr_new.sh` is not running under NextUI, and no evdev -device exposes a lid switch (`sw=0` everywhere) — the hall sensor exists *only* as the -AXP2202 `hallkey` sysfs node that our code polls, so nothing else can react to it. - -## Hardware facts (00 has the full list) - -- `/sys/power/state` = `freeze mem`; `echo mem` suspend works -- Wake source: **power button only** (AXP2202 PEK). RTC alarm wake does not fire. -- WiFi does not recover on its own after resume — must be bounced (07). - -## Sleep design (as shipped) - -Two layers, as on tg5040: - -1. **Screen-off light sleep** — `PLAT_enableBacklight(0)`: raw brightness 0 via - `/dev/disp` ioctl + fb blank (`/sys/class/graphics/fb0/blank`) + `work_led` off; - governor powersave. -2. **Deep sleep** — `PLAT_supportsDeepSleep()=1`; generic `PLAT_deepSleep()` invokes - `skeleton/SYSTEM/h700/bin/suspend`: - - `before()`: `alsactl store` mixer state, stop bluetoothd/wpa_supplicant, - `pre-sleep.d` hooks - - when the SP-only `axp2202-battery/os_sleep` attribute exists, write stock's - persisted Super Standby value (`16`) before every attempt. Any non-zero value is - equivalent in the vendor driver, but matching stock keeps the integration - recognizable. This selects full USB-controller suspend and removes hall-open from - the kernel wake set; non-SP kernels have no attribute and already use full USB - suspend. - - `echo mem > /sys/power/state` in a retry loop (5 tries, with the tg5040-style - false-negative workaround: if we were asleep >5 s, a failed-looking write is - counted as success) - - `after_sync()` (before the script exits): `alsactl restore` mixer, - **`syncsettings.elf`** (re-applies volume, brightness, colortemp, contrast, - saturation, exposure **and the displaycal gamma LUT** — the panel does lose - state across suspend). Must stay synchronous: the caller reinitializes ALSA - as soon as `system()` returns, and a concurrent alsactl restore stalls it. - - `after_async()` (backgrounded, `&`): restart wifi/bt services, then - `post-resume.d` hooks — takes ~5 s and must not delay the script's exit or - the caller's input handling freezes for that long. - - systemd is bypassed on purpose (direct sysfs write); when logind is present, - launch.sh best-effort installs a drop-in (`HandlePowerKey=ignore`, - `HandlePowerKeyLongPress=ignore`) and restarts logind so it does not handle the - power key (02) - -### Wake & autosleep -- `PLAT_shouldWake`: power-key (code 116) read from a persistent non-blocking fd on - event0; the same fd is drained every `PLAT_pollInput` while awake (see fix #2 - above); lid gate below. Generic autosleep (`PWR_*` in api.c: idle timeout, disabled - while charging/HDMI) works unchanged on top. - -## Lid (RG34XXSP) - -`LID_PATH = axp2202-battery/hallkey`; `PLAT_initLid` sets `has_lid` if the file exists -(absent on RG40XXV). Polarity verified on hardware: 1 = open. Lid close → -`PWR_requestSleep()` → normal two-stage sleep (screen off, then suspend after the -suspend timeout). Lid open wakes from *screen-off* sleep (hallkey polled by -`PLAT_shouldWake`); waking from *deep* suspend requires the power key because the hall -sensor is not a kernel wake source — same as stock firmware, considered desirable. -The intended software behavior is to ignore power while the lid is closed, and -`PLAT_shouldWake()` has that gate. Hardware: POWER can still wake **light** sleep -while the lid is closed. In **deep** sleep, if POWER briefly wakes the unit and the -lid is still closed, the unit returns to sleep. Its lifecycle disposition is in the -[roadmap](09-roadmap.md#accepted-behavior-and-non-gates). - -## Battery - -- `PLAT_getBatteryStatus`: `axp2202-battery/capacity` + `axp2202-usb/online`, with - coarse bucketing in shared code. H700 uses the USB `online` value directly; unlike - tg5040 it does not also require a positive `time_to_full_now`. The recorded - RG34XXSP evidence is in POWER-04 and POWER-05. One long-suspend observation found the - top-right battery icon and Battery pak temporarily out of sync, despite a sensible - reported level after a fresh boot. Investigate a stale cache or polling gap after - long suspend. -- **Not supported:** “Keep awake over USB” (upstream #783). `PLAT_isUSBConnected()` is - a stub returning 0; the Settings toggle remains tg5040-only. Charging already blocks - deep sleep via `is_charging`; gadget/data keep-awake is not implemented. -- While charging, lid or power sleep reaches screen-off/light sleep only. This matches - shared `PWR_waitForWake()` behavior: the charging check deliberately skips - `PWR_deepSleep()` and checks again a minute later. It is a shared product behavior, - not a failed suspend attempt or an H700-specific override; see POWER-04 and the - [roadmap](09-roadmap.md#accepted-behavior-and-non-gates). -- Richer metrics (`time_to_empty_now`, `voltage_now`, `temp`, `charge_counter`) are - available for future batmon extensions; not wired. -- Standby drain: [POWER-06](08-testing-status.md#power-sleep-and-battery) completed — - sleep-drain work verified against stock OS on RG34XXSP (supersedes the earlier - coarse 40%→33% / 8.5 h capacity-only observation from before Super Standby). - -## Power off / reboot - -Launch-loop sentinels: `/tmp/poweroff` → `poweroff_next`, `/tmp/reboot` → `reboot_next`, -each falling back to the plain busybox/systemd command if the tool exits non-zero. -Charging-while-off is handled by u-boot/stock before our hijack, untouched. - -### The AXP2202 needs an explicit software power-off - -The port originally shipped bare `poweroff` on the theory that "systemd poweroff works -fine". It does not. `reboot(LINUX_REBOOT_CMD_POWER_OFF)` lands in the kernel's generic -`axp20x_power_off`, which writes `AXP20X_OFF_CTRL` at **0x32** — not the power-off -register on this part. AXP2202 (same die as AXP717) moved the on/off control group the -AXP2101 keeps at 0x10 out to **0x27**, so the kernel's write is a no-op: the CPU halts, -the rails stay up, and because `PLAT_powerOff` has already killed the backlight and -blanked the framebuffer, the user sees "the screen went black but it never turned off". - -`workspace/h700/poweroff_next/` fixes it, adapted from tg5040's tool (itself vendored -from Helaas's `nextui-brick-poweroff-hook`). Sequence, against the AXP2202 at 0x34: - -| Write | Why | -|---|---| -| `0x40`–`0x44` ← `0x00` | Mask every IRQ source | -| `0x48`–`0x4C` ← `0xFF` | Clear pending IRQ status (write-1-to-clear) | -| `0x22` ← `0x0A` | `PWROFF_EN`: bit0=0 button event powers off (not restart), bit1 long-press, bit3 LDO-OC, bit2 die-overtemp off | -| `0x27` ← `0x01` | `SOFT_PWROFF` bit0 — the actual trigger | - -The IRQ masking is likely the primary fix: a pending unmasked IRQ holds the AXP's IRQ -pin low, and >16 ms of that powers the PMU straight back on. The power-key edge IRQs -(`PONP`/`PONN` in `IRQ_EN1`) are armed by stock firmware, so the very press that asked -for power-off is the most likely thing to undo it. The `0x27` write is a plain store, -not read-modify-write, which also clears bit3 (PWROK pulled low restarts the system) — -set on stock H700 firmware, observed as `0x27 = 0x08`. - -**This is not a battery disconnect.** That is `0x12` bit 3 (`BATFET_CTRL`), which the -sequence never touches — the "soft-disconnect the battery" description that circulates -for the Brick fix traces to an earlier brute-force experiment with different registers -and misattributed names. `0x12` is eFuse-defaulted and governs the battery-only -powered-off case; leave it alone. - -### H700-specific divergences from the tg5040 tool - -- **Bus is auto-detected**, not hardcoded. tg5040 uses `/dev/i2c-6`; H700 has the PMIC - on `/dev/i2c-5` (`soc/twi5/i2c-5/5-0034`). The tool scans - `/sys/bus/i2c/devices/*/name` for an `axp*` at 0x34 and falls back to `/dev/i2c-5`. -- **The card path is resolved with `realpath`.** `SDCARD_PATH` is `/mnt/SDCARD`, which - launch.sh makes a symlink (or bind mount) onto `/mnt/sdcard`. `/proc/mounts` and - `/proc/*/fd` both name the resolved path, so the tg5040 string comparisons against - `/mnt/SDCARD` would never match here. -- **No global process kill.** tg5040 SIGTERM/SIGKILLs every pid before powering off. - On the base OS `/etc/inittab` has `::respawn:/sbin/nextui-session`, so killing - launch.sh starts a *new* frontend racing the shutdown — the exact failure being - fixed. The PMIC cut is instantaneous and total, so nothing needs reaping first; - `CFG_getPowerOffProtection()` gates a sync + swapoff + detach-unmount and no more. -- **`reboot_next` does no PMIC writes at all** — a restart is the SoC's job. It exists - for the deterministic sync and signal blocking. (tg5040's launch.sh calls - `reboot_next` but never builds or ships it, so on the Brick that line is a - command-not-found followed by `exit 0`.) -- `--dry-run` reports the detected bus, resolved card path and planned writes, and - touches nothing. Safe on a live device. - -## CPU / GPU governor - -`governor.sh` reads the available CPU frequency list. Auto uses `schedutil` across -the full advertised range, performance uses `performance` at the greatest advertised -frequency, and powersave uses `conservative` capped mid-range. H700's advertised -1.5 GHz ceiling is in-spec rather than an overclock, so Auto no longer caps its -maximum one frequency step below that ceiling. Menu vs in-game profiles ride the -shared settings; performance is forced during game launch. Manual in-game changes -are clean. -~~RG34XXSP MD Auto CPU slowdown~~ Fixed (user-verified 2026-07-20): earlier, some -shader/scale combos left Auto near 480 MHz and felt slow; that no longer reproduces. -Manual powersave/performance were already smooth. Single cluster → no core pinning. - -The same script also manages the GPU floor. Stock `simple_ondemand` under-clocks -vsync'd spiky shader loads (busy-% over 100 ms does not care about a single missed -frame), so auto/performance raise GPU `min_freq` to the greatest advertised rate -and powersave drops it to the minimum. Measured cost on RG40XXV is about 0.5% of -a 6-hour run (~2 minutes); the HUD read path resolves the working `devfreq` node -once (648 MHz last-resort fallback) so minarch does not burn CPU probing dead -paths every frame. diff --git a/docs/h700-port/07-wifi-bluetooth.md b/docs/h700-port/07-wifi-bluetooth.md deleted file mode 100644 index 5ec7c6924..000000000 --- a/docs/h700-port/07-wifi-bluetooth.md +++ /dev/null @@ -1,91 +0,0 @@ -# 07 — WiFi & Bluetooth - -This is the H700 connectivity knowledge base: stock integration, service ownership, -design rationale, and diagnostics. Current test evidence and device results live in -[08-testing-status.md](08-testing-status.md#network-and-online-features) (with -Bluetooth audio under [Audio](08-testing-status.md#audio)); lifecycle decisions live -in [09-roadmap.md](09-roadmap.md). - -## Hardware / stock OS (verified — details in 00) - -- WiFi: Realtek RTL8821CS (SDIO), driver `8821cs`, `wlan0`; link state via - `/sys/class/net/wlan0/operstate` -- BT: same combo chip, UART-attached; stock already runs `rtk_hciattach` and - `bluetoothd` (BlueZ 5.64–5.66 depending on firmware) at boot -- Stock also runs wpa_supplicant (D-Bus mode), NetworkManager, and dnsmasq. NextUI - explicitly stops NetworkManager and the stock supplicant before starting its own; - the H700 scripts do not directly manage dnsmasq - -## WiFi architecture (NextUI-owned wpa_supplicant) - -The plan's option 1 shipped as designed: `generic_wifi.c` remains unchanged and -NextUI owns the supplicant. Evidence for scan/connect/forget, resume recovery, and -NTP synchronization is recorded in NET-01 and NET-02 of the -[test report](08-testing-status.md#network-and-online-features). - -`skeleton/SYSTEM/h700/etc/wifi/wifi_init.sh`: -- launch.sh stops NetworkManager; wifi_init owns a wpa_supplicant instance with the - control socket dir `WIFI_SOCK_DIR = /tmp/wifi/sockets` -- **Credentials persist**: `wpa_supplicant.conf` lives at - `$USERDATA_PATH/wifi/wpa_supplicant.conf` (on the SD card, `update_config=1`) — an - early version kept it in tmpfs and lost networks on reboot -- **DHCP**: Ubuntu has no udhcpc, so `dhclient` (udhcpc as fallback if someone ships - it). Re-association is handled by a generated `wpa_action` script registered via - `wpa_cli -a`: on `CONNECTED` it does `dhclient -r` + `dhclient -nw`, so switching - networks re-DISCOVERs instead of keeping a stale lease -- Teardown uses `systemctl stop wpa_supplicant …` *and* `killall` belt-and-braces -- `rfkill`: h700 builds its own minimal `/dev/rfkill` ioctl tool (03) - -Suspend interplay: WiFi does not survive `mem` suspend on its own; the suspend -script stops the stack in `before()` and restarts it in `after_async()` (06). NET-02 -records the resulting resume behavior. - -RetroAchievements uses this connection path; its current evidence is NET-03. Pak Store -and OTA are separate product scope; their recorded status and disposition are in the -[test report](08-testing-status.md#network-and-online-features) and -[roadmap](09-roadmap.md#stretch-goals-and-out-of-scope-work). - -## Bluetooth architecture (system BlueZ and stock A2DP) - -- NextUI uses the stock BlueZ stack → no `btmanager`/upgrade-pakz. A clean 2026 - RG40XXV reports 5.66 for both `bluetoothd` and `bluetoothctl`; earlier firmware - probing reported 5.64. `generic_bt.c` detects the client version at runtime. -- The stock frontend normally creates `hci0` by calling - `/mnt/vendor/ctrl/setBluetooth.sh`, but NextUI replaces that frontend before the - call occurs. `bt_init.sh` now owns that vendor attach/enable lifecycle, waits for - `hci0`, and only then starts or restarts stock `bluetooth.service`. -- Bluetooth lifecycle failures are recorded in - `$LOGS_PATH/bluetooth.txt` instead of being silently discarded. -- `HAS_BTAGENT` is enabled for H700 (the Settings pairing agent; the Jammy sysroot - supplies glib). Settings registers it as BlueZ's default agent while the Bluetooth - menu/pairing window is active and unregisters it after a successful pairing. The - init script enables discoverable/pairable state but does not run a - `bluetoothctl` agent. -- **BT audio: stock-first A2DP enabled** — the clean 2026 RG40XXV stock image has - BlueALSA 4.2.0, its ALSA plugins/configuration, and its D-Bus policy. `bt_init.sh` - starts `bluealsa -p a2dp-source --initial-volume=100` after BlueZ is ready and - verifies `org.bluealsa`. It intentionally keeps BlueALSA's default volume mode; - `--a2dp-volume` can leave AirPods at volume zero on this firmware. The H700 - `audiomon` build omits only the - `delay 0` setting rejected by the stock plugin; its remaining behavior is shared. - BlueALSA, its ALSA plugins, SBC, and BlueZ all remain stock and are not bundled or - replaced. For AirPods 4 ANC, NextUI retains pairing, manual Connect selects the - audio route, and casing the buds returns audio to the internal speaker. Auto-connect - is not assumed because nearby paired iPhone or Mac devices may take precedence. See - AUDIO-04 for the recorded evidence and the - [roadmap](09-roadmap.md#accepted-behavior-and-non-gates) for the supported path. -- BT controller transport: Settings discovers, pairs, trusts, connects, and exposes a - DualSense as an SDL joystick and evdev input device; INPUT-05 records the device - evidence. - Button semantics are not fully normalized because the shared tg5040/tg5050/H700 - input architecture interprets raw SDL joystick indices using platform constants. - That is a cross-platform controller-mapping issue rather than a controller - transport failure. INPUT-05 and INPUT-06 record the observed attachment and mapping - results. - -## Diagnostics - -`PLAT_wifiDiagnosticsEnabled/Enable` + BT equivalents: tg5040 mechanism (verbose logs -under `$LOGS_PATH`) carried over. H700 has no separate keep-network flag or crash-loop -SSH rescue path. Collect logs from TF2 after poweroff or use stock SSH while the device -is already reachable. diff --git a/docs/h700-port/08-testing-status.md b/docs/h700-port/08-testing-status.md deleted file mode 100644 index 87d80911a..000000000 --- a/docs/h700-port/08-testing-status.md +++ /dev/null @@ -1,178 +0,0 @@ -# 08 — Testing Status - -This document is the canonical H700 test report. It records what was tested, the -result, and the device that supplied the evidence. It does not decide whether a test -blocks Alpha, Beta, RC, or Release; those decisions live in -[09-roadmap.md](09-roadmap.md). Detailed per-core coverage lives in -[10-core-game-matrix.md](10-core-game-matrix.md). - -Results recorded through 2026-08-09. Artifact lineage: Alpha → `h700-beta1` → -`h700-rc1`…`h700-rc8`. **`h700-rc8` is GM** (rebuild on the NextUI v6.14.0 commit to -keep RetroAchievements working; see [09](09-roadmap.md#current-position)). - -## Status and evidence rules - -| Status | Meaning | -|---|---| -| ✅ Pass | The stated test completed successfully | -| ⚠️ Partial | Useful behavior passed, but the row has a known issue or incomplete coverage | -| ⬜ Not run | No completed result is recorded yet | -| ➖ Not applicable | The behavior is unsupported or guaranteed by design rather than a runtime test | -| ❌ Fail | The stated test failed | - -The H700 devices share one platform implementation, SoC, stock-OS integration, and -core runtime. A successful shared-runtime test on one representative H700 device -counts for the family. Repeat it on another model only when panel geometry/rotation, -lid, controls, connectors, firmware, or model-specific code differs, or when evidence -suggests a model-specific regression. A named device is the evidence source, not a -limit on support. - -## Test fleet - -| Device | Evidence | Hardware coverage | -|---|---|---| -| RG40XXV | Probed live | 640×480, one stick, HDMI, Bluetooth audio; family baseline | -| RG34XXSP | User-tested | 720×480, dual sticks, clamshell lid | -| RG28XX | User-tested | 480×640 portrait panel and rotation | -| RGcubexx | Community-tested | 720×720 general UI scaling only | -| TrimUI Brick TG5040 | Probed live | Shared-code regression reference | - -## Build and binary compatibility - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| BUILD-01 | CI-style H700 staging build (`make setup`, then `make h700`) | ✅ | CI/release build | H700 binaries, tools, cores, libraries, boot shim, and installer assets stage successfully | -| BUILD-02 | Full tg5040 regression build after shared-code changes | ✅ | TrimUI Brick / shared `h700-rc8` artifact | Same candidate runs on tg5040. Users report LedControl settings do not stick on TrimUI in this version ([#23](https://github.com/pvaibhav/NextUI/issues/23)); H700 LED path is separate (LED-01…), treat as a tg5040 regression to track rather than an H700 build failure | -| BUILD-03 | Jammy `settings.elf` runtime linkage check | ✅ | Automated container check | H700 library path resolves and required gio/glib linkage is present | -| BUILD-04 | Bundled curl static linkage and HTTPS | ✅ | arm64 Jammy container | Pinned musl curl 8.21.0 + OpenSSL 3.5.7 has no dynamic section; DNS and TLS reach the RetroAchievements API using the bundled CA file (HTTP 422 is the expected unauthenticated response) | - -## Boot, install, and launcher - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| BOOT-01 | Cold boot to NextUI and 10+ reboot soak | ✅ | RG40XXV | Stable boot with reasonable startup time | -| BOOT-02 | Stock-card hijack with the required **old style** theme | ✅ | RG40XXV/RG34XXSP | `/mnt/mmc/dmenu.bin` launches NextUI from TF2 | -| BOOT-03 | Repeated launcher crash limit | ➖ | Design / accepted | Five-crash cutoff then poweroff is implemented; deliberately not required as an induced E2E release gate for `h700-rc8` | -| BOOT-04 | Remove `dmenu.bin` to restore stock boot | ➖ | Design inspection | Stock `dmenu_ln` cannot launch NextUI when the single hijack file is absent; no separate uninstall workflow exists | -| BOOT-05 | Stock **MU style** theme behavior | ✅ | On-device observation | MU style bypasses `/mnt/mmc/dmenu.bin` and boots the stock/MU frontend; NextUI cannot display an in-shim warning | - -## Display and user interface - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| DISP-01 | Launcher, settings, keyboard, and in-game UI rendering | ✅ | RG40XXV, RG34XXSP, RG28XX | Clean rendering at 640×480, 720×480, and rotated 480×640 | -| DISP-02 | Brightness 0–10 and color-temperature behavior/persistence | ✅ | RG40XXV | Controls act and persist; fresh default brightness is 4 | -| DISP-03 | DisplayCal RGB gains, persistence, sleep, and game launch | ✅ | RG40XXV, RG34XXSP | Gains act and persist across reboot, sleep, and game launch | -| DISP-04 | Dead enhance controls and Fn-switch settings hidden | ✅ | RG40XXV/code inspection | Contrast/saturation/exposure and the nonexistent RG XX Fn switch are capability-gated | -| DISP-05 | Shaders, overlay pipeline, and effects on Mali-G31 | ✅ | RG40XXV | All shipped GLSL paths tested; this tests the pipeline, not panel-sized overlay content | -| DISP-06 | Box art, game switcher, and alpha-blended assets | ✅ | RG34XXSP | Clean at 720×480 after the 64-bit libpng fix | -| DISP-07 | Screenshots | ✅ | RG34XXSP | Capture succeeds at 720×480 | -| DISP-08 | HDMI video hotplug and scaling | ✅ | RG40XXV + TV | Menu and game output, plug/unplug in both directions, repeated cycles, autosave/resume, and 1280×720 framebuffer scaling pass | - -## Input and controllers - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| INPUT-01 | Local controls in launcher, games, and menus | ✅ | RG40XXV, RG34XXSP, RG28XX | Raw evdev input path works across tested models | -| INPUT-02 | MENU short tap versus hold | ✅ | RG34XXSP | Short tap opens shortcuts; hold changes brightness despite the firmware compound event | -| INPUT-03 | Per-device stick layout, analog movement, and L3/R3 | ✅ | RG40XXV, RG34XXSP | The Input pak correctly visualizes the RG40XXV left stick and the RG34XXSP left/right sticks, including movement and their L3/R3 clicks | -| INPUT-04 | Rumble | ✅ | RG40XXV | `moto` on/off path works | -| INPUT-05 | Bluetooth controller discovery, pairing, and attachment | ✅ | RG40XXV + DualSense | Discovers, pairs, trusts, connects, and exposes SDL joystick plus evdev; five restart cycles produced no duplicate daemon/attach processes | -| INPUT-06 | Bluetooth controller semantic mapping | ⚠️ | DualSense/shared tg50x0 path | Attachment passes, but raw button indices vary by controller and are not normalized across platforms | - -## Audio - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| AUDIO-01 | Internal volume UI, mute, and levels from 0–100% | ✅ | RG40XXV, RG34XXSP | Audible levels and reversed `digital volume` scale behave correctly | -| AUDIO-02 | Game audio and underruns | ✅ | RG40XXV, tested RG34XXSP games | GBA/SNES and broader gameplay have clean audio with no observed underruns | -| AUDIO-03 | Headphone insertion and speaker routing | ✅ | RG34XXSP | Hardware auto-mutes the speaker and routes to headphones; NextUI does not expose a separate HP icon/volume | -| AUDIO-04 | Bluetooth A2DP pairing and playback | ✅ | RG40XXV + AirPods 4 ANC | Pairing is remembered; manual Connect routes audible SBC audio; returning AirPods to the case restores the internal speaker. Nearby iPhone/Mac devices may win auto-connect. One post-sleep auto-repair report is expected-not-supported behavior pending triage ([#20](https://github.com/pvaibhav/NextUI/issues/20)) | -| AUDIO-05 | HDMI audio routing and restoration | ✅ | RG40XXV + TV | HDMI route is audible; unplug restores the panel/internal route | - -## Network and online features - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| NET-01 | WiFi scan, connect, and forget | ✅ | RG40XXV | NextUI-owned wpa_supplicant path works | -| NET-02 | WiFi after sleep and NTP synchronization | ✅ | RG40XXV | Network recovers after sleep and system time synchronizes | -| NET-03 | RetroAchievements login and unlock | ✅ | RG34XXSP | Credential entry through the on-screen keyboard and achievement unlock pass | -| NET-04 | Pak Store install | ➖ | Scope | Not exercised for the H700 port | -| NET-05 | OTA update flow | ➖ | Scope | Not exercised for the H700 port | - -## Power, sleep, and battery - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| POWER-01 | Manual/automatic deep sleep and wake | ✅ | RG40XXV, RG34XXSP | Repeated sleep/wake, in-game resume, and wake without the former ALSA delay pass | -| POWER-02 | Fast resume and power-off auto-resume | ✅ | RG40XXV, RG34XXSP | Resume returns to the running game as designed | -| POWER-03 | RG34XXSP lid close/open | ✅ | RG34XXSP | Close sleeps and open wakes. POWER may wake light sleep with lid closed; deep sleep re-sleeps while the lid remains closed | -| POWER-04 | Charging indication and sleep while charging | ✅ | RG34XXSP | Indicator works; shared product behavior permits light/screen-off sleep and suppresses deep sleep while charging | -| POWER-05 | Battery percentage versus stock | ✅ | RG34XXSP | Fresh-boot percentage matches stock; after long sleep the top-bar icon and Battery pak briefly disagreed with each other | -| POWER-06 | Overnight suspend drain versus stock | ✅ | RG34XXSP | Sleep-drain work completed and verified against stock OS | - -## Games and performance - -See [10-core-game-matrix.md](10-core-game-matrix.md) for the game-by-game ledger. - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| GAME-01 | Browse, launch, play, menu, save/load, and clean exit | ✅ | RG40XXV, RG34XXSP | Primary system pak/core flow works end to end | -| GAME-02 | GB/GBC/GBA/FC/SFC gameplay smoke | ✅ | RG34XXSP | Tested games launch and play correctly | -| GAME-03 | MD/PicoDrive launch, gameplay, and Auto CPU | ✅ | RG34XXSP | Former slowdown near 480 MHz is fixed | -| GAME-04 | PS1/PCSX-ReARMed launch and performance | ✅ | RG40XXV, RG34XXSP | Clean core rebuild fixed the stale/corrupted packaged artifact | -| GAME-05 | FBNeo happy path and missing-BIOS error path | ⚠️ | RG34XXSP | With required BIOS, launch/play pass. Without BIOS, the upstream core stops polling frontend input and MinArch cannot open menu/exit | -| GAME-06 | Remaining EXTRAS core smoke | ⚠️ | RG34XXSP (maintainer) | Maintainer-tested Pass: A2600, mGBA, SMS, and Pico-8 (Fake-08). Remaining long-tail systems in [10](10-core-game-matrix.md) are untested by the maintainer; other users may have exercised them — no specific bug reports so far. Known incomplete coverage, not a merge blocker | -| PERF-01 | GBA/SNES full speed with vsync | ✅ | RG40XXV, tested RG34XXSP games | Full speed with no observed audio underruns | -| PERF-02 | Frame pacing, tearing, and input latency | ✅ | RG40XXV | No visible issue during gameplay; result is observational, not instrumented | -| PERF-03 | Manual CPU governor changes during play | ✅ | RG34XXSP | Powersave/performance changes do not stutter audio | -| PERF-04 | Automatic governor load/frequency selection | ✅ | RG34XXSP | MD Auto CPU regression is resolved | -| PERF-05 | Auto governor full-range scaling | ✅ | Representative H700 device | With Auto selected, `scaling_max_freq` reaches the greatest advertised frequency (~1.5 GHz) and schedutil scales under load; no new performance, thermal, or audio regressions observed | - -## Applications and device-specific hardware - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| APP-01 | Files/NextCommander input, scaling, and first frame | ✅ | RG40XXV, RG34XXSP | Works at PPU 2 | -| APP-02 | Recently Played and game switcher | ✅ | RG40XXV, RG34XXSP | Both flows work; rendered assets are clean | -| DEV-01 | RG40XXV 640×480/single-stick baseline | ✅ | RG40XXV | UI, input, game runtime, HDMI, and Bluetooth paths pass | -| DEV-02 | RG34XXSP 720×480/lid/dual-stick delta | ✅ | RG34XXSP | UI scaling, lid, controls, apps, and games pass | -| DEV-03 | RG28XX 480×640 rotation delta | ✅ | RG28XX | UI, game Aspect/Fullscreen scaling, bootlogo apply, and rotated preview pass | -| DEV-04 | RGcubexx 720×720 delta | ✅ | Community / user confirmation | General UI scaling passes. [#18](https://github.com/pvaibhav/NextUI/issues/18) under-fill fixed (`MAIN_ROW_COUNT` 10 on cube/HDMI); user confirmed the 10-row layout on cube hardware | -| DEV-05 | Bootlogo 640×480 apply/backup | ✅ | RG40XXV | Carousel, apply, backup, and original entry pass; restore uses the same apply path | -| DEV-06 | Bootlogo 720×480 preview/apply/backup/restore | ✅ | RG34XXSP | All 23 presets render; first backup and restore pass | -| DEV-07 | Bootlogo 480×640 apply and preview orientation | ✅ | RG28XX | Applied logo and rotated previews are upright | - -## Recovery and robustness - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| ROBUST-01 | Stock `launcher.sh stop` SIGUSR1 does not terminate the NextUI boot shim | ➖ | Design / accepted | Shim uses `trap '' USR1`; not exercised end to end and not required as a Release blocker for `h700-rc8` | -| ROBUST-02 | Dirty FAT card recovery via `fsck.fat -a` | ➖ | Design / accepted | Boot `fsck.fat -a` / repair path exists; not induced end to end and not required as a Release blocker for `h700-rc8` | - -## Capability boundaries - -| ID | Test | Status | Evidence/device | Result and notes | -|---|---|---|---|---| -| CAP-01 | FN1/FN2/HOME assignable pak actions | ➖ | RG XX hardware/platform API | RG XX devices have no dedicated buttons; Settings hides the assignment UI | -| CAP-02 | Keep awake over USB data connection | ➖ | H700 platform API | `PLAT_isUSBConnected()` is a stub; charging-state power behavior is covered by POWER-04 | -| LED-01 | RGB LEDs driven over the UART5 MCU | ✅ | RG40XXV | Verified end to end: raw frames light the L stick ring, and NextUI drives it with the seeded `0x440044` default after update. Second bank drives nothing on the V, confirming `dev_num_leds = 1`. `/dev/ttyS5` is free (console and getty are on `ttyS0`) | -| LED-02 | Colour, brightness, all four effects | ✅ | RG40XXV | User-verified in LedControl | -| LED-03 | Ambient Mode narrowed to Off/On | ✅ | RG40XXV | User-verified | -| LED-04 | LedControl on a model without RGB | ✅ | RG34XXSP, RG28XX | Shows the "no RGB lights" screen, exits on B, and does not open `/dev/ttyS5` | -| LED-05 | Speed control | ✅ | RG40XXV | Rainbow/Rainbow Multi take a continuous 0-255 speed byte and vary smoothly across the whole 0-4900 range. Breathe has only the three firmware rates (modes 2/3/4), so its Speed row quantises into thirds — a known cosmetic wart, not a defect | -| LED-06 | tg5040 regression after `PLAT_getNumLeds` | ✅ | TrimUI Brick | Per-LED mapping still correct — each LED responded to its own mode change. This is the path where a wrong count would write brightness 0 to the global `max_scale` and kill every LED | -| LED-07 | Ambient Mode UI when lights ≤2 / 0 | ✅ | RG40XXV, RG34XXSP | Ambient Mode appears on RG40XXV (≤2 lights, Off/On). Hidden on RG34XXSP (0 lights / no RGB) | -| LED-01b | Two-bank models, bank order | ⚠️ | External users (RG40XX H / RG CubeXX class) | Only the right LED responds; the left cannot be changed. Likely bank-order / `H700_LED_RIGHT_FIRST` mapping. Single-bank RG40XXV path (LED-01) remains Pass. **Accepted known bug** for the merge PR — maintainer has no dual-bank device; upstream decides merge-with-bug vs wait-for-fix | - -## Test execution protocol - -- Candidate builds must record BUILD-01, BUILD-02, BUILD-03, and BUILD-04 against - the actual artifact being promoted. -- Changes under `workspace/all/` require both H700 and tg5040 builds. -- A new device needs a short shared-runtime smoke plus tests for its hardware/model - delta; it does not need the full matrix repeated without a specific risk. -- Re-run stock integration probes after an Anbernic firmware update because boot, - model detection, WiFi, Bluetooth, and sysfs paths are firmware-coupled. -- When shared code adds a button or `PLAT_*` API, verify all platform definitions and - run a full build; single-pak builds can miss translation units. diff --git a/docs/h700-port/09-roadmap.md b/docs/h700-port/09-roadmap.md deleted file mode 100644 index 3f9fe4676..000000000 --- a/docs/h700-port/09-roadmap.md +++ /dev/null @@ -1,167 +0,0 @@ -# 09 — Release Roadmap and Gates - -This document owns the H700 release lifecycle: what each stage proves, which tests -gate promotion, and what is deferred or optional. Test results are not repeated here; -every test ID points to the canonical report in -[08-testing-status.md](08-testing-status.md). Per-core detail remains in -[10-core-game-matrix.md](10-core-game-matrix.md). - -## Current position - -Alpha 1–3, Beta (`h700-beta1`), and RC1–RC8 are complete. **`h700-rc8` is the golden -master** about to be opened as the PR for official merge upstream. - -RC8 was not a feature delta over RC7: it is a rebuild that rebased the H700 port onto -the exact upstream commit used by NextUI **v6.14.0**, deliberately excluding a later -RetroAchievements-related change that prevented many achievements from triggering. -minarch was rebuilt on that base; the H700 platform work itself is otherwise the same -lineage as RC7. - -Remaining work for this document is gate/evidence hygiene for the merge PR (open -rows in 08, any unsettled RC/Release checklist items), not further Alpha/Beta bring-up. - -## Stage roadmap - -The Alpha rows normalize the completed bring-up history into clear stage scopes; use -these definitions when reading older alpha artifacts and commit notes. - -| Stage | Purpose and issue focus | Required test areas | Status / exit | -|---|---|---|---| -| Alpha 1 — platform bring-up | Prove stock-card boot, basic display/input/audio, WiFi, and playable cores on the RG40XXV baseline | [BUILD-01](08-testing-status.md#build-and-binary-compatibility), [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | ✅ Complete | -| Alpha 2 — family expansion | Fix sleep/Files/UI regressions and prove real hardware deltas: RG34XXSP panel/lid/sticks, RG28XX rotation, Bootlogo sizes, and shared capability gating | [POWER-01, POWER-03](08-testing-status.md#power-sleep-and-battery), [APP-01](08-testing-status.md#applications-and-device-specific-hardware), [DISP-02, DISP-03, DISP-04, DISP-05, DISP-06, DISP-07](08-testing-status.md#display-and-user-interface), [INPUT-02, INPUT-03](08-testing-status.md#input-and-controllers), [DEV-02, DEV-03, DEV-05, DEV-06, DEV-07](08-testing-status.md#applications-and-device-specific-hardware) | ✅ Complete | -| Alpha 3 — Beta hardening | Close feature gaps and ambiguous policies: HDMI, Bluetooth controller/audio, screenshots, headphone route, MD Auto CPU, PS1 packaging, and representative core smoke | [DISP-08](08-testing-status.md#display-and-user-interface), [INPUT-05](08-testing-status.md#input-and-controllers), [AUDIO-03, AUDIO-04, AUDIO-05](08-testing-status.md#audio), [GAME-03, GAME-04, GAME-06](08-testing-status.md#games-and-performance), [PERF-04](08-testing-status.md#games-and-performance) | ✅ Complete; partial long-tail rows are classified below | -| Beta — public validation | Publish the supported H700 family build, collect broader device/firmware evidence, and fix any new critical regression | Beta entry gates below | ✅ Complete (`h700-beta1`) | -| RC — release qualification | Freeze scope, close recovery checks, validate the packaged candidate, and accept or fix all Beta findings | RC entry gates below | ✅ Complete through `h700-rc8` (GM) | -| Release — supported baseline | Promote an RC with no open release blocker and with support/known-issue documentation matching behavior | Release gates below | ✅ Release gates satisfied for `h700-rc8`; open the upstream merge PR | - -## Beta entry gates - -All required rows must pass on the Beta artifact. Family-level evidence is sufficient -unless the code or hardware differs. - -| Gate | Required tests | Current disposition | -|---|---|---| -| Candidate build integrity | [BUILD-01, BUILD-02, BUILD-03, BUILD-04](08-testing-status.md#build-and-binary-compatibility) | Satisfied on `h700-rc8`; BUILD-02 notes a tg5040 LedControl persistence report ([#23](https://github.com/pvaibhav/NextUI/issues/23)) | -| Boot and shared runtime | [BOOT-01, BOOT-02](08-testing-status.md#boot-install-and-launcher), [DISP-01](08-testing-status.md#display-and-user-interface), [INPUT-01](08-testing-status.md#input-and-controllers), [AUDIO-01, AUDIO-02](08-testing-status.md#audio), [NET-01](08-testing-status.md#network-and-online-features), [GAME-01](08-testing-status.md#games-and-performance) | Satisfied | -| Power and resume | [POWER-01, POWER-02](08-testing-status.md#power-sleep-and-battery) | Satisfied | -| Hardware deltas | [DEV-01, DEV-02, DEV-03, DEV-04](08-testing-status.md#applications-and-device-specific-hardware) | Satisfied (DEV-04 user-confirmed on cube) | -| HDMI | [DISP-08](08-testing-status.md#display-and-user-interface), [AUDIO-05](08-testing-status.md#audio) | Satisfied | -| Bluetooth audio | [AUDIO-04](08-testing-status.md#audio) | Satisfied | -| Core/performance baseline | [GAME-02, GAME-03, GAME-04](08-testing-status.md#games-and-performance), [PERF-01, PERF-04](08-testing-status.md#games-and-performance) | Satisfied | -| Auto CPU full range | [PERF-05](08-testing-status.md#games-and-performance) | Satisfied | - -## Beta planned work - -| Work | Priority / target | Completion condition | -|---|---|---| -| ~~Auto governor full-range scaling~~ | Was required for Beta | ✅ [PERF-05](08-testing-status.md#games-and-performance) passed on hardware | -| Per-model out-of-box defaults | **Post-merge enhancement** (not a `h700-rc8` merge blocker) | Ship tested H700-model profiles covering shader choice, emulator/core options, and relevant frontend defaults so each model starts with sensible settings | - -The per-model profiles remain an intentional H700-specific departure from NextUI's -otherwise barebones cross-platform defaults. Keep the overrides narrow, documented, -and tested so they improve first-run behavior without silently changing other -platforms. They are **not** required to open or merge the upstream PR. - -Beta does not require every device or long-tail core to be tested. A new Beta finding -becomes a Beta blocker only when it causes data loss, prevents boot/gameplay on the -supported baseline, breaks a promised feature, or shows that family-level evidence -does not generalize. - -## RC entry gates - -| Gate | Exit condition | -|---|---| -| Beta blocker closure | Every critical/high-impact Beta regression is fixed, or the affected feature/model is explicitly removed from RC scope | -| Recovery | — | [BOOT-03](08-testing-status.md#boot-install-and-launcher), [ROBUST-01](08-testing-status.md#recovery-and-robustness), and [ROBUST-02](08-testing-status.md#recovery-and-robustness) are accepted non-gates (code present; induced E2E not required for `h700-rc8`) | -| Packaged build | [BUILD-01, BUILD-02, BUILD-03, BUILD-04](08-testing-status.md#build-and-binary-compatibility) pass on the RC artifact | -| Regression smoke | [BOOT-01](08-testing-status.md#boot-install-and-launcher), [GAME-01, GAME-04](08-testing-status.md#games-and-performance), [POWER-01, POWER-02](08-testing-status.md#power-sleep-and-battery), [NET-02](08-testing-status.md#network-and-online-features), and [AUDIO-02, AUDIO-04](08-testing-status.md#audio) are rerun on a representative H700 device | -| Hardware-change targeting | Re-run the relevant DEV/INPUT/DISP row only when Beta changes touch that hardware delta | -| Documentation | Install prerequisites, supported models, and accepted issues below match the RC behavior | - -## Release gates - -| Gate | Exit condition | Disposition (`h700-rc8`) | -|---|---|---| -| RC soak | No unresolved boot, suspend/resume, audio-route, save-state, or data-integrity regression is found during RC use | ✅ Satisfied | -| Final artifact | BUILD-01, BUILD-02, BUILD-03, BUILD-04, and the RC regression smoke pass on the exact release package | ✅ Satisfied on `h700-rc8`. AUDIO-04 remains Pass; one report of no automatic BT re-pair after sleep/wake is expected-not-to-work and filed for triage ([#20](https://github.com/pvaibhav/NextUI/issues/20)) | -| Known issues | Every accepted partial/failing row is documented with user impact and workaround where one exists | ✅ Documented. Includes accepted known bug [LED-01b](08-testing-status.md#capability-boundaries) (dual-bank left LED; no maintainer test device — upstream merge call). Other non-blockers: INPUT-06, GAME-05, GAME-06, [#20](https://github.com/pvaibhav/NextUI/issues/20), [#23](https://github.com/pvaibhav/NextUI/issues/23) | -| Support boundary | Supported family behavior, hardware-specific exceptions, firmware prerequisites, and out-of-scope features are explicit | ✅ Satisfied as the docs stand (`README` install/theme notes, accepted non-gates, stretch/out-of-scope, and 08/10 known partials) | -| Rollback | The one-file `dmenu.bin` removal path and old-style-theme prerequisite are present in release instructions | ✅ Satisfied (`skeleton/BASE/README.txt`) | - -## Accepted behavior and non-gates - -These are settled decisions, not unfinished stage work. - -| Item | Test evidence | Decision | -|---|---|---| -| AirPods do not always auto-connect | [AUDIO-04](08-testing-status.md#audio) | AirPods may prefer a nearby paired iPhone/Mac. Remembered pairing plus manual Connect is the supported path | -| No automatic BT audio re-pair after sleep/wake | [AUDIO-04](08-testing-status.md#audio) / [#20](https://github.com/pvaibhav/NextUI/issues/20) | Not a supported promise; manual Connect remains the path. Filed for triage, not a `h700-rc8` Release blocker | -| RG34XXSP POWER while lid is closed | [POWER-03](08-testing-status.md#power-sleep-and-battery) | Light sleep may wake; deep sleep re-sleeps while the lid remains closed | -| Charging permits light sleep only | [POWER-04](08-testing-status.md#power-sleep-and-battery) | Shared product behavior is accepted | -| FBNeo missing-BIOS hard-lock | [GAME-05](08-testing-status.md#games-and-performance) | Upstream core defect; ship as a known issue. Valid-BIOS gameplay passes | -| Long-tail EXTRAS core smoke incomplete | [GAME-06](08-testing-status.md#games-and-performance) | Maintainer covered A2600 / mGBA / SMS / Pico-8; remaining systems in [10](10-core-game-matrix.md) stay untested by the maintainer with no specific user bug reports — known, not a merge blocker | -| Two-bank RGB left stick dead | [LED-01b](08-testing-status.md#capability-boundaries) | **Accepted known bug** for the `h700-rc8` PR: dual-bank models report only the right LED changeable. Maintainer has no dual-bank test device. Upstream may merge with this open or wait for a fix; not silently treated as Pass | -| Clean uninstall exercise | [BOOT-04](08-testing-status.md#boot-install-and-launcher) | Not a runtime gate; deleting the only hijack file restores stock boot by design | -| Stock MU-style theme | [BOOT-05](08-testing-status.md#boot-install-and-launcher) | Install prerequisite: use old style. MU style bypasses NextUI before its code runs | -| Full matrix on every H700 model | [Test rules](08-testing-status.md#status-and-evidence-rules) | Not required without a hardware/firmware delta or contrary evidence | -| FN1/FN2/HOME and keep-awake-over-USB | [CAP-01, CAP-02](08-testing-status.md#capability-boundaries) | Unsupported RG XX/Brick-specific capabilities; not release promises | -| Crash-loop cutoff exercise | [BOOT-03](08-testing-status.md#boot-install-and-launcher) | Guard exists in the launcher; inducing the five-crash poweroff path is not a Release blocker for `h700-rc8` | -| Stock-launcher SIGUSR1 resilience | [ROBUST-01](08-testing-status.md#recovery-and-robustness) | Shim ignores USR1 by design; untested end to end and not a Release blocker for `h700-rc8` | -| Dirty-card recovery exercise | [ROBUST-02](08-testing-status.md#recovery-and-robustness) | Boot fsck/repair path exists; untested end to end and not a Release blocker for `h700-rc8` | - -## Deferred from Beta to RC - -All former recovery deferrals ([BOOT-03](08-testing-status.md#boot-install-and-launcher), -[ROBUST-01](08-testing-status.md#recovery-and-robustness), -[ROBUST-02](08-testing-status.md#recovery-and-robustness)) and the cross-platform -build check ([BUILD-02](08-testing-status.md#build-and-binary-compatibility)) are -resolved for `h700-rc8`: BUILD-02 passed; the recovery rows are accepted non-gates. -See [Accepted behavior and non-gates](#accepted-behavior-and-non-gates). - -## Future hardening - -These improve confidence or breadth but do not gate the current release unless new -evidence turns one into a supported-baseline defect. - -| Work | Evidence / next result needed | -|---|---| -| Battery UI consistency | Reproduce the top-bar versus Battery-pak desynchronization noted in POWER-05 | -| Bluetooth soak | Longer suspend/resume, device-switch, and game-switch cycles beyond the passing AUDIO-04 path; triage [#20](https://github.com/pvaibhav/NextUI/issues/20) (no auto re-pair after sleep) | -| Controller normalization | Fix and retest [INPUT-06](08-testing-status.md#input-and-controllers) across tg5040/tg5050/H700 | -| TrimUI LedControl persistence | [BUILD-02](08-testing-status.md#build-and-binary-compatibility) / [#23](https://github.com/pvaibhav/NextUI/issues/23) — settings do not stick on tg5040 with the shared `h700-rc8` lineage; not an H700 LED failure | -| Bluetooth audio-link detection | Distinguish A2DP from controller-only ACL links before applying sample-rate policy | -| Long-tail core coverage | Expand [GAME-06](08-testing-status.md#games-and-performance) and the matrix in [10](10-core-game-matrix.md) — known incomplete, not a merge blocker | -| RGcubexx deeper functional/core walk | [DEV-04](08-testing-status.md#applications-and-device-specific-hardware) UI/10-row layout is Pass; optional broader core coverage on cube remains post-merge | -| Two-bank LED bank order | [LED-01b](08-testing-status.md#capability-boundaries) — accepted known bug (left LED unchangeable on dual-bank reports); fix when a dual-bank device is available or a remote repro lands. Upstream may hold the merge on this | -| Additional model strings | Confirm remaining RG35XX-family `RGXX_MODEL` values on hardware (`RG40xxH` / `RGSP` / etc. already confirmed from firmware) | - -## Enhancements - -| Enhancement | Scope | -|---|---| -| H700 overlay packs | Ship useful overlays for 640×480, 720×480, and 720×720 logical output. Target Beta if tested packs are ready; otherwise ship after Release. This is not a Beta gate because the rendering pipeline already passes DISP-05 | -| Per-panel DisplayCal defaults | Partly done: RG28XX, RG34XXSP, RG SP, and RG40XXV ship calibrated enabled presets. Remaining H700 models stay neutral until measured | -| Headphone UI | Optional HP icon and independent headphone volume; hardware routing already passes AUDIO-03 | -| Richer battery metrics | Add voltage, charge-counter, and time-to-empty data to the battery model | -| Broader per-game tuning | Extend the planned post-merge per-model defaults only where a core or title demonstrably needs a narrower override | -| Per-model out-of-box defaults | Post-merge: shader / emulator / frontend defaults per H700 model (not a `h700-rc8` merge blocker) | -| 720×480 Files density | Evaluate PPU 3; PPU 2 already passes APP-01 | - -## Stretch goals and out-of-scope work - -| Item | Classification | -|---|---| -| Broader HDMI EDID/display compatibility | Stretch: fixed-mode HDMI already passes; add fallback modes when real displays require them | -| Panel-Fix tool | Stretch feature | -| Jammy-matched libasound / richer H700 sysroot | Optional: SDL2 already prebaked; BlueZ not in image | -| Pak Store | Separate product scope; NET-04 is not exercised for this port | -| OTA updates | Separate product scope; NET-05 is not exercised for this port | - -## Next actions - -1. Open the upstream merge PR from the `h700-rc8` golden master (rebased on the - NextUI v6.14.0 commit so RetroAchievements behave correctly). -2. Keep post-merge follow-ups in Future hardening / Enhancements (per-model defaults, - long-tail cores, [#20](https://github.com/pvaibhav/NextUI/issues/20), - [#23](https://github.com/pvaibhav/NextUI/issues/23), remaining LED fleet gaps). -3. After merge, promote documentation and tags to the published Release baseline. diff --git a/docs/h700-port/10-core-game-matrix.md b/docs/h700-port/10-core-game-matrix.md deleted file mode 100644 index d506384bb..000000000 --- a/docs/h700-port/10-core-game-matrix.md +++ /dev/null @@ -1,64 +0,0 @@ -# 10 — Core & Game Compatibility Matrix - -This is the system-by-system H700 compatibility ledger and the detailed evidence -behind the games and performance rows in [08-testing-status.md](08-testing-status.md#games-and-performance). -It records test coverage, reproducible issues, and device-specific differences; -[09-roadmap.md](09-roadmap.md) decides lifecycle requirements. The first pass is on -RG34XXSP (720×480); add RG40XXV and other RG XX results where behavior differs. - -The existing results predate the full protocol below. A green initial result means -launch and gameplay were reported good; it does not yet imply every protocol step was -repeated for that system. - -✅ passed ⚠️ launches or reaches the core but has an issue ⬜ untested - -## Minimum test per system - -1. Launch at least one known-good ROM with required BIOS files present. -2. Verify video, audio, controls, in-game menu, clean exit, save and load state. -3. Play for at least 10 minutes on Auto CPU and note frequency/performance anomalies. -4. Exercise sleep/resume and power-off auto-resume for representative major systems. -5. Record the exact game, format, shader, scale, interpolation, CPU profile, and BIOS - state for every failure. - -## RG34XXSP results (updated 2026-07-20) - -| System | Core | Status | Evidence / issue | -|---|---|---|---| -| GB | Gambatte | ✅ | Launch and gameplay perfect | -| GBC | Gambatte | ✅ | Launch and gameplay perfect | -| GBA | gpSP | ✅ | Launch and gameplay perfect | -| FC | FCEUmm | ✅ | Launch and gameplay perfect | -| SFC | Snes9x | ✅ | Launch and gameplay perfect | -| MD | PicoDrive | ✅ | Launch and gameplay good. Former Auto CPU slowdown (some shader/scale combos stuck near 480 MHz) is fixed — user-verified 2026-07-20 | -| FBN | FBNeo | ⚠️ | With required BIOS: launch and play OK (2026-07-20). Without BIOS: MinArch hard-locks (no menu/exit; power cycle required). The upstream FBNeo error path does not poll frontend input. Track upstream. | -| PS | PCSX-ReARMed | ✅ | Launch and gameplay pass after a clean core rebuild. The earlier crashes across 2–3 titles were caused by a stale/corrupted core, not a model-specific runtime defect. H700 `PS.pak/default.cfg` binds L3/R3 for DualShock stick clicks | -| 32X | PicoDrive | ⬜ | — | -| A2600 | Stella 2014 | ✅ | Launch and gameplay pass (2026-07-20) | -| A5200 | a5200 | ⬜ | — | -| A7800 | ProSystem | ⬜ | — | -| C128 | VICE x128 | ⬜ | — | -| C64 | VICE x64 | ⬜ | — | -| COLECO | Gearcoleco | ⬜ | — | -| CPC | Caprice32 | ⬜ | — | -| FDS | FCEUmm | ⬜ | — | -| GG | PicoDrive | ⬜ | — | -| LYNX | Handy | ⬜ | — | -| MGBA | mGBA | ✅ | Alternate GBA core — launch and gameplay pass (2026-07-20) | -| MSX | blueMSX | ⬜ | — | -| NGP | RACE | ⬜ | — | -| NGPC | RACE | ⬜ | — | -| P8 | Fake-08 | ✅ | Launch and gameplay pass (maintainer-tested) | -| PCE | Mednafen PCE Fast | ⬜ | — | -| PET | VICE xpet | ⬜ | — | -| PKM | PokeMini | ⬜ | — | -| PLUS4 | VICE xplus4 | ⬜ | — | -| PRBOOM | PrBoom | ⬜ | — | -| PUAE | PUAE 2021 | ⬜ | — | -| SEGACD | PicoDrive | ⬜ | — | -| SG1000 | PicoDrive | ⬜ | — | -| SGB | mGBA | ⬜ | — | -| SMS | PicoDrive | ✅ | Launch and gameplay pass (2026-07-20) | -| SUPA | Supafaust | ⬜ | Alternate SNES core | -| VB | Mednafen VB | ⬜ | — | -| VIC | VICE xvic | ⬜ | — | diff --git a/docs/h700-port/README.md b/docs/h700-port/README.md deleted file mode 100644 index 2556b348d..000000000 --- a/docs/h700-port/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# NextUI → Allwinner H700 (Anbernic RG XX) Port - -**Goal:** NextUI on the Anbernic RG XX line (Allwinner H700) with feature parity with -the TrimUI Brick (tg5040) — displaycal, WiFi/BT, first-class sleep — installed *on top -of the stock Anbernic OS*, no reflash, fully reversible. - -**Lifecycle:** `h700-rc8` is golden master — the build intended for the upstream merge -PR. See [09](09-roadmap.md) for stage gates and [08](08-testing-status.md) for -current evidence. - -This directory is the H700 maintainer knowledge base. Documents 00–07 record durable -facts, architecture, decisions, rationale, failure analysis, diagnostics, and lessons -for future platform ports. They may say how a fact was established, but they do not -own current release status. Documents 08–10 are the operational ledgers for tests, -release planning, and per-core coverage. - -## Documents - -| Doc | Role | Contents | -|---|---|---| -| [00-device-facts.md](00-device-facts.md) | Knowledge base | Probed hardware/OS facts, sysfs/ioctl/evdev reference, stock boot chain, known unknowns | -| [01-toolchain-and-build.md](01-toolchain-and-build.md) | Knowledge base | dedicated h700-toolchain image, in-tree SDL2, dependency policy, and cross-toolchain lessons | -| [02-boot-and-installer.md](02-boot-and-installer.md) | Knowledge base | `dmenu.bin` hijack, storage/write policy, boot shim, installer, and launcher responsibilities | -| [03-platform-layer.md](03-platform-layer.md) | Knowledge base | Platform API map, device detection, evdev/SDL input split, libmsettings, keymon, and cores | -| [04-video-display.md](04-video-display.md) | Knowledge base | Mali/fbdev architecture, geometry, rotation and HDMI decision records, DisplayCal, graphics incidents | -| [05-audio.md](05-audio.md) | Knowledge base | ALSA architecture, symbol-versioning incident, routing, Bluetooth audio, and sample-rate constraints | -| [06-power-sleep-battery.md](06-power-sleep-battery.md) | Knowledge base | Sleep architecture/postmortem, lid semantics, charging behavior, battery facts, and governors | -| [07-wifi-bluetooth.md](07-wifi-bluetooth.md) | Knowledge base | Stock components, NextUI ownership boundaries, lifecycle scripts, and diagnostics | -| [08-testing-status.md](08-testing-status.md) | Test ledger | Stable test IDs, current results, evidence devices, and model-specific details | -| [09-roadmap.md](09-roadmap.md) | Release policy | Alpha 1/2/3, Beta, RC, and Release gates; deferrals, future work, enhancements, and stretch goals | -| [10-core-game-matrix.md](10-core-game-matrix.md) | Test ledger | Per-system/core/game evidence and emulator defects underlying the GAME test rows | - -## Architecture in one paragraph - -One `h700` platform serves rg40xx/rg34xx/rg28xx/cube (`DEVICE` env, detected at boot -from the stock dmenu.bin binary). It builds inside the **h700-toolchain image** (same -aarch64/A53 target and TG5040-derived SDK sysroot as the historical tg5040 reuse, -forward-compatible glibc) with mali-fbdev SDL2 prebaked in the toolchain image -(`JohnnyonFlame/SDL-malifbdev-rot`) targeting the Mali blob's fbdev EGL winsys. -NextUI's shared `generic_video.c`/`generic_wifi.c`/`generic_bt.c` run unchanged. Boot -is hijacked by dropping one `dmenu.bin` file on the stock card's FAT partition; NextUI -itself lives entirely on TF2. The stock Ubuntu userland is used aggressively -(systemd, timedatectl, dhclient, firmware-provided BlueZ, stock unzip) rather than -bundled around. - -## Key decisions — outcome register - -| Decision | Planned | Shipped / outcome | -|---|---|---| -| Platform | one `h700`, `DEVICE` env per device | ✅ as planned | -| Arch / toolchain | 64-bit; dedicated `h700-toolchain` (TG5040 SDK recipe) | ✅ dedicated image; sysroot-mismatch pitfalls catalogued in 01 | -| SDL2 | malifbdev-rot in h700-toolchain | ✅ prebaked in image; early only stages libs | -| Video | generic_video GLES pipeline on Mali blob | ✅ core pipeline works; multi-panel UI scaling + box art pass; panel-matched overlay assets not shipped | -| **Input** | SDL joystick route | **Deviation:** raw evdev remains primary for the built-in pad; the SDL classification fix makes enumeration work, but the built-in SDL ordering differs from external-pad `JOY_*` mappings and would duplicate/mis-map events. SDL is retained for external pads (03) | -| **Audio linkage** | SDK libasound, bundled | **Deviation:** dlopen'd device libasound (`--enable-alsa-shared`) after a symbol-versioning bug caused glitchy audio (05) | -| **BT audio** | build + ship bluealsa | **Deviation:** use the stock BlueALSA/ALSA/SBC/BlueZ stack, with an H700-only ALSA option adjustment, initial mixer volume, and post-connect mixer update (05/07) | -| Sleep | `echo mem` + tg5040-style wrapper | ✅ shared power architecture retained; target-specific service and ALSA sequencing documented in 06 | -| Lid | hallkey → PLAT lid API | ✅ sysfs-polled lid integrated with the shared sleep request API (06) | -| WiFi | NextUI-owned wpa_supplicant | ✅ as planned; creds on SD, dhclient + wpa_action renew (07) | -| Rumble | moto sysfs | ✅ as planned; tested-good | -| LEDs | MAX_LIGHTS 0 — "no RGB on RG XX" | **Reversed.** RG40XX H/V and RG CubeXX do have RGB, driven by an MCU over UART5 rather than `/sys/class/leds`, which is why the first probe missed them (03) | -| Brightness / displaycal | same disp ioctls as tg5040 | ✅ 1:1 as predicted, tested-good incl. sleep survival | -| Install | TF1 gets one file; NextUI on TF2; no TF1-only mode | ✅ as planned; TF1 writes mountpoint+cmp guarded | -| **Splash** | per-panel raw-BMP `dd` assets | **Deviation:** `fbsplash` text renderer — no per-resolution assets needed (02) | -| RG28XX rotation | SDL-level first, GL hook fallback | ✅ SDL/driver level alone is correct; the GL hook double-rotated and broke minarch scaling — removed after hardware testing (04) | -| HDMI | stretch goal | ✅ disp2/fbdev hotplug with layer-geometry repair and ALSA routing (04) | - -## Maintenance model - -- Update 00 when hardware, firmware, stock-OS paths, or empirical facts change. -- Update 01–07 when implementation, rationale, diagnostics, or a subsystem lesson - changes. Keep incident histories when they explain a non-obvious constraint. -- Record test evidence once in 08 and per-core evidence once in 10. -- Record stage gates, accepted risk, deferrals, enhancements, and future work only in - 09. Subsystem documents should link there instead of restating release policy. -- Re-probe stock integration after Anbernic firmware changes and revisit the relevant - knowledge-base chapter before treating a new failure as a NextUI regression. From 2151dbc0e8a05833e79affaf19494ada5d9b35dd Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sat, 15 Aug 2026 21:37:05 +0200 Subject: [PATCH 75/76] fix(h700): map DEVICE 1:1 to stock RGXX_MODEL SKUs Replace family DEVICE buckets with exact tokens so sticks, LEDs, panel geometry, and displaycal select by SKU. RGXX_MODEL stays scrape/display only. Until now DEVICE was tacked on and on during development into strings and grouped buckets that had no rhyme or reason. Since we are about to get merged upstream, now is the time to settle on a stable naming convention. NOTE: this update causes existing minarch config and some other stuff to become orphan. Users' preferences for devices that got split by this change (e.g. rg40xx -> rg40xxv / rg40xxh) will get reset. Better to accept this pain now and stabilise the contract for Pak authors than to run into problems later. --- skeleton/SYSTEM/h700/bin/h700-device.sh | 43 ++++++++++ skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 18 +--- workspace/all/bootlogo/bootlogo.c | 7 +- workspace/all/common/displaycal.h | 9 +- workspace/all/settings/settings.cpp | 57 +++++++------ workspace/h700/install/boot.sh | 1 - workspace/h700/libmsettings/msettings.c | 44 ++++------ workspace/h700/platform/led.c | 2 +- workspace/h700/platform/platform.c | 83 +++++++------------ workspace/h700/platform/platform.h | 30 +++---- 10 files changed, 153 insertions(+), 141 deletions(-) create mode 100755 skeleton/SYSTEM/h700/bin/h700-device.sh diff --git a/skeleton/SYSTEM/h700/bin/h700-device.sh b/skeleton/SYSTEM/h700/bin/h700-device.sh new file mode 100755 index 000000000..2372e3130 --- /dev/null +++ b/skeleton/SYSTEM/h700/bin/h700-device.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# H700 DEVICE contract +# +# PLATFORM=h700 is the SoC/OS tree. DEVICE is the exact SKU id used for +# behaviour. RGXX_MODEL is the stock firmware string (scrape + display only). +# +# Stock RGXX_MODEL → DEVICE +# RG28xx rg28xx +# RG34xx rg34xx +# RG34xxSP rg34xxsp +# RG35xx rg35xxplus (Plus and 2024 both report RG35xx) +# RG35xxH rg35xxh +# RG35xxPro rg35xxpro +# RG35xxSP rg35xxsp +# RG40xxH rg40xxh +# RG40xxV rg40xxv +# RGcubexx rgcubexx +# RGSP rgsp +# anything else / empty → rg35xxplus + +h700_export_device() { + if [ -z "$RGXX_MODEL" ]; then + RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" + fi + export RGXX_MODEL + + # Longer suffixes before shorter / bare forms. Case-sensitive stock strings. + case "$RGXX_MODEL" in + RG28xx) DEVICE=rg28xx ;; + RG34xxSP) DEVICE=rg34xxsp ;; + RG34xx) DEVICE=rg34xx ;; + RGSP) DEVICE=rgsp ;; + RG35xxSP) DEVICE=rg35xxsp ;; + RG35xxPro) DEVICE=rg35xxpro ;; + RG35xxH) DEVICE=rg35xxh ;; + RG35xx) DEVICE=rg35xxplus ;; + RG40xxV) DEVICE=rg40xxv ;; + RG40xxH) DEVICE=rg40xxh ;; + RGcubexx) DEVICE=rgcubexx ;; + *) DEVICE=rg35xxplus ;; + esac + export DEVICE +} diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 847f839cd..5005272b2 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -94,21 +94,9 @@ mkdir -p "$BIOS_PATH" "$ROMS_PATH" "$SAVES_PATH" "$CHEATS_PATH" mkdir -p "$USERDATA_PATH" "$LOGS_PATH" "$HOOKS_PATH" "$SHARED_USERDATA_PATH/.minui" echo "launch: starting $(date)" > "$LAUNCH_LOG" -export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" -case "$RGXX_MODEL" in - RG28xx) export DEVICE="rg28xx" ;; - # The RG SP reports a bare "RGSP" -- no "xx" -- so it matched none of the - # family globs and fell through to the rg40xx fallback, which drew the UI - # 640x480 on its 720x480 panel. It shares the RG34XXSP panel exactly (same - # lcd_driver_name rg34xxsp_v1, DTB fingerprint 26-820-536) but has no analog - # sticks, so it gets its own DEVICE rather than an rg34xx alias. - RGSP) export DEVICE="rgsp" ;; - RG34xx*|RG34XX*) export DEVICE="rg34xx" ;; - RG35xx*|RG35XX*) export DEVICE="rg35xx" ;; - RG40xx*|RG40XX*) export DEVICE="rg40xx" ;; - RGcubexx) export DEVICE="cube" ;; - *) export DEVICE="rg40xx" ;; -esac +# DEVICE contract: exact SKU from stock RGXX_MODEL (see h700-device.sh). +. "$SYSTEM_PATH/bin/h700-device.sh" +h700_export_device if [ "$DEVICE" = "rg28xx" ]; then export SDL_ROTATION="${SDL_ROTATION:-1}" fi diff --git a/workspace/all/bootlogo/bootlogo.c b/workspace/all/bootlogo/bootlogo.c index b27fb7ebc..2ae307fd2 100644 --- a/workspace/all/bootlogo/bootlogo.c +++ b/workspace/all/bootlogo/bootlogo.c @@ -76,10 +76,11 @@ int loadImages() char* device = getenv("DEVICE"); #ifdef BOOTLOGO_RESOLUTION_DIRS // presets are shared between devices with the same panel resolution - char* folder = "640x480"; // rg35xx, rg40xx + char* folder = "640x480"; if (exactMatch("rg28xx", device)) folder = "480x640"; - else if (exactMatch("rg34xx", device) || exactMatch("rgsp", device)) folder = "720x480"; - else if (exactMatch("cube", device)) folder = "720x720"; + else if (exactMatch("rg34xx", device) || exactMatch("rg34xxsp", device) + || exactMatch("rgsp", device)) folder = "720x480"; + else if (exactMatch("rgcubexx", device)) folder = "720x720"; snprintf(basepath, sizeof(basepath), "%s/Bootlogo.pak/%s/", TOOLS_PATH, folder); #else // This needs to get a bit more flexible down the line, but for now we either expect the files diff --git a/workspace/all/common/displaycal.h b/workspace/all/common/displaycal.h index 744c31717..e32071b04 100644 --- a/workspace/all/common/displaycal.h +++ b/workspace/all/common/displaycal.h @@ -65,7 +65,8 @@ static const struct DisplayCalDefaults DisplayCalDefaults_RG28XX = { 1, 100, 92, static const struct DisplayCalDefaults DisplayCalDefaults_RG34XX = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG34XXSP = { 1, 100, 83, 86 }; static const struct DisplayCalDefaults DisplayCalDefaults_RGSP = { 1, 100, 68, 61 }; -static const struct DisplayCalDefaults DisplayCalDefaults_RG35XX = DISPLAYCAL_H700_UNCALIBRATED; // Plus/H/2024 +static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXPlus = DISPLAYCAL_H700_UNCALIBRATED; +static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXH = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXSP = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG35XXPRO = DISPLAYCAL_H700_UNCALIBRATED; static const struct DisplayCalDefaults DisplayCalDefaults_RG40XXH = DISPLAYCAL_H700_UNCALIBRATED; @@ -81,7 +82,8 @@ enum DisplayCalPreset { DISPLAYCAL_PRESET_RG34XX, DISPLAYCAL_PRESET_RG34XXSP, DISPLAYCAL_PRESET_RGSP, - DISPLAYCAL_PRESET_RG35XX, + DISPLAYCAL_PRESET_RG35XXPLUS, + DISPLAYCAL_PRESET_RG35XXH, DISPLAYCAL_PRESET_RG35XXSP, DISPLAYCAL_PRESET_RG35XXPRO, DISPLAYCAL_PRESET_RG40XXH, @@ -97,7 +99,8 @@ static inline DisplayCalDefaults DisplayCal_getDefaultSettings(enum DisplayCalPr case DISPLAYCAL_PRESET_RG34XX: return DisplayCalDefaults_RG34XX; case DISPLAYCAL_PRESET_RG34XXSP: return DisplayCalDefaults_RG34XXSP; case DISPLAYCAL_PRESET_RGSP: return DisplayCalDefaults_RGSP; - case DISPLAYCAL_PRESET_RG35XX: return DisplayCalDefaults_RG35XX; + case DISPLAYCAL_PRESET_RG35XXPLUS: return DisplayCalDefaults_RG35XXPlus; + case DISPLAYCAL_PRESET_RG35XXH: return DisplayCalDefaults_RG35XXH; case DISPLAYCAL_PRESET_RG35XXSP: return DisplayCalDefaults_RG35XXSP; case DISPLAYCAL_PRESET_RG35XXPRO: return DisplayCalDefaults_RG35XXPRO; case DISPLAYCAL_PRESET_RG40XXH: return DisplayCalDefaults_RG40XXH; diff --git a/workspace/all/settings/settings.cpp b/workspace/all/settings/settings.cpp index 0cb747c5c..5a8dbc039 100644 --- a/workspace/all/settings/settings.cpp +++ b/workspace/all/settings/settings.cpp @@ -252,13 +252,13 @@ namespace { SmartPro, SmartProS, Flip, - RG40XX, RG40XXV, RG40XXH, RG34XX, RG34XXSP, RGSP, // RG34XXSP panel, no sticks - RG35XX, // Plus/H/2024 + RG35XXPlus, // Plus and 2024 both report RG35xx + RG35XXH, RG35XXSP, RG35XXPRO, RG28XX, @@ -296,18 +296,38 @@ namespace { m_vendor = Trimui; m_model = Flip; m_platform = my355; - } else if(exactMatch("rg40xx", device)) { + } else if(exactMatch("rg40xxv", device)) { m_vendor = Anbernic; - m_model = RG40XX; + m_model = RG40XXV; m_platform = h700; - } else if(exactMatch("rg35xx", device)) { + } else if(exactMatch("rg40xxh", device)) { m_vendor = Anbernic; - m_model = RG35XX; + m_model = RG40XXH; + m_platform = h700; + } else if(exactMatch("rg35xxplus", device)) { + m_vendor = Anbernic; + m_model = RG35XXPlus; + m_platform = h700; + } else if(exactMatch("rg35xxh", device)) { + m_vendor = Anbernic; + m_model = RG35XXH; + m_platform = h700; + } else if(exactMatch("rg35xxsp", device)) { + m_vendor = Anbernic; + m_model = RG35XXSP; + m_platform = h700; + } else if(exactMatch("rg35xxpro", device)) { + m_vendor = Anbernic; + m_model = RG35XXPRO; m_platform = h700; } else if(exactMatch("rg34xx", device)) { m_vendor = Anbernic; m_model = RG34XX; m_platform = h700; + } else if(exactMatch("rg34xxsp", device)) { + m_vendor = Anbernic; + m_model = RG34XXSP; + m_platform = h700; } else if(exactMatch("rgsp", device)) { m_vendor = Anbernic; m_model = RGSP; @@ -316,28 +336,12 @@ namespace { m_vendor = Anbernic; m_model = RG28XX; m_platform = h700; - } else if(exactMatch("cube", device)) { + } else if(exactMatch("rgcubexx", device)) { m_vendor = Anbernic; m_model = RGCubeXX; m_platform = h700; } } - // Anbernic stock firmware reports the exact model (e.g. RG40xxV, - // RG34xxSP); use it to refine the DEVICE-based family match. - char* rgModel = getenv("RGXX_MODEL"); - if (m_platform == h700 && rgModel) { - std::string model(rgModel); - if (model == "RG40xxV") m_model = RG40XXV; - else if (model == "RG40xxH") m_model = RG40XXH; - else if (model == "RG34xxSP") m_model = RG34XXSP; - else if (model == "RGSP") m_model = RGSP; - else if (model.rfind("RG35xx", 0) == 0) { - std::string suffix = model.substr(6); - if (suffix.rfind("SP", 0) == 0) m_model = RG35XXSP; - else if (suffix.rfind("Pro", 0) == 0 || suffix.rfind("PRO", 0) == 0) m_model = RG35XXPRO; - else m_model = RG35XX; - } - } } Vendor getVendor() const { return m_vendor; } @@ -371,7 +375,9 @@ namespace { } bool hasAnalogSticks() const { - return m_model == SmartPro || m_model == SmartProS || m_model == BrickPro || m_model == RG40XX || m_model == RGCubeXX; + return m_model == SmartPro || m_model == SmartProS || m_model == BrickPro + || m_model == RG40XXV || m_model == RG40XXH || m_model == RGCubeXX + || m_model == RG34XXSP || m_model == RG35XXH || m_model == RG35XXPRO; } bool hasWifi() const { @@ -598,7 +604,8 @@ int main(int argc, char *argv[]) deviceInfo.getModel() == DeviceInfo::RG34XX ? DISPLAYCAL_PRESET_RG34XX : deviceInfo.getModel() == DeviceInfo::RG34XXSP ? DISPLAYCAL_PRESET_RG34XXSP : deviceInfo.getModel() == DeviceInfo::RGSP ? DISPLAYCAL_PRESET_RGSP : - deviceInfo.getModel() == DeviceInfo::RG35XX ? DISPLAYCAL_PRESET_RG35XX : + deviceInfo.getModel() == DeviceInfo::RG35XXPlus ? DISPLAYCAL_PRESET_RG35XXPLUS : + deviceInfo.getModel() == DeviceInfo::RG35XXH ? DISPLAYCAL_PRESET_RG35XXH : deviceInfo.getModel() == DeviceInfo::RG35XXSP ? DISPLAYCAL_PRESET_RG35XXSP : deviceInfo.getModel() == DeviceInfo::RG35XXPRO ? DISPLAYCAL_PRESET_RG35XXPRO : deviceInfo.getModel() == DeviceInfo::RG40XXH ? DISPLAYCAL_PRESET_RG40XXH : diff --git a/workspace/h700/install/boot.sh b/workspace/h700/install/boot.sh index 96e35ea22..d22fd5d67 100755 --- a/workspace/h700/install/boot.sh +++ b/workspace/h700/install/boot.sh @@ -27,7 +27,6 @@ ensure_compat_path "$REAL_SDCARD_PATH" "$SDCARD_PATH" export LD_LIBRARY_PATH="$SYSTEM_PATH/$PLATFORM/lib:/usr/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH" export PATH="$SYSTEM_PATH/$PLATFORM/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" export PLATFORM -export RGXX_MODEL="$(strings /mnt/vendor/bin/dmenu.bin 2>/dev/null | grep -m1 '^RG')" cd "$SCRIPT_DIR/$PLATFORM" || exit 1 diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index 1e2b11d0a..b25e29e99 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -320,29 +320,22 @@ static int prefixMatch(char* pre, char* str) { return (strncmp(pre, str, strlen(pre))==0); } -// Pick the displaycal preset for this device. Exact RGXX_MODEL strings confirmed -// so far: RG28xx, RG34xx, RG34xxSP, RG40xxH, RG40xxV, RGSP, RGcubexx. The RG35xx -// family is matched by prefix/suffix until its exact strings are confirmed. +// Pick the displaycal preset from DEVICE (exact SKU contract). Measured panels +// keep their gains; everything else stays uncalibrated (off + 100/100/100). static enum DisplayCalPreset displayCalPresetForDevice(void) { char* device = getenv("DEVICE"); - char* model = getenv("RGXX_MODEL"); - - if (exactMatch("RG28xx", model) || exactMatch("rg28xx", device)) return DISPLAYCAL_PRESET_RG28XX; - // Before the RG34xx prefix test: the RG SP shares that panel but is its own - // preset, and its bare "RGSP" would not match the prefix anyway. - if (exactMatch("RGSP", model) || exactMatch("rgsp", device)) return DISPLAYCAL_PRESET_RGSP; - if (exactMatch("RG34xxSP", model)) return DISPLAYCAL_PRESET_RG34XXSP; - if (prefixMatch("RG34xx", model) || exactMatch("rg34xx", device)) return DISPLAYCAL_PRESET_RG34XX; - if (exactMatch("RG40xxV", model)) return DISPLAYCAL_PRESET_RG40XXV; - if (exactMatch("RG40xxH", model)) return DISPLAYCAL_PRESET_RG40XXH; - if (prefixMatch("RGcube", model) || exactMatch("cube", device)) return DISPLAYCAL_PRESET_RGCUBEXX; - if (prefixMatch("RG35xx", model)) { - char* suffix = model + strlen("RG35xx"); - if (prefixMatch("SP", suffix)) return DISPLAYCAL_PRESET_RG35XXSP; - if (prefixMatch("Pro", suffix) || prefixMatch("PRO", suffix)) return DISPLAYCAL_PRESET_RG35XXPRO; - return DISPLAYCAL_PRESET_RG35XX; // Plus/H/2024 share a preset for now - } - // DEVICE=rg40xx alone can't distinguish V from H, so fall through to neutral + + if (exactMatch("rg28xx", device)) return DISPLAYCAL_PRESET_RG28XX; + if (exactMatch("rgsp", device)) return DISPLAYCAL_PRESET_RGSP; + if (exactMatch("rg34xxsp", device)) return DISPLAYCAL_PRESET_RG34XXSP; + if (exactMatch("rg34xx", device)) return DISPLAYCAL_PRESET_RG34XX; + if (exactMatch("rg40xxv", device)) return DISPLAYCAL_PRESET_RG40XXV; + if (exactMatch("rg40xxh", device)) return DISPLAYCAL_PRESET_RG40XXH; + if (exactMatch("rgcubexx", device)) return DISPLAYCAL_PRESET_RGCUBEXX; + if (exactMatch("rg35xxsp", device)) return DISPLAYCAL_PRESET_RG35XXSP; + if (exactMatch("rg35xxpro", device)) return DISPLAYCAL_PRESET_RG35XXPRO; + if (exactMatch("rg35xxh", device)) return DISPLAYCAL_PRESET_RG35XXH; + if (exactMatch("rg35xxplus", device)) return DISPLAYCAL_PRESET_RG35XXPLUS; return DISPLAYCAL_PRESET_DEFAULT; } @@ -857,12 +850,11 @@ void SetAudioSink(int value) { static void panelSize(int* w, int* h) { char* device = getenv("DEVICE"); - char* model = getenv("RGXX_MODEL"); *w = 640; *h = 480; - if (exactMatch("RGcubexx", model) || exactMatch("cube", device)) { *w = 720; *h = 720; } - else if (exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model) || exactMatch("rg34xx", device) - || exactMatch("RGSP", model) || exactMatch("rgsp", device)) { *w = 720; *h = 480; } // RG SP shares the RG34XXSP panel - else if (exactMatch("RG28xx", model) || exactMatch("rg28xx", device)) { *w = 480; *h = 640; } // panel is mounted portrait + if (exactMatch("rgcubexx", device)) { *w = 720; *h = 720; } + else if (exactMatch("rg34xx", device) || exactMatch("rg34xxsp", device) + || exactMatch("rgsp", device)) { *w = 720; *h = 480; } + else if (exactMatch("rg28xx", device)) { *w = 480; *h = 640; } // physical portrait panel } // the live output type, read back from the disp driver so a stale state file diff --git a/workspace/h700/platform/led.c b/workspace/h700/platform/led.c index 6d20b2c75..7db232fe0 100644 --- a/workspace/h700/platform/led.c +++ b/workspace/h700/platform/led.c @@ -3,7 +3,7 @@ // Included from platform.c (like generic_video.c et al) so the 13 makefiles // that compile platform.c directly don't each need a new source file. // -// Only three RG XX models have RGB LEDs: RG40XX H, RG40XX V and RG CubeXX. +// Only three SKUs have RGB LEDs: rg40xxh, rg40xxv, and rgcubexx. // They are NOT in /sys/class/leds and there is no led_anim driver (that is // TrimUI only) -- they hang off a separate MCU reached over UART5 at 115200 // 8N1, powered by the axp2202 mcu_pwr rail. The protocol is diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index 9f2992177..d26b3236b 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -26,10 +26,9 @@ #include #include -int is_rg28xx = 0; -int is_rg34xx = 0; -int is_rgsp = 0; -int is_cube = 0; +int panel_w = 640; +int panel_h = 480; +int needs_portrait_sdl = 0; int hdmi_active = 0; int dev_has_lstick = 0; int dev_has_rstick = 0; @@ -195,60 +194,40 @@ static void apply_hat_axis(int neg_id, int pos_id, int value, uint32_t tick) { static void detect_device(void) { char *device = getenv("DEVICE"); - char *model = getenv("RGXX_MODEL"); - - is_rg28xx = exactMatch("rg28xx", device) || exactMatch("RG28xx", model); - is_rg34xx = exactMatch("rg34xx", device) || exactMatch("RG34xx", model) || exactMatch("RG34xxSP", model); - // The RG SP is the RG34XXSP without the sticks: same panel (lcd_driver_name - // rg34xxsp_v1, identical DTB timings), bigger battery. Its stock RGXX_MODEL - // is a bare "RGSP", which no family glob matches -- hence its own flag - // rather than folding it into is_rg34xx, so stick and LED policy stay exact. - // Matched on the model as well as DEVICE, like the others: the installer shim - // (install/boot.sh) exports RGXX_MODEL but never DEVICE, so anything reached - // from that path sees only the model string. - is_rgsp = exactMatch("rgsp", device) || exactMatch("RGSP", model); - is_cube = exactMatch("cube", device) || (model && prefixMatch("RGcube", model)); - - // RGB LEDs exist only on the RG40XX H, RG40XX V and RG CubeXX (same three - // models muOS flags with led/rgb=1); every other RG XX has just the binary - // work_led. The V has a single stick and one populated bank, the H and the - // Cube have two -- which is why the exact model matters here and the coarse - // DEVICE=rg40xx isn't enough. - int is_rg40xxv = exactMatch("RG40xxV", model); - int model_has_rgb = is_rg40xxv || is_cube || exactMatch("rg40xx", device) || - (model && (prefixMatch("RG40xx", model) || prefixMatch("RG40XX", model))); - // launch.sh falls back to DEVICE=rg40xx for anything it doesn't recognise, - // so require the MCU transport to actually be there before we write to it + if (!device) device = "rg35xxplus"; + + // App framebuffer size from DEVICE. RG28XX's panel is physically 480x640 + // portrait, but SDL_ROTATION presents a 640x480 landscape app space — keep + // FIXED_* at 640x480 and set needs_portrait_sdl for the driver/bootlogo. + panel_w = 640; + panel_h = 480; + needs_portrait_sdl = exactMatch("rg28xx", device); + if (exactMatch("rg34xx", device) || exactMatch("rg34xxsp", device) + || exactMatch("rgsp", device)) { + panel_w = 720; + panel_h = 480; + } else if (exactMatch("rgcubexx", device)) { + panel_w = 720; + panel_h = 720; + } + + // RGB LEDs: rg40xxv (1 bank), rg40xxh / rgcubexx (2 banks). Require MCU. + int is_rg40xxv = exactMatch("rg40xxv", device); + int model_has_rgb = is_rg40xxv || exactMatch("rg40xxh", device) + || exactMatch("rgcubexx", device); dev_has_rgb = model_has_rgb && exists(H700_LED_TTY) && exists(H700_MCU_PWR); dev_num_leds = !dev_has_rgb ? 0 : (is_rg40xxv ? 1 : 2); - // Analog sticks per model; every stick on these devices clicks (L3 = left, - // R3 = right). Exact RGXX_MODEL strings confirmed so far: RG28xx, RG34xx, - // RG34xxSP, RG40xxH, RG40xxV, RGSP, RGcubexx. The RG35xx family is matched - // by prefix/suffix until its exact strings are confirmed (same as msettings). + // Analog sticks per SKU; every stick clicks (L3 / R3). dev_has_lstick = 0; dev_has_rstick = 0; - if (is_rg28xx || is_rgsp) { - // The RG SP drops the RG34XXSP's sticks entirely: its device tree has no - // keyL3/keyR3 and none of the analog multiplexer pins (amux-en-gpios, - // A0/A1_gpio, adc-en-gpios), and the GPADC itself is status="disabled". - dev_has_lstick = dev_has_rstick = 0; - } - else if (is_rg34xx) { - // the RG34xx has no sticks, the RG34xxSP has two - dev_has_lstick = dev_has_rstick = exactMatch("RG34xxSP", model); - } - else if (exactMatch("RG40xxV", model)) { - dev_has_lstick = 1; // single left stick - } - else if (exactMatch("RG40xxH", model) || is_cube) { + if (is_rg40xxv) { + dev_has_lstick = 1; + } else if (exactMatch("rg40xxh", device) || exactMatch("rgcubexx", device) + || exactMatch("rg34xxsp", device) || exactMatch("rg35xxh", device) + || exactMatch("rg35xxpro", device)) { dev_has_lstick = dev_has_rstick = 1; } - else if ((model && prefixMatch("RG35xx", model)) || exactMatch("rg35xx", device)) { - // Only the H and Pro have sticks; Plus/2024/SP and unknown variants don't. - char *suffix = (model && prefixMatch("RG35xx", model)) ? model + strlen("RG35xx") : ""; - dev_has_lstick = dev_has_rstick = exactMatch("H", suffix) || prefixMatch("Pro", suffix); - } } void PLAT_initPlatform(void) { @@ -270,7 +249,7 @@ void PLAT_initPlatform(void) { // Aspect/Fullscreen scaling. // On HDMI the fb is 1280x720 landscape, so that rotation must be off; this // overrides the launch.sh export for the lifetime of this process. - if (is_rg28xx) + if (needs_portrait_sdl) setenv("SDL_ROTATION", hdmi_active ? "0" : "1", 1); } diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index eee40e9b7..f742bf8a7 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -11,15 +11,14 @@ /////////////////////////////// -extern int is_rg28xx; -extern int is_rg34xx; -extern int is_rgsp; -extern int is_cube; +extern int panel_w; +extern int panel_h; extern int hdmi_active; extern int dev_has_lstick; extern int dev_has_rstick; extern int dev_has_rgb; extern int dev_num_leds; +extern int needs_portrait_sdl; // DEVICE=rg28xx: SDL rotates onto the portrait panel /////////////////////////////// @@ -146,9 +145,9 @@ extern int dev_num_leds; // While an HDMI cable is connected the whole app runs at 1280x720 (the fb is // hardware-scaled to a 1080p60 signal by the display engine — see SetHDMI in -// libmsettings). hdmi_active is latched once per process in PLAT_initPlatform, -// so like is_cube these are constant for the process lifetime; the existing -// hotplug quit-and-relaunch plumbing restarts apps on cable changes. +// libmsettings). hdmi_active and panel_w/panel_h are latched once per process +// in PLAT_initPlatform; the existing hotplug quit-and-relaunch plumbing +// restarts apps on cable changes. // Values must match HDMI_LOGICAL_* in libmsettings/msettings.c. #define HAS_HDMI 1 #define HDMI_WIDTH 1280 @@ -157,10 +156,11 @@ extern int dev_num_leds; #define HDMI_SIZE (HDMI_PITCH * HDMI_HEIGHT) #define FIXED_SCALE 2 -// 720 wide on the RG34xx family and the RG SP, which shares the RG34XXSP panel; -// 720x720 on the cube's square panel; 640x480 everywhere else. -#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:(is_cube?720:((is_rg34xx||is_rgsp)?720:640))) -#define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:(is_cube?720:480)) +// panel_w/panel_h are the app framebuffer size from DEVICE: 720x480 for +// rg34xx/rg34xxsp/rgsp, 720x720 for rgcubexx, else 640x480 (including rg28xx, +// whose portrait panel is handled by SDL_ROTATION via needs_portrait_sdl). +#define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:panel_w) +#define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:panel_h) #define FIXED_BPP 2 #define FIXED_DEPTH (FIXED_BPP * 8) #define FIXED_PITCH (FIXED_WIDTH * FIXED_BPP) @@ -172,9 +172,9 @@ extern int dev_num_leds; // The 480p layout needs the standard 10-unit padding so six rows and the // bottom hints keep the same vertical spacing. The roomier 720p layouts retain // their existing 5-unit edge padding. -#define MAIN_ROW_COUNT ((hdmi_active||is_cube)?10:6) +#define MAIN_ROW_COUNT ((hdmi_active||panel_h>=720)?10:6) #define QUICK_SWITCHER_COUNT 3 -#define PADDING ((hdmi_active||is_cube)?5:10) +#define PADDING ((hdmi_active||panel_h>=720)?5:10) /////////////////////////////// @@ -182,7 +182,7 @@ extern int dev_num_leds; #define MUTE_VOLUME_RAW 0 #define SCREEN_FPS 60.0 -// ceiling, not the count: only the RG40XX H/V and RG CubeXX have RGB LEDs, and +// ceiling, not the count: only rg40xxh/v and rgcubexx have RGB LEDs, and // the V populates one bank where the others populate two. PLAT_getNumLeds() // reports what the running device actually has. #define MAX_LIGHTS 2 @@ -195,7 +195,7 @@ extern int dev_num_leds; // driver, but the bootloader blits bootlogo.bmp panel-native, so the 480x640 // presets are authored 90° CCW and must be rotated CW to preview how they // will actually appear at boot. -#define BOOTLOGO_PREVIEW_ROTATE_CW (is_rg28xx) +#define BOOTLOGO_PREVIEW_ROTATE_CW (needs_portrait_sdl) /////////////////////////////// From acc293c8e5b482688832c7da1e45903eb3112217 Mon Sep 17 00:00:00 2001 From: Prashant Vaibhav Date: Sat, 15 Aug 2026 21:45:15 +0200 Subject: [PATCH 76/76] docs(h700): align DEVICE docs and comments with SKU mapping Update PAKS.md and auto.sh path guidance; trim redundant contract wording now that h700-device.sh owns the map. --- PAKS.md | 2 +- skeleton/BASE/README.txt | 2 +- skeleton/SYSTEM/h700/bin/h700-device.sh | 7 ++----- skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh | 1 - workspace/all/minarch/ma_internal.h | 2 +- workspace/h700/libmsettings/msettings.c | 4 ++-- workspace/h700/platform/platform.c | 6 +++--- workspace/h700/platform/platform.h | 6 +++--- 8 files changed, 13 insertions(+), 17 deletions(-) diff --git a/PAKS.md b/PAKS.md index d9d629d1f..8f4adfbb0 100644 --- a/PAKS.md +++ b/PAKS.md @@ -6,7 +6,7 @@ There are two kinds of paks, emulators and tools. Emulator paks live in the Emus Paks are platform specific. Inside the Emus and Tools folders you will find (or need to create) platform folders. Some platform folders are named after the target device (eg. "rgb30" for the Powkiddy RGB30), others use the device's internal name (eg. "tg5040" for the Trimui Smart Pro), other use an arbitrary shortname (eg. "trimui" for the Trimui Model S), all are completely lowercase. See the extras bundle for up-to-date supported platform folder names. -Some platforms have multiple devices with unique qualities. NextUI differentiates these devices from the base platform with the `DEVICE` envar. eg. the "rg35xxplus" platform has two unique devices "cube" for the RG CubeXX, and "wide" for the RG34xx. It also supports "hdmi" for when outputting to HDMI. A pak can choose to use or ignore this envar. +Some platforms have multiple devices with unique qualities. NextUI differentiates these with the `DEVICE` envar. On tg5040 that is `brick`, `brickpro`, or `smartpro`. On h700 it is an exact SKU id such as `rg40xxv`, `rg34xxsp`, or `rgcubexx` (full list in the H700 Pak porting wiki page). A pak can choose to use or ignore this envar. # The types of emulator pak diff --git a/skeleton/BASE/README.txt b/skeleton/BASE/README.txt index 93d9d6993..2477498bb 100644 --- a/skeleton/BASE/README.txt +++ b/skeleton/BASE/README.txt @@ -166,7 +166,7 @@ Not simple enough for you (or maybe your kids)? NextUI has a simple mode that hi ---------------------------------------- Advanced -NextUI can automatically run a user-authored shell script on boot. Just place a file named "auto.sh" in "/.userdata//". If you're on Windows, make sure your text editor uses Unix line-endings (eg. `\n`), these devices usually choke on Windows line-endings (eg. `\r\n`). +NextUI can automatically run a user-authored shell script on boot. Just place a file named "auto.sh" in "/.userdata//" (eg. `/.userdata/h700/` or `/.userdata/tg5040/`). If you're on Windows, make sure your text editor uses Unix line-endings (eg. `\n`), these devices usually choke on Windows line-endings (eg. `\r\n`). ---------------------------------------- Thanks diff --git a/skeleton/SYSTEM/h700/bin/h700-device.sh b/skeleton/SYSTEM/h700/bin/h700-device.sh index 2372e3130..76a0f832d 100755 --- a/skeleton/SYSTEM/h700/bin/h700-device.sh +++ b/skeleton/SYSTEM/h700/bin/h700-device.sh @@ -1,10 +1,7 @@ #!/bin/sh -# H700 DEVICE contract +# Map stock RGXX_MODEL (from dmenu.bin) to DEVICE. +# Behaviour keys on DEVICE; RGXX_MODEL is for display/logs only. # -# PLATFORM=h700 is the SoC/OS tree. DEVICE is the exact SKU id used for -# behaviour. RGXX_MODEL is the stock firmware string (scrape + display only). -# -# Stock RGXX_MODEL → DEVICE # RG28xx rg28xx # RG34xx rg34xx # RG34xxSP rg34xxsp diff --git a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh index 5005272b2..52696d5d2 100755 --- a/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/h700/paks/MinUI.pak/launch.sh @@ -94,7 +94,6 @@ mkdir -p "$BIOS_PATH" "$ROMS_PATH" "$SAVES_PATH" "$CHEATS_PATH" mkdir -p "$USERDATA_PATH" "$LOGS_PATH" "$HOOKS_PATH" "$SHARED_USERDATA_PATH/.minui" echo "launch: starting $(date)" > "$LAUNCH_LOG" -# DEVICE contract: exact SKU from stock RGXX_MODEL (see h700-device.sh). . "$SYSTEM_PATH/bin/h700-device.sh" h700_export_device if [ "$DEVICE" = "rg28xx" ]; then diff --git a/workspace/all/minarch/ma_internal.h b/workspace/all/minarch/ma_internal.h index 49d4a8935..b2967769d 100644 --- a/workspace/all/minarch/ma_internal.h +++ b/workspace/all/minarch/ma_internal.h @@ -22,7 +22,7 @@ struct Core { const char version[128]; // eg. Gambatte (v0.5.0-netlink 7e02df6) const char extensions[128]; // eg. gb|gbc|dmg - const char config_dir[MAX_PATH]; // eg. /mnt/sdcard/.userdata/rg35xx/GB-gambatte + const char config_dir[MAX_PATH]; // eg. /mnt/sdcard/.userdata/h700/GB-gambatte const char states_dir[MAX_PATH]; // eg. /mnt/sdcard/.userdata/arm-480/GB-gambatte const char saves_dir[MAX_PATH]; // eg. /mnt/sdcard/Saves/GB const char bios_dir[MAX_PATH]; // eg. /mnt/sdcard/Bios/GB diff --git a/workspace/h700/libmsettings/msettings.c b/workspace/h700/libmsettings/msettings.c index b25e29e99..a55a7b42e 100644 --- a/workspace/h700/libmsettings/msettings.c +++ b/workspace/h700/libmsettings/msettings.c @@ -320,8 +320,8 @@ static int prefixMatch(char* pre, char* str) { return (strncmp(pre, str, strlen(pre))==0); } -// Pick the displaycal preset from DEVICE (exact SKU contract). Measured panels -// keep their gains; everything else stays uncalibrated (off + 100/100/100). +// Displaycal defaults for this DEVICE. Measured panels keep their gains; +// everything else stays uncalibrated (off + 100/100/100). static enum DisplayCalPreset displayCalPresetForDevice(void) { char* device = getenv("DEVICE"); diff --git a/workspace/h700/platform/platform.c b/workspace/h700/platform/platform.c index d26b3236b..fbf2b3321 100644 --- a/workspace/h700/platform/platform.c +++ b/workspace/h700/platform/platform.c @@ -196,9 +196,9 @@ static void detect_device(void) { char *device = getenv("DEVICE"); if (!device) device = "rg35xxplus"; - // App framebuffer size from DEVICE. RG28XX's panel is physically 480x640 - // portrait, but SDL_ROTATION presents a 640x480 landscape app space — keep - // FIXED_* at 640x480 and set needs_portrait_sdl for the driver/bootlogo. + // App framebuffer size. RG28XX's panel is physically 480x640 portrait, but + // SDL_ROTATION presents a 640x480 landscape app space — keep FIXED_* there + // and set needs_portrait_sdl for the driver/bootlogo. panel_w = 640; panel_h = 480; needs_portrait_sdl = exactMatch("rg28xx", device); diff --git a/workspace/h700/platform/platform.h b/workspace/h700/platform/platform.h index f742bf8a7..4487c3a10 100644 --- a/workspace/h700/platform/platform.h +++ b/workspace/h700/platform/platform.h @@ -156,9 +156,9 @@ extern int needs_portrait_sdl; // DEVICE=rg28xx: SDL rotates onto the portrait p #define HDMI_SIZE (HDMI_PITCH * HDMI_HEIGHT) #define FIXED_SCALE 2 -// panel_w/panel_h are the app framebuffer size from DEVICE: 720x480 for -// rg34xx/rg34xxsp/rgsp, 720x720 for rgcubexx, else 640x480 (including rg28xx, -// whose portrait panel is handled by SDL_ROTATION via needs_portrait_sdl). +// panel_w/panel_h: app framebuffer — 720x480 (rg34xx/rg34xxsp/rgsp), +// 720x720 (rgcubexx), else 640x480. RG28XX stays 640x480 here; portrait is +// handled by SDL_ROTATION via needs_portrait_sdl. #define FIXED_WIDTH (hdmi_active?HDMI_WIDTH:panel_w) #define FIXED_HEIGHT (hdmi_active?HDMI_HEIGHT:panel_h) #define FIXED_BPP 2

Wcj$PuaGUFzYhqJ(Y9k#?V_3z}36HYkcrkifM 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 Yz<>b*1`HT5V8DO@0|pEjFks*f1oFxFSpWb4 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Health Safety.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA Health Safety.bmp new file mode 100644 index 0000000000000000000000000000000000000000..42f532466b136ea4b028cb4e2e9e77f3c4df84b2 GIT binary patch literal 1555254 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 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 3.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 3.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a14f1b2eadf408095150ea3af8dfbd6d1e7df775 GIT binary patch literal 1555254 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U XAV7cs0RjXF5FkK+009F1FYx~X5MU$~ literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 4.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo 4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..38ed6d957c09037ab2aaec629f684f6e92753773 GIT binary patch literal 1555254 zcmeF)2e?(m_4jdZ10u#=qQ-)X4O{G8QN#*1z+SK*7C^BgQY;86b^!sgqEhV*63C5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N k0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1pY^X-&L7wvH$=8 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/Atari Bootlogo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ae8ac2733b4f195b6ba500bbbdc9cb10816f28bb GIT binary patch literal 1555254 zcmeI*2b^71ojCB!Bq5gw+5>RNVHTnkok_pkH+y}6k?H}Bqe=iXOl-o$S{*Ldc=-}#;2`JQvnd-F00 zJI~qn6KhRr{Mt7Dw^97>8-vOJ2BxgtczDW`c>eP%O&R`Q@_^q75FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7e?q!kz#7#NIS@mmMiq@BIO2@oJafB*pk1PBlyK!5;& z$t@6{Y{UfCe$MLK%znvc>(1VMy$##BW^K6HdK*q|2-OoHK!5-N0zDI$K5bg$KIed= zhMxTQUwrV>Pe1VaHm=`3_=R8H|M!E#Z(Vv;sl)_&A~1DuaG7b-<3{M@>Pcm-lUA=e zrWV1iGxg+|P9&pm-I|vsjautb%ehZ7*D9khxOdClyUc|XY4u?5%IIC@R�EqRY*k z8F%-Ia}NCJ-Jkr*yFc)a>+Wmg`seHK|N6D}&Y0eOXxBYATGi}v0t5&UAV6R#5IAMt z!9$<^-Y@U@?C&1@hc>R?KlH`lJn;FYz`+#$rUc^Me$02fjb3){{G;P7ciaW-T_?{y zDEV{AanP$(b4)6x788uZl8)n0VNe7}dy>(sR?SP9My-uh%ehZ7cewp}x7@wUTx-g` zE2DRrOD0&jMdL(@+dTQb?NcJ(vDUd!QnRNB^hjWt;Xh1_o!@w~eQ*13wx53B3*+{O ziM48uNyXG+f&rLx?2%+PZBPVAd=JvbcP`PTR?SP3Mu^qgNY$PDCv$e6w9)R}a`!HC zt!ehIjNWA~nP7g4#%CIFBE`Ffl3o>`ijO$5hfJ+=qv8<42y{^({%kR_oj7OyFYozG z{4wIUZ+xhY>pM4o=v#{(j6Y0_J377E_#uRf^Qu*IOe&@p6O80Z$BLs=42y4?;?GQn zCp$X#pa_s)X#+F5)T+6!Gz!t;$ZcrcG`2>>L}bJl=E*-e88hc+QR|W3EqCuS|BXzr z)lm>XXc0edk^YcI{LDuDx^^7{{c>0jUXk^i{uu{N&n-~Q3> z-uh_QYipITR?RV~m|9FQvW@3W7a+mX24-}rRdfGq#Jhru8p%eg^?qa0Wp1^rD?Z-4 ze)vf8+R< zH{wK!bK}fLhpE_0Q6r7^uLqt}`9N5S{5x#!>B`Tlfj z*+!g5P3J}u+_d?VntPEsTZ}e=@ex>j5AHJWC)Yjrj~Cw<2Y%bvS1-9adwucki+*(N z0}FfhLVs+vnqyKiwFnN+WU}3YO|r!VW12D9?A)W>He+zF1H6Om0vZb=!FF>}dusyx-Z3a^A4!=p zZF>BNQ{qHwIyaKwrXO8OKHrGUKfdmPFI~LoYnR@fTwlNJmakk=FLU+VDqRZ=0^Jp; zbq|jDdXWw2-Ah}on){@Ttjw70S~d5HM#;9EjPDA1S91wem8W{Q+`Y?OWnO7a@5&he z%!TitTa}Rn#}A#xU!hHZ#ZP|5*U6ic_}DZ3rY7E;7AZ5l1aq`C-$w{L}`>;WuKjl?+SWXb5^E}cJG$EcbRKVvv*~Tf9Ap$`tmY9d-|o> z>yxKk{O#fI+TtyE(y;`yRp!DnO7eJ$K#v3#Z_$_U`mb-k{!^#EBX(xDt|w1@$G^Sh zhC{b|b=NDeRdY-#rgr4Zca1W}ykXlYH6|F-jLCM(E%MZ=xvw+|0pqnh-kpB_jLXL) zikOJZf8$n|HXfXenOn`J;^Vzr?%rjtIJG3KcV&!!=ED74UdGqYc~|!O(wnaO$vbXM zj;}EpTV*aRW6W#<2y|T_*`h~mxAV8ox#klmyyep;y{%ilZvUu1Y^XcW7|V#>rW>Y6O3ubWV_`Sd1}=>Q5w}5<6Xh0PJHWU zPJa8CL=h8_wcc+`y3Ezx3L|^B+`Y?OIFVKl_O6Wa&s?~lTb1#dlNvY3qJvIYbl~W9 z-2uma@TfE6_+M zJapj64!{PIp~z^_3%Nbe)zzXJK6k6&4+Bd!#^&3 z^TP+9T3$&6L|6oeRnoCNv?w^rj^eX(iFQmdrdeJ?`fSjR$r}N&5V0JwC{=2n5RF=f zLHF1pr$2t^8L307M#My9^}R6}GuNWa2lsBddzU#si|ixQ1_!g(%=q`b2L}(^?B!j* zyL&gmR+$U;b9wM`%f!EFzD#(fV`bMFDiKRExSc zp1CPFy9C+<#z!F8q6@Zq)ela;@(V|wANP3Kbxh;g&m48`V~3yd#NlT?-q!WR;cxor zVP|x*`IDLt-R$LGKK`Od4n4iRj0lLZ2oBGrV|%bsaFiXzmk-zK+29Japlk3BGnP2V zLd0^!qExAQLNsa_R;R1GHzs4|T6Fo~-Ys|UGUsP8<|F&Pbepdp|F-Vl-MyP&tIUP_ zxjeW~CXTN-5I%qOdFi3?<%Mtg(t-<{PSNtrO~Hi&d5}O)1>zr~iTs`12^9K?+!`@iUT2gVjQ|@<0uZjtZhl=4v*aIDB1+ZQ(&(b zZ206}$K1X1f%ooma2wZsyBvJaYYu9Nsf}`vxzKtnIm*5Jtpi2{Wt1%%OwTiD!S9fnr#>})F6h!4JI>=UNe-QBwhw#r<%pIZed2g@gir=My(zSq&;c>U?g z@s*;rYP8B+SVpTP9w*Rif%pd{;%A%V?Q!`v{70)(<6ZaTdo8&0H3xoR*MqayeY+i6 z<+^{jL+{=7kT_@Bo>X#MMHz8deqfh_%Lk2s2#eqtF6r3bxKVJF9mSUqmp+@7iFR-W zT9gsO31c~REJwwErKAmw`Ri{sZD4Tb)M@d1_G(Wi+pDpWmdqLXrw>l8NLP1nR9}={ zXO1~$B^$FIX#7i&S)BITO=*)=ixuqp=5J#ob>+5tf1D({9Q6K?D{0@e>mli_lx-B; zR(mhluiAGLy_;Z?Im&o^?-4CyFJ+S-X z_r3P8PBwp1Mtt!2DZn?6dYwo@#Vv%&t_$!9bADHbRCwF zFTSqEr}sI2?s_lH=jrJq73u2kjp~ci>&!jX%O{T&jCJhp=C8YvCf#k-y9p+l^9N&m zR`apFkIpY&JQ62T90-r)PSMWKjeO?eG8S}lCnAB;^ach%DGr1US6Ske$etKUyX4%+?~U@zC9B{m0+UYQ=FN7wb+cV>8S9Feh>V-1?FlC5 z#=N!GdvNQ$Zrt=W>jb61h8u**;a_1JWy=SXEKe*MN z@q2RJyVaf_*lLf?7iItFZt$_~_q}V&-P6p;K;>(cK3jKh)LoS76Re&&DL#uCQx1V} z2#wBnU93y2PU@Kq6e}3(IOgqEYxCFINVPJT?CR>y$=)bQHRe+jGQp^-X$50%JhA=0 z$%!;(%_RXr*Q3lOgL;abC~n<+x7#;=?QPB1Zt-~bx^45_ZrMEk zb@7hhZ>&A*p>5{e6mN2t%-{571Vq@pwP%G=C+|0+;3zwaZ^|E!G)*}WA|^m`MBVt~ z{M=$MK1Hi(B*ov-Sb`<4c>Lzgcdh<%oU3B7?cB9zJ-E%@H*U5|K7W&2;g`wYs9r`y z7A{IYdG9hOV>Qh;1i~RSI^1Y+AvfdvN$fit}Omz|;^J<7#U;TDh}gtZZuUDUq-=&FKxpw1WQag5N_VQqYrSZAfz$1H1aP= z$s=`Nj?>Z8#)Onn_th%m(}K$z)iW28j{nPX=VjDd!SSEqIB(G|PB2b`?7^747me?L zVlT!Ij^>Y=ijTyJRG7K*ce&-ahGz-%gFqb7*=zV#8rXBC=ic$cZQuF4&EK=m7TN3F z>uiy|u72L;x4&@P-B)^UOk`Ti_w$QqnFQ?7B6D_>Xvfe|Km=FM9A!i?QBt%`ln(W|NE zR$s>K-u?Wo8VlC$uUdC1mbqj)9X^$4%vpJz`(M1n4bR`|eJ|KL zdzG`N&%S&04c@i-2Gw8a^EKC6lxtR>{jSwExNhy2HA;Q{Xu&tXVC$P+uyyq^A~MR3 z;?s$=YSf)zWR6Oro>9!E06sUyCU{Rtk(qI zR{7nMeWXV#m>nW%*V>}pTESLjw7OxNRJuDZ^FnMM79Akb5R z^yeSG^4BF-1VmT_M@dP?lG-L?=91}j<*E3|vG};S>59J-_n|9( z`H`!BQzD-{6)_Rn`TLFP%l+A#{(SIj&xwL(PM^_Kc6E>_xOWq5sw$~7YL3dgyPr$u zTX%xP|8#cqHi*4ZGDP}RuWzdZc02pY8=t-B(w{wW<*%~Wn45E=wrKSeDK)I#D7;~t zw%nLsRv%6zfu&m@Ild0wfvkt z@aTJB{!=3f4Lb(it^1`gwxshSVTHU_u0@O>O-A#=KXY_MwZPz3I&F-g@>A zORflrun3MWNyn0!Cu8Q4>GbZYcsai1tRLKV&W}pulcypkB0GA&(X-_)@iD=4W&3#r zYu&KvjG7w#Ji(GJ>L~&Q#z7!CWahr&ln3AbyG3XG>&<8VNA|k?+#hGJc?jk}j+f)x&iUaT=lvwl()38gMC9~oGn+uFe_2k~G+gO(rcU|z`=|oyJBIfqg%mmrR2IfpHc{{?h$(R($S; zFW7dy=WRagd0V8{`s-}<-s8S`?eX7!@A3b#_&V-eH=OwIZ#(1@r_a6X^m%tTeowA> zcbzupj;2Fq+Tiq<%br`GaMu~Xc-O*z8cmXB%QPY&!Xh}jBpp+SNE^vdpEokr$k0(n z6!YHWzLjQflzQAZqwI7F(TGXK)MA2>Fqv$cxlbA~!S{so2^r^%Ogg)0TpN!c_pMR( z)W3RTc-8WB*-_GV$)ePvt1-b7z8w@z8>!Ybvqh;m$(Tc8V zh~&$XMaj>i5(Pt-riH)Iyc%IT`vLzdMyy&_z(Xlq~pJkJbDcdPJ7qUUw`*8{~U+pl2^R_ zh!^_N>zV~|Zhy7uWn%HUvE^~Mo$}MGj{3@y8JZG)BLX69_bnTLQj>qb5y@kS?1<5h zN1Ad*squJ}ot;Irlm9w)uMOMI9~DN~Mb6Di$$Xm}+W0b0*Cd&IS+Xd#CR=@i$qGh% zt^C>GTDxv!*3Db1Ez;t}8X02ov*SF$k`)Z(inmoVg{VAxU48UdZ$I^Cdu(+=hRBR?6lz!!pu5ecPx$!E(c{KU=aWwJ@tsuy7;Q8mrc>>$=#O3CDSYB`a8WQ3eO&zbKOZ z5F-){#(%NB*6LIVuC;0yLE1KSVp#_{%lvD;FvFG-3{p0 zVP1WL$BuQtQ6!*11t@P{9NUOsqhhNO6R|ZQf_zI`7lvSHwhQ z#Agd$d~R%X#5?DI>&9OrBU@5`wyQgr8+QHKl0~T{ zS$%?q8>!Y&JDvM9AMt52|SBh?zK)~@Ti*q8~&d4eS?Sbb5F zNu9gnC$raCuYBUtUBB_l7atz0({#huTCaR?traYpU_P@)2oUI7fjE&)+2Q`vc6jjA z9UdsZA|@guK0BA>+}QpF2b}+^Po1>=J>?l9Ai^RzGBh1u9hQ+TsXyD*Czu$Xy!|~L zUZ?DEU-@z*&z3AoEy?N=EZj)7#;UdJl4*uUhn~^Bif6=(^8`y)u==7b-VED)@TAOj z{I++U{mLie8-&4uY10R1#_!py){->^*IL1n2{xtmB>@8cED$HsX@B?N8~^S@r~lnU zg^QPe#YHUis0}{_cVD6^Um{7NwSC^$8Ykq*`Ou+I2CZ}yzMkKN#&LtcDsd4>pxun3MWNyl{V9hQ;i>Dxx#33fh_ zjaPcjaU0y%$)eP%q3#5mHd3vz>h8L52#s1p6b5&4rxYe^^9fH zz5X4?Z+Kt!I$^{6kK3^MN4Z+frSS1?O|USz2MG}9Pl3kE#H{NMpLN4wv#!rxhtFE{ zhFLdduOnu?@9s_CX&$lBW!Xh{*l8&iKq>bb;L{qOQBU@Fp zqtqz4sf;vF-!@uJuxY;WW#T+-V0wHP-`*8})E*tTSZ!X1i&6`-?gTqo!8UeXXoN{3 z)1GRqNZ}T3wSwb3!B)3b#k)H{i}aDh*IRVxde>*K!`8duko7vc2isV|!U@*eqJjw! zm{@^06_1_$!Q*G&ciilIN3MIKv0(O{M{ID@ksI8cUPoUhMQLzhBLX5Uf@8}0_ZyKshRAk|0-}uJsv0FFSCkqBHmp)oys*YFF&L+EvN5-)dLCZnZ0$Ug!s>OpV$$S$4NWR=;VVRWDD23mXv-VG$f% zl8))TB5fp(A<~X9bQBO}L@`N8X@ya6+HtZp@)JyF+SDj?t~JeWElRCHO)y=@zFNVG zcXwKRl}2Apu+}aWOn^Wi3T!a_Rr6Q6e(x18p1b0uBiChfR=lL}{l-Siyyk$Fu3IuV z?KRqnfC!7=m~a05MkJrR;$^ZcP(RXPRpiIM*66vF&_OY7J_F znRV><6)d{DNAJ_jL|Q%A?-Q)Gbp;b3Fm3|zN|C*$PMH>8ZZu<;`72#FXT^8STk*1y z>+(2=;;C$5i(lFr!PhStoc0=RL_mZ^=E#tLzY)pjt$6v!SaG05@O2R!BPJzfi_F$A zDcVu|yp=B7XQeClS?TiZ6%VFU9%&Rf*P3JbqGU&p_S}^&IdJ703Kyl;pfSOw6&#sP z4<{IvNBvDRY8tm>*L7!tjb&Y8O=Fc~Sp%e2{%mmh3f7un_O6L`aw}~-W7jHlO#@}V zY;4hN!FAhRoM7Fd#S43?_DbV>fHn@3@(HKfqoH~ zI&GOKWtY9rzy6-TzT?{8T(;nb?cnrW*=Nmj7&GO=VO@nx<2g~9n1Oqa5$ zQMi!`bB_67ej+iu9&M!j1Y?WF+QkY+8Ods9>lw57l7Ln#*d&>J+1{O!Ej4N9=?aHS zAG~zYAF|iQ*Z%std;YS^-si=%W6Dh@QsXec@sBY?8ebCJZ({A$Gj-bZ=olJ> z&Vz%~!X$SUzcFYEn>KxBJhJQD3kowg{TKJzD?Z;VMr>NabSaw}g&QfKu)RlOc1>j@ z8!0rR!bB#^RX9o{$;Kq@SdqfaBm23rn%(-<>K<&8Oup>aosy?394>wE@|&K?UYA_| z+Z!5p_XUB_ba&@jCS-#7GCV?nz{CoS9tHOfz2my4FN@C{hOanV;@g=xd$Z-W3Ql`v z8l zo=Ew#u3M*QcX7IytrcD3{KECNd*QmJB-Fn>(wqN-<>qG(ZeP~k|FIab*7p^xN z{NfE>9v$~P{QCEP;4krAXSx=JE7+8(?Jx5yn2y`j80RuVARIy?OcI&Js_ShVZcXz| zY{NOU!#wqGG}hbB`;Dfh%zjzxhHbU^vkB97t;|ge>PrFy`dOgWQBe3Y(JDASE3%D} zb0hz1RTA9Kdev(yr@QWhL)q&+cMaYBv7tTpZ~Uczsncd;M+v%XKQI&@9A)F9{m$Em zF1_K8m)$t}kx}6aW>a<2&aYs0>9g%|FXNeT2#qG65DT{`J3H&dHk?B{%$vGoXA$k* zZPD_*(W5e|uV7OF$(OY>CS-!yh1MoOpdSR%qu{!GhAzJL=}Q;=DY@d6>yjH<{&`AM zaM~-|h-?uy^5@-+pGr-C#aS20V~8}qBslFgsT-}F6M>7b{Z00I>orfk`|f9V-s_y0 za?&xKd(gf8y}ydnJ{uqHORoQ2ybxTv=#MFB;R>dCI&9=uFdet4G45r=o31~FMw3s7 zgOVOx#9Q28)@-5&@_7bWi5>f znP7IIwFwaD2Z7`$h@Y>!@qwYs7X9|ho1aOpt8RJriuV=&yl6f+?Uijrw#XU5G0kL@ zbiQ%cMe-OTjV}pKdrj&_E9X=o+bGe<(`7qm+l4FGEyJawjBYJThpH1&Myz0bI}ktX z5}*8JuWRlcy5gokUU~EAy_wxqX}e^L<~1f{g84E$LV&=;3M5Ctj=P<6*-b;|T=vxY zSN$frF1Y&X^R6uZelQ=L_R2OQTjY%3m|!wWI@37oB6$pv#+L-Ay(V>|m2)bPZIo!_ z>9QTO?ZOr8mf_M-MzBYt)z{x<8bb1sNaAd_pixo?if5hp$N*7yA1c~|^0 zyO;9qk}aCon2-tP%kT&R0uw7Rb!y{JI=0>MjI%BqI_{hwop}DwlIx@ketyDv{~a$Y z+45Qir@gX`$QC&xb7V+5rl}%rB#$A|_>$nX*Q9RrjxIH9Y80+uw+!bb;L>gZboc5a3jaJU7K(;pM;YB(lnzxVs*L#9A$u(|V}cq`QWrywh`GPX9UOW zl2OuWM%qXoL!|K~!D+8a-Du^U3S=848hN^G$85WB1-oUqbd=GpMd?s=sV}2XCfMOJ z=}v$^hXR9xjejX|(``;&aONKlJoeuXKK}d3b;t=nIOw?VHND?x6`c0UHX>W(jLeZg z>6n%pX(M?Ik;az7p9(_WcIWQ&{;92F*`q@_mM zNWR}u-%W=r2~K-W>PAcFj93+oJYCwWxly!&-7;J{%IMajbf~)2m(eE^>~NWMCqSS> zf#fK7$(AP{e)4bkJM!DFKl;0iuLa-R|EPZ}e7{i;oc78zB3tB);HWSeB`r15M)KD$ z_+C0(NpRY0Qa4&UXT+*#HS9b-9m}R((yvy;igTycc{^={hZd*USp{*qfaK--sT@~M%ro-7T{^qaKJ-qEFoxkkYXcF(VQ1#_dPJE4Ee=-#4qBnZh>{BDxr)RzF$-?&=MZsyW(MDv8oDm!~CZlAE9f;(! zUKT?vjxP<)^qaKJ*3P41IgKNyOqn(?ux$LExu!SKrM+^Ef)(tZU-Js)Mo;I}S7pSz z>ru?acGb0x%x(U(_|Zo1wrE>>qwu!sXnA{AM(;9rG+~_y5Ex&9CAr#npd*)+IyqhJLK6SnnW^9uHT86g(?x!_kgZ?esImfZZU7NymGE=XJb zq56Acl9kaX6Rf@>A_)-ag+Ou?tgy0JnfeDJ`C2cIAr{A%250(B+GcC#QL&81W6xdhvn#D}+4N-(TxPjL;`hvT z&~Vr&UD_+xC|JSn`8BU#ZuE3s{Zq!{)0aIcBe~c%oI`uf7d_T`3XQq+Zj0938zr|@ zN6Xv0GJ2P}qY3LwfWUYQ#K+51rp=r`^EscHx$^xpR{qe)_2C&SKh*SoWB9Y^!r-*m zXd|*k&d5AGp~fhgUjvbR#>z3o;`q|wOutFoY~?&EmeGg@A6WJ|Pb|Os=knKZSm+gW zT=K!f73`K^^9n9GbhfrWDWf5l$Bak9Ikabv<=M+ET5E5V+*TbfZtu$IUFHs_tUCb$ z<0;TM3TCWu(8|yI{7P#*w9?uSk6e$ewDv~|-)|HJr@bxRJV6M$B=!Rb!@0c!oxyQXX^okq)-G0Xxb&v|+~IUu-Gfb%!(VpqPMJD=#*)|a@#V5BAJ#Yu)-DDdRjpUX#7wZm zRneUQfo=;VC+GfC20l4u;Qdpk+&gmJH)Y_S+^bcq;Ivn!5!oW=l>LVbPCBNw4-6;2 zZ)B`{8$-7YPJ2!2Mnhowa!0JN=D#ez`X`rP{j-_tGgAgKZlg<3?ZM%`)0ca!k#M!o zWYWfGBcIN#V7Cl&E7-E^!j06mGGdOypIVG~4hw`vV{3J$y8P-{%*g-ASi4xk;nJJ- zbBELE)@{{c8AEOu3yG~pCX&FRdCuX+lXwDGcrepq+^;Y(nj(aB8@KzPJ2!AM&oZ5 z4-Bq0IBk=`X|uD})ae^FX{0Pw8VhcF>a<6Hz4iWAM9%3mUy{kZVYGXMmS4eEr50|a zE><->-^NUnD-j5dFbSDfRh2)U)Ew)QrX6W)5-T`d{1Sgpyu;~q>$a*@My%k`xBbI0 zw|{ZLZRz!;XdiRO_ZHs$yM=fCs+_3S4Lczdtfe8C0D*B3m^!`jeq)!D-ge!uhA#f* zUoZXFq2#*k--a&v&QR0)jaI>FuWTc-Mb5|^`IC<6bRumek0H|dlHj!0Qru|LNLi{h zF8=0U!ud5PUf6K%?zi2o#q%rJs?@@b)H-pe&m;n&F}$Du(yFTR$CH{nEv0h*ZrxUu z2W$k!3I@XE|K7L_v)84WyRt;7)(tx$6Rf2nm;ixs5J--KosPNas{j1!1^@8uTfY3) zY zfoV+|DNB_`hHfza{5{E;`MoETi;YpS=E9BC)tVMFCR0uXDsItMydyQoySHrebnUuY z{>a@?vF6NjH{VvZ%4)3OKmOlEU-`>hzT9;E^(~njvlUUTGFlxng~@AWt~F)B1PDy5 zz~ZA|;YC;fXz0Q({`sP>4kg!Hzc%!iul%L>{YEZ0?Uijrw#d2D!i!>p`S%-b8Mcl<}6ZGOMeA~@}pZA7-n8JVNz zWR$e{NE^vxh%~+=IPJBxHu4%NOO?ii&{eOwa3l3@DO>I5Dw1hTKiAx?<*vShDND9d ztBhKUQY&-sHj>N)2y|Vb)lpD*jQSH0%K zjnum(sI^5~@%D4g?JV~|ELZ%o-4fT};IyXq{H-(!AFowLtwpJoxpx~$W&#AdE|44r z+a7k|Szj4C?$JM-_{9Gv*GV6X4fKVd+Rs%a)0lp)xr@u)bPuM}uhOVhMy*AumAQ8tNoE2B zx-O6$1zR0_;b~tOI{HJuKjx7?C)dJ9|98Q|&&110cEnb}X|HS}vPI6w92t_1X{tyY z$zzB#z9cy9wX`I^ZP8Y|{akasbeJ-T6#9TuE@+YiVudHBy!; zjR~QvQFGBo>fKV-+M+Fa`?%&>%RM+P{=U+b%?`fw*e?tn^3c#>4=-`GoPOpmZWU9r zjK*KOFF0h12C9|0cN&3v zcq2u8C&NXxQFE1rYq_5@J9BK+qRn4r^!8$E)toH%OZR_scut$KLb>YH;edFdKjfij z_qpj8``-GS>@~JS25rCFpUz&dyZIM~e)!Lu>~l^`IjO&7?rlu4@Z2aF!cznY^uIuI z6ufl5^N;xG(ChDbdj9+WwD|hKGY8yV{C=Y#IPH~bM7GEo!GX|pBE>6gB%l9*XVT$H zg8SdF!wT~nDNB{cM9~ee;Im^__g?21PJuM zKynn!o^#%Q_YUoG-LLn$@ehlyoBp`xqTj_!VRi~FgVSD_Mr4bekvTFX9n(~iHj?jk z(;w5}N`li~OKT&qk+M{2)S^p1C0J$sSFS(rq8IIU){9?zZhP0dyPvn`qTlazr>Xl%v)bZCP{C=I`D1t5x%!H~e{Tw8ukc-90WS zS4{#UIJ!i~mh;WrwnZ_2+-uSAU$XB7@tH$<#U~q^9emN68}HclMX9x)d$%Yu6Clua zf%rT&a=vJ{b9a5;&?_$g<&IbVZt->X?{~cN={VoBBeo1qdu1AtEpkTY$dGg#O*JqW z$#;w)M&iqYN4qVht(->6Ql(LgZg6Vj5A7p9(_WcI zWQ&{;95YHr8J*g|U?kruh8T%23m)yZl(upjDNB_`ExN@g|E_24dgGs8ap_NYyyBN_ zUsY;LW7-}iI!2vQ?TdCjt6(GLc0|klJhIc$lFAxIn?E;H*B)r2=2uhVBOu%-Q%{Qov!}n&e!~I@%8TC z@BFUf_ZtPlX|GHpvPI4aj!7h=jLv3YFp}>aLyW|i1&?-HN?SRNl%-0e7G2Bb9$APg zBaU;-1Wd4K^Y?D^_4}f9tWj%%wU)bgiy|`t0$mpv822F7>wkb#SkO$Wx=D}meN*EBW0=5s6|(6 z1*?oc4lxrj!J^IIyUo|{i_)=1tqImz?%pkm%mfH@T_8CMR)59WFTG@FqqBa#@wvZV ze4Y23jnDaI;roq(;Ivn!5!oVV1V_!uD5J#>3`X*eV~COXvf$BfOKB^ok+M{2)S_#- z+#?H7WyEognScovZT{YEzJ6bnjx}mcu-0<-Zc$_=K%naa$x*PzE6?8a(xHvd{`n^7 z{d)0r{%bgCNacFd|B{lx23d|(@0sWG-}bc zT<(#Ds50U>$4tNki#C7nHeY`&O3c0Ky5Q+e&TIatvzA7!3D#QfT4e|(Kwx48S{?;O zM{djDqF1Z3b0hZ(TNXUAK;tlaPNUWfdM&zID_E0hzEy}sSYJ4w{ zz0Uj9Cg=R3>7&kC8nq@^Yq@KcA(#Mxi4_am+6kUkm?d zjRik%I%HY~r@b`fkiqe$;f$y*DNztx#h zcd|ew6R5R0?!e1=Dj{ToC zk176qqaZl#m1#t_$Qi*gg=Cb`xeN?O@-<_Kk@&LU(QZp=D>P2{)0!v!dCe1_UE(_a zw`(qZYR!eCN{hLc3|r&)->rSt&${IqO;*DYvuA9;mhJYAtu!sGcK0 zpw9%7qhQ%B-n8loL#w>uC#xL!)X4RVRgU;s(~;XcIPH~byx}L2Gcw1Fla8ZP9~g|} zs~q`@k+GhNp<4!zc3VnYp)vQdRrYyem3fbkT*K`Hzp=_uzh32tpN}fV>KyUZNX$s^ zoQGGP|HWlDI%L>+jBiWpt>EZp$SmvlKUimP3=B2|LL*F8ne%Y7Rp@2w58Dt9=Z1X7 zKh|RIV@;dCcbl(X&Dr`pX?M1fYH8Hlb#<1zRvCf`5SUSM!nEGC1v(X+*Zj8JXi((lMQCd{Q0B=lyJCte-Z9ZWWyN`de$vI&R8= zLsRDb=crPM&HYJ747FBpbTed@b^IUf;@$|oC3f9^HiW~upMN#g+#UapH&QLJTDz`` z%U!ET!2}5OT43=}aN5B9X9wnfZ(yGvj$A()nD?J8-f!fC(_WcIWSjr&l#Nbn%pmuE zBa#p7^P`cme%KhgRdBBb`XGP&0RIx#^c5OkZgR%J{AcouGB9oC62XnWGvcotSDHu5 z<<2bJ=pN{g2iw>i15?AKSt;BKcHJ`#=P*pnGYe74vx`9$YwphKH16(>Hd3vL*V=V$ zEO)J91QQ@IQ38XF|A5z&m%U}mQA1PaKQrZ^zm8l(Qx5!px%V5bg414^Mr4bekvV=P zqcmE>zvAvy&pq@TDz{#7o~Fz z83+&{K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs V0RjXF5FkK+009C72=u+c{|DVcYF_{V literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/DS Beta BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/DS Beta BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4a8c2a57b0ed3c62c9c52da027bf9386f50cad37 GIT binary patch literal 1555254 zcmeFa3;ZodRp-0v|K9&cLUPU_IVTApm4`eBb({zZATn1+2Avr%iYSQk5QG5%0YM=U z0`f`_2#$C!D364ff(Vk3gb+^7$w|T^5P3Qf5d`kwz!gM!Bh0sJom1)b-n(~qb?^Ou z{dW57^zMIm^{Q`Gty)#Js_I@pfBHL5vf^_(|8C2_>*xGmu#=0+X8irC<1GI33;GrT z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p z5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z 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 z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j PD4>7>3Min!^aTDNc4n+0 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/DSi Beta BIOS.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/DSi Beta BIOS.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8f1188080bd65262a2e9b28a15b95d1dfacc2ceb GIT binary patch literal 1555254 zcmeI*&yy`@c^~kj8_<5ydi0s7i3aXN*DvLxihPdqiz%0CQ zkP4Ij8&l znlr=9+)r2Exjj97-hTV@cK7@Ad%FAmhyUow|9s!9h9~pyk^Fo0O8a-$?EacPo8|9+ z_{Q1%Uz;(Tbp`?i2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ y009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oSiF1pYsI69bn3 literal 0 HcmV?d00001 diff --git a/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA BIOS BW.bmp b/skeleton/EXTRAS/Tools/h700/Bootlogo.pak/720x720/GBA BIOS BW.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a2befd4022bf156f8da9db64d2de3e82cfb6cae7 GIT binary patch literal 1555254 zcmeFa3A8mwS--0yGKGK(Sl~@02_aEP0s@f$0TQDOA%IaJD1tIiSD96=5XQd}lvz-e z5C#Fc4%b;6ZWv@tfCvOoLlTgH48bc?!leA~ll)Arws-H|-POJK+2?#uul4oUyH9oX zTTfNJ_10TMpKy;`|NZs9oQa2AAFbj_=^_@7Vu4F8`Mso+Tgw z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(MnFoEy< z&hPx5!N--aeC6q=h-B~!zX$Oa-#ClR)5Ta6EO(~IJWB$XiC6Al=}K1`o)ODJme__| zEQ_S`{*VYun9dlM-7HTHxmXs-jQ2-Xt5IcRnUI~;Y6uO(NI(J-kbndvAOQ(TKmroj zLIUaI9C+Y?&v?c&p8C|Ma_%{v{`9Bw*M~mzp(NzHzx%uEl9LCCgs2i>&l@8W;_