From 3f3f25aac15779f1f77334d4348169da8ce8aaed Mon Sep 17 00:00:00 2001 From: Joseph <162703152+josephnef@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:39:00 +0300 Subject: [PATCH 1/3] Restore the MediaTek no-video fix: 16 KB RX URBs via devourer + heap RX ring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes the #6 regression reported on 2026-07-19. PR #104 bumped devourer past the transport split that deleted RtlUsbAdapter.cpp: the device-side half of floppyhammer's fix (16 KB RX aggregation caps) survived, but the host side regressed from 16 KB reads to 32 KB URBs — the exact transfer shape some MediaTek xhci/usbfs stacks (Dimensity 810, Helio G99, MT6765) never complete: LIBUSB_ERROR_TIMEOUT forever, zero RX, no video. - devourer submodule -> b7c50ec (OpenIPC/devourer#317, merged master): 16 KB URBs on all 11ac generations + matching Jaguar2/3 aggregation caps, tracked in OpenIPC/devourer#314. Bench-validated at delivery parity on RTL8812AU / RTL8812BU / RTL8812EU. - WfbngLink.cpp: cfg.usb.rx_zerocopy = false — keep the RX ring on plain heap buffers; the dev-mem zerocopy path is unvalidated on Android vendor kernels and every previously working Android build shipped the heap path. Co-Authored-By: Claude Opus 4.8 --- app/wfbngrtl8812/src/main/cpp/WfbngLink.cpp | 6 ++++++ app/wfbngrtl8812/src/main/cpp/devourer | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/wfbngrtl8812/src/main/cpp/WfbngLink.cpp b/app/wfbngrtl8812/src/main/cpp/WfbngLink.cpp index 217a9214..e8d9c14c 100644 --- a/app/wfbngrtl8812/src/main/cpp/WfbngLink.cpp +++ b/app/wfbngrtl8812/src/main/cpp/WfbngLink.cpp @@ -124,6 +124,12 @@ int WfbngLink::run(JNIEnv *env, jobject context, jint wifiChannel, jint bw, jint // The per-adapter advisory lock defaults to /tmp, which doesn't exist on // Android — use the app's files dir (same location as gs.key). cfg.usb.lock_dir = "/data/user/0/com.openipc.pixelpilot/files"; + // Keep the RX ring on plain heap buffers. The zerocopy dev-mem path + // (libusb_dev_mem_alloc / USBDEVFS mmap) is unvalidated on Android vendor + // kernels; if the mmap succeeds but the HCD's zerocopy path is broken, + // the heap fallback never triggers. Heap is the behavior every working + // Android build has shipped. + cfg.usb.rx_zerocopy = false; rtl_devices[fd] = wifi_driver->CreateRtlDevice(dev_handle, ctx, nullptr, cfg); if (!rtl_devices.at(fd)) { diff --git a/app/wfbngrtl8812/src/main/cpp/devourer b/app/wfbngrtl8812/src/main/cpp/devourer index 73f1cb4b..b7c50ece 160000 --- a/app/wfbngrtl8812/src/main/cpp/devourer +++ b/app/wfbngrtl8812/src/main/cpp/devourer @@ -1 +1 @@ -Subproject commit 73f1cb4bcc6d1cfd6c5560f6637ce34aeaa94803 +Subproject commit b7c50eceaeb43f10cbdee3726cc2245ae6fc3c71 From 5061d1f61d8548c2d4a5e7a728bdcc4027afa3eb Mon Sep 17 00:00:00 2001 From: Joseph <162703152+josephnef@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:21:03 +0300 Subject: [PATCH 2/3] CI: don't recurse into devourer's vendor-kernel submodules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The APK build only compiles the devourer library source; devourer's reference/* submodules are vendor kernel drivers used solely by its extraction tooling and hardware tests, never by the build. Recursing into them clones eight extra repos on every build and — since devourer master now pins reference/rtl8852cu at a commit not present on its remote — fails the checkout outright. wfb-ng has no nested submodules, so submodules:true fetches exactly what the build needs (devourer + wfb-ng). Co-Authored-By: Claude Opus 4.8 --- .github/workflows/build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5e93953..707c7600 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,12 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - submodules: recursive + # Init the direct submodules (devourer + wfb-ng) but NOT recursively: + # devourer's reference/* vendor-kernel submodules are only used by its + # extraction tooling / hardware tests, never compiled into the APK, and + # one of them currently pins an unpushed commit that breaks a recursive + # clone. wfb-ng has no nested submodules. + submodules: true - name: Set up JDK 17 uses: actions/setup-java@v3 From 609110e5cc5cbb21a2db16da1d8c6da62d7ab134 Mon Sep 17 00:00:00 2001 From: Joseph <162703152+josephnef@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:29:03 +0300 Subject: [PATCH 3/3] CMake: add devourer sources referenced since the submodule bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PixelPilot vendors devourer's source list by hand (it can't add_subdirectory devourer — that resolves libusb via pkg-config, absent in the NDK build), so new devourer files must be mirrored here. The bump to b7c50ec pulled in two sources the compiled J1+J3 device classes now reference, causing link-time undefined symbols: - src/LaCapture.cpp (LaCapture::run / ctor — la_capture()) - src/jaguar3/PhydmRuntimeJaguar3.cpp (PhydmRuntimeJaguar3::tick) Both are self-contained (own headers + RtlAdapter, no excluded-group deps). Iqk8814a.cpp stays out — 8814 support isn't compiled here (no DEVOURER_HAVE_8814), so nothing references it. Co-Authored-By: Claude Opus 4.8 --- app/wfbngrtl8812/src/main/cpp/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/wfbngrtl8812/src/main/cpp/CMakeLists.txt b/app/wfbngrtl8812/src/main/cpp/CMakeLists.txt index a7320129..f2314025 100644 --- a/app/wfbngrtl8812/src/main/cpp/CMakeLists.txt +++ b/app/wfbngrtl8812/src/main/cpp/CMakeLists.txt @@ -47,6 +47,7 @@ add_library(devourer STATIC ${CMAKE_SOURCE_DIR}/devourer/src/SignalStop.cpp ${CMAKE_SOURCE_DIR}/devourer/src/WiFiDriver.cpp ${CMAKE_SOURCE_DIR}/devourer/src/PhyTableLoader.cpp + ${CMAKE_SOURCE_DIR}/devourer/src/LaCapture.cpp # --- Jaguar1 (RTL8812AU / 8811AU / 8821AU) --- ${CMAKE_SOURCE_DIR}/devourer/hal/hal8812a_fw.c @@ -71,6 +72,7 @@ add_library(devourer STATIC ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/HalmacJaguar3Fw.cpp ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/HalmacJaguar3MacInit.cpp ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/RadioManagementJaguar3.cpp + ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/PhydmRuntimeJaguar3.cpp ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/PhyTableLoaderJaguar3.cpp ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/Phy8822cTables.cpp ${CMAKE_SOURCE_DIR}/devourer/src/jaguar3/Halrf8822c.cpp