Changes in this release:
- 1a51809 libhelix-mp3, libflac: fail the build too; drop the .mk comment Extends the previous commit's fix to the two remaining packages built the same way, and removes its explanatory comment from libhelix-aac.mk, whose reasoning is already in that commit's notes. All three packages share one BUILD_CMDS shape, and they are the only three in the tree that do: a $(foreach ...) whose commands are joined by ";", followed by a link of "find ... | xargs $(TARGET_CC) -shared". Without "set -e" a source that fails to compile does not stop the loop, and a shared link permits undefined symbols, so the package builds green and installs a library missing whatever did not compile. libhelix-mp3 carries the identical gate that libhelix-aac tripped -- assembly.h:353, included by 8 of its 15 sources -- and would fail the same way on the same target; it was not hit there only because that build does not select it. libflac's own "#error Unsupported platform" is a narrower ppc-hwcaps path (cpu.c:257) rather than the same trigger, but its BUILD_CMDS has the same shape and the same silent partial-link outcome for any source that fails. Co-Authored-By: Claude Opus 5 noreply@anthropic.com
- 3aa830e Revert "sysupgrade: add status=progress to dd for per-partition transfer progress" The camera's busybox does not support status=progress, causing dd to fail with "invalid argument 'progress' to 'status'". This reverts commit 3134bf2341820deeb549eab88777b01c4dbb3f78. Signed-off-by: Paul Philippov paul@themactep.com
- 3134bf2 sysupgrade: add status=progress to dd for per-partition transfer progress Busybox is built with CONFIG_FEATURE_DD_STATUS=y, so status=progress shows real-time throughput during each partition write. Signed-off-by: Paul Philippov paul@themactep.com
- 1fa169d sysupgrade: let dd print transfer stats during full upgrade Remove 2>/dev/null so dd reports records in/out, giving visibility into write progress for each partition. Signed-off-by: Paul Philippov paul@themactep.com
- 7e75ea4 sysupgrade: flash partitions directly from firmware image without temp files Previously the full upgrade path extracted each partition to a temp file in /tmp and then called flashcp on it. On memory-constrained cameras the combined size of the firmware image plus the extracted partition file exhausted tmpfs, producing a truncated file that caused flashcp to segfault. Drop the intermediate file entirely: flash_eraseall each mtd partition, then dd directly from the firmware image at the correct offset. No extra space is needed beyond the firmware image itself. Signed-off-by: Paul Philippov paul@themactep.com
- d62fe3d sysupgrade: verify extracted partition size before flashing If the firmware binary is shorter than the sum of all MTD partitions, dd produces a truncated file and flashcp may segfault on it. Check the extracted size matches the partition size and die with a clear message before handing bad input to flashcp. Signed-off-by: Paul Philippov paul@themactep.com
- 36bbfe1 sysupgrade: fix subshell pipe so flash failures actually stop the script The
tail ... | while readloop ran in a subshell, sodie(which callsexit) only killed the subshell — the main script continued to print "Full upgrade complete" and attempt reboot after a failed flash. Replace the pipe with a temp file + input redirection so the loop runs in the main shell and die() properly aborts. Signed-off-by: Paul Philippov paul@themactep.com - a532db9 sysupgrade: use hardware watchdog reset before reboot -f on full upgrade The full upgrade path did a plain
reboot -fafter flashing, which can fail with EIO because the rootfs has been overwritten and the kernel may have stale page cache entries for the reboot binary. Add the same pre-reboot sequence already used in stage2's go_reboot(): sync, sleep 5, trigger the Ingenic WDT reset via /proc/jz/reset/reset, then fall back to reboot -f. Signed-off-by: Paul Philippov paul@themactep.com - 3c26abc lightnvr: add tarball hash for v0.36.6 Signed-off-by: Paul Philippov paul@themactep.com
- bb234e1 jct: add tarball hash for v1.2.0
- c93c02f install packages system handler by default
- 61fde40 package/thingino-jct: update to v1.2.0 Update thingino-jct from v1.1.0 to v1.2.0 Hash change: v1.1.0 -> v1.2.0 (No changelog available)
- 2c6455c package/open-tx-isp: update to ad9db44 Update open-tx-isp from fddb684 to ad9db44 Hash change: fddb6843814385dad8b684dd922bc488cbcb70c2 -> ad9db44cb71b25460ee50e6bcbc5cfc27a5a0958 Changelog: 74a033c: share T41 exposure and scaler pipelines 33603c9: share T23 polyphase scaler generation 7486de9: share T31 flicker exposure and repair ISP tuning 42948f7: share T41 fixed-point division fef815c: share T23 fixed-point division 07c2a95: add tests 76d6f9c: share native 64-bit fixed-point multiplication bbba792: preserve accepted T31 AE code generation 13633bc: share T23 wrapped fixed-point multiplication c1c133d: share T23 and T41 fixed-point add subtract 2ebc0a5: share T23 and T41 64-bit add subtract 2a5c061: share generic T23 and T41 fixed point add subtract 86ea753: share exact signed fixed point rounding 4b2576c: restore T31 full-rate pre-dequeue and high-gain profile 4c7fd31: share full-width fixed point multiply on T41 43acaed: share full-width fixed point divide on T41 a2fb1c9: move T41 fixed point log2 into shared math 1c663ed: move T41 exp2 into shared math 4406c6c: share T41 Q7 tuning ratio without shifting text 54c035d: share frame channel wire ABI across active SoCs 1c3f2d0: share frame buffer state flag policies a80cba4: stabilize shared frame image format ABI a5eb611: t40: support SDK sensors in canonical module 67a4c72: Check pt 315faa9: complete shared frame channel contracts 994a604: share frame request wire contract aec02a9: share subdevice link ABI a3206d0: share recovered link detach operation b7ff3f2: share subdevice graph resolver f77e9a3: share subdevice graph wire ABI 87d6f44: share subdevice link state core 163cccf: share remote pad event resolver b50702b: share recovered subdevice state policy 7251cb0: share T40 subdevice core policies f85440d: fix T31 frame buffer ownership and timestamps ad9db44: document T31 DMA-done buffer rotation
- a32a595 package/lightnvr: update to 0.36.6 Update lightnvr from 0.36.5 to 0.36.6 Hash change: 0.36.5 -> 0.36.6 (No changelog available)
- c1791e4 fixed-size partitions, config backup/restore, selective upgrades Replace the sysupgrade re-exec/GitHub dance for boot, kernel, and rootfs OTA with a minimal flash-ota script that receives pre-assembled, partition-sized files and flashes them directly to the matching MTDs. Host-side (scripts/fw_ota.sh): - Pads partition files to exact MTD sizes (boot 256K, env 64K, rootfs 64K-aligned) - Uploads flash-ota.sh + individual partition files to /tmp/ - No more concatenation + camera-side extraction Camera-side (package/thingino-sysupgrade/files/flash-ota): - Resolves MTD names early, clones busybox to tmpfs for rootfs mode, remounts / ro before erasing rootfs - Auto-detects flashcp -A support to avoid double-erase - Stops streamer, flashes, reboots — 85 lines total Makefile targets now pass partition files directly: - ota-kernel: (uImage) - ota-uboot: (+ u-boot-env.bin from images dir) - ota-rootfs: (+ data.jffs2 from images dir) - ota-full: unchanged (uses sysupgrade with full firmware) sysupgrade bug fixes (no longer used for partial OTAs): - Replace fragile '! echo | grep -qE' with case patterns (busybox compat) - Clear GITHUB_URL immediately after getopts when a local file is present - Skip file-move when fw_file already exists in workdir Signed-off-by: Paul Philippov paul@themactep.com sysupgrade: use flash_partition helper to avoid double-erase Add flashcp_has_A() cache and flash_partition() helper that auto-detects flashcp -A support. When available, uses flashcp -A (single-pass auto-erase); otherwise falls back to flash_eraseall + flashcp. Applied to all flash sites: boot, env, rootfs, data, and full-upgrade loop. Signed-off-by: Paul Philippov paul@themactep.com
- 2b6328d package/prudynt-t: update to ad6294e Update prudynt-t from 4e29b88 to ad6294e Hash change: 4e29b8858478e6a229fb75f946b4db5f6d034f0d -> ad6294ec99829b6e9ea790f75cb7105e23b85026 Changelog: b141310: api: secure config endpoints with X-API-Key, add CORS, bind to all interfaces 62a06cf: api: persist RTSP password changes to disk and restart RTSP server ad6294e: httpmjpeg: remove unused auth helpers and is_loopback
- 761ed62 libhelix-aac: fail the build instead of shipping a broken library The compile step is a $(foreach ...) whose commands are joined by ";", so a source that fails to compile does not stop the loop. The link that follows is "-shared" over whatever .o files exist, and a shared link permits undefined symbols, so the package builds green and installs a library missing whatever did not compile. Found while building for a non-MIPS target, where 15 of the 28 sources hit "#error Unsupported platform in assembly.h" and the resulting .so contained 13 objects. Nothing failed; the first caller died with symbol lookup error: /lib/libhelix-aac.so: undefined symbol: UncoupleSBRNoise This is a no-op on any target where every source already compiles -- it only changes what happens when one does not. Co-Authored-By: Claude Opus 5 noreply@anthropic.com
- 1d93bba telegrambot: substitute $chat_id in command strings before execution The run_command() function was passing command strings verbatim to popen(), so $chat_id was never expanded. Replace every occurrence of the literal $chat_id with the actual numeric chat ID value before the shell sees the command. Fixes #1367 Signed-off-by: Paul Philippov paul@themactep.com
- ece1953 fix: imp-control missing API key breaks prudynt color/ISP commands imp-control communicates with prudynt via its HTTP API (/api/v1/config). Prudynt requires an X-API-Key header for /api/v1/config, read from /etc/thingino-api.key. imp-control was not sending this header, causing all ISP commands (ispmode, brightness, contrast, etc.) to fail silently with 401. - imp-control: read /etc/thingino-api.key and include X-API-Key header in all curl requests - S10daynightd: generate the API key file early (before starting daynightd), so it exists when daynightd first calls color on/off. Previously the key was only created at S48 (webui-config), leaving a window where prudynt's API was inaccessible to local tools. - S31prudynt: after prudynt starts and its HTTP API is ready, re-sync the ISP daynight mode from /run/thingino/daynight_mode. This fixes a boot race where daynightd (S10) tried to set the ISP mode before prudynt (S31) was listening. Signed-off-by: Paul paul@earendilworks.com
- 684c705 webui: gate WireGuard button on feature flag, reorder offcanvas nav - WireGuard VPN button now only appears when thinginoUIConfig.device.wireguard is set (via wireguard.webui.json plugin featureFlags) - toggleWireGuard() bails early if WireGuard feature flag is absent - Offcanvas nav: move Information block to bottom, just before Help Signed-off-by: Paul Philippov paul@themactep.com
- 9c4f57d webui: use port 8080 config API directly with X-API-Key auth Replace CGI middleware passthrough (/x/json-prudynt.cgi, /x/json-prudynt-save.cgi, /x/json-prudynt-config.cgi, /x/json-config-rtsp.cgi) with direct port 8080 API calls. - All config read/write now hits http://{camera}:8080/api/v1/config - API key loaded from /x/api-key.cgi and sent as X-API-Key header - apiFetch() helper awaits key promise before sending requests - Export config now uses dump_config action + Blob download - OSD save uses POST with action.save_config for persistence - SEI OSD check uses osd.sei.enabled path Signed-off-by: Paul Philippov paul@themactep.com