Changes in this release:
- da40db6 package/wifi-atbm6132cu: update to 6f4f122 Update wifi-atbm6132cu from f2e8ae0 to 6f4f122 Hash change: f2e8ae06dd8a439461d22e70504f246320a87414 -> 6f4f1223e8545d15d64ea8c92fb7957f52ed511b Changelog: d90c3f8: hal_apollo: define CONFIG_WIRELESS_EXT c99e012: atbm6162s: build bundled cfg80211, enable CRONUS 6f4f122: hal_apollo: read txpower/rate cal from /usr/share/wifi
- adb6497 package/wifi-aic8800: update to a870f7f Update wifi-aic8800 from 96cd509 to a870f7f Hash change: 96cd509a9b6282d4f55adf2b394801ae9ae22599 -> a870f7f15170a5899bf0b98769896fd1a7d4bf1e Changelog: a870f7f: Point SDIO firmware path at /usr/lib/firmware
- d2ccf7b package/timps: update to v1.9.14 Update timps from v1.9.11 to v1.9.14 Hash change: v1.9.11 -> v1.9.14 (No changelog available)
- aa6abc4 package/thingino-raptor-hal: update to fd01e76 Update thingino-raptor-hal from 43dfb8d to fd01e76 Hash change: 43dfb8d644133e2ce7c457cea585669e10eb3a5d -> fd01e76e92df2a91d663cde927832ca78dfc8f70 Changelog: fc637eb: T32: build against ingenic-headers 2.2.0 fd01e76: ingenic-headers: follow the rebased 2.2.0 headers commit
- 51179f8 package/thingino-motors: update to cf2cc60 Update thingino-motors from caa4bf3 to cf2cc60 Hash change: caa4bf3d9f5a9fb8b72f8e0d42bd044177dfeb56 -> cf2cc6043a13935e3a4cacdec71521f7aa48b181 Changelog: 4b44a88: motor-daemon: skip userspace invert XOR on SPI boards e5f474b: Revert "motor-daemon: skip userspace invert XOR on SPI boards" fc21f47: ws: give frame assembly its own deadline 7761705: motor-ws: close cleanly on every error exit 74bb595: motor-daemon: keep the blocking MOTOR_STOP off the frontend threads cf2cc60: motor-daemon: serialise MOTOR_STOP across threads
- 74cf774 package/prudynt-t: update to 354b1b4 Update prudynt-t from dbaff7f to 354b1b4 Hash change: dbaff7f9799bb025f2c642d3c225180653a04b66 -> 354b1b4bde4aa67860021531b85549d88ee1717c Changelog: 354b1b4: http: stop the fMP4 session from leaking the video pipeline
- e10d1b5 package/nino: update to v0.2.0 Update nino from v0.1.0 to v0.2.0 Hash change: v0.1.0 -> v0.2.0 (No changelog available)
- bed308e package/lightnvr: update to 0.42.0 Update lightnvr from 0.41.17 to 0.42.0 Hash change: 0.41.17 -> 0.42.0 (No changelog available)
- d58a4f4 package/ingenic-lib: update to ea62f3d Update ingenic-lib from 99ed33f to ea62f3d Hash change: 99ed33fd55fdf4fdfaa378a0924c5c6a7a31943b -> ea62f3da40cdca2bbf7bdb89b663f89952f850c0 Changelog: ea62f3d: T32: add 2.2.0 libs
- db9c33d prudynt-t: send the API key when preview-fmp4 reads the RTSP config preview-fmp4.js refreshed the endpoint credential links with a bare fetch to /api/v1/config/rtsp, with no X-API-Key and no ?token=. When the client is not covered by loopback / webui.auth_bypass_ips the config endpoint answers 401, the links kept the thingino/thingino defaults, and the browser logged a failed request. Attach the key from the existing API_KEY_PROMISE, matching sei-osd.js / preview-osd.js. Signed-off-by: Paul Philippov paul@themactep.com
- f44c906 prudynt-t: drop the MP4 recorder write-error patch The fix is in the pinned tree now (upstreamed via PR #42, present in dbaff7f), so Buildroot's patch step failed with 'Reversed (or previously applied) patch detected' and refused to build. Signed-off-by: Paul Philippov paul@themactep.com
- beccbda prudynt-t: bump to dbaff7f Picks up the API-key bypass for loopback and webui.auth_bypass_ips (PR #44) plus the HTTP auth matrix integration test and its documentation (PR #45). The built streamer is unchanged by the docs commit. Signed-off-by: Paul Philippov paul@themactep.com
- ab5270d prudynt-t: bump to 89d2213 Picks up the dropped live555-era hybrid linking mode (PR #43). The firmware no longer passes -DBINARY_HYBRID, so this is a build-system cleanup with no change to the built streamer. Signed-off-by: Paul Philippov paul@themactep.com
- e49cfd7 prudynt-t, thingino-live555: drop the live555-era hybrid linking mode Prudynt has shipped its own RTSP/RTP server since the live555 removal, so the hybrid mode (live555 linked statically, everything else dynamic) no longer differs from dynamic. Remove the HYBRID linking choice and its -DBINARY_HYBRID flag, leaving dynamic (default) and static. With no prudynt consumer left, the live555 override no longer keys its static-library build/install on the prudynt symbols. The only remaining consumer is raptor's rsd-555, which links live555 statically, so gate the static .a build and staging install on that symbol and stop installing the shared libraries on the target. Signed-off-by: Paul Philippov paul@themactep.com
- 941f596 prudynt-t: bump to cec8142 Pulls in the merged RTSP Digest authentication (PR #42) along with the CI libc fix and the C100 JPEG QL build fix. Signed-off-by: Paul Philippov paul@themactep.com
- 4b96cc0 timps: silence shellcheck SC2012 in json-timelapse.cgi Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 43e72b3 timps: shfmt-format timps-irprobe and json-timelapse.cgi Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 22537a9 Gate
create_user_dirbehind opt-inUSER_DIRSBuilds ranuser-dirsas a prerequisite, which touched emptylocal.fragment,local.mk,local.uenv.txtandthingino.jsonfiles under$(THINGINO_USER_DIR)for every camera built. The files carry no configuration, so the skeleton grew on every build for no benefit. Gate the target onUSER_DIRS=1so plain builds leave the user directory untouched.make user-dirsstill creates the skeleton on demand by implying the flag, andPRISTINE=1continues to suppress it entirely. Document the flag inmake help. Signed-off-by: Paul Philippov paul@themactep.com - 4cb4fcd timps-irprobe: nonce-stamp the illuminator failsafe watchdog The 60s "off" watchdog fired unconditionally, so a night->day switch that correctly turned the illuminator off got silently re-lit ~60s later by the stale watchdog from the probe that led to the switch - no log trace, since the watchdog is a detached shell subshell timps never sees. Found on Jooan: IR LED stuck on for over an hour while daynight correctly reported day mode. Stamp the watchdog with the invoking PID; only fire if the stamp still matches at wake time, so any later on/off invalidates every older watchdog instead of racing it. Also don't arm the watchdog at all when "light $t off" itself failed. Verified live on Jooan: a stale watchdog now no-ops while a genuinely unanswered one still fires as the real failsafe. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 67d0a1c timps webui: trim comments in the timelapse fixes Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- def0ba0 prudynt-t: close the "video" object in tool-record.cgi's JSON 51fd90e deleted the "timelapse" block from this heredoc along with the "}," that closed "video", leaving a stray blank line. Every /x/tool-record.cgi response is therefore invalid JSON, failing at a fixed "line 14 column 3" (position varies only with the length of the interpolated strings) - reported as #1620. Backport of 7265df8 from master; closes the same regression reported against ciao as #1643. Signed-off-by: Paul Philippov paul@themactep.com
- 43f4dd7 timps webui: fix timelapse index undercount + false speed hint Index glob only matched lowercase .jpg, undercounting/hiding folders holding .JPEG etc. even though they were fetchable via ?seq= and ?file= (both already accept all 4 case variants). Match the same 4 patterns, counted via builtin -e tests to dodge busybox ash's lack of nullglob. speedHint() derived "covering ~X min in Y s" from frame count * interval_s, which assumes zero gaps and silently breaks across a day-mode folder boundary; measured real throughput (~1 fps on a T23 over WiFi) also has no relation to the selected fps, so the "in Y s" completion estimate was fabricated. Derive the covered span from the first/last frame's own timestamps instead, and drop the wall-clock completion promise - keep only the fps setting's nominal ratio, labeled as a target rather than a measurement. Found during real-hardware verification on Jooan. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- f840f17 timps webui: add whole-day timelapse playback Stitches a day's hour folders client side through the existing per-folder ?seq= endpoint (3 at a time), tagging each frame with its own folder. Deep-linkable as #day=YYYYMMDD; an unlistable folder is skipped, not fatal. Co-Authored-By: Claude Opus 5 noreply@anthropic.com
- 0dd8111 timps webui: add timelapse playback page New /x/json-timelapse.cgi lists shot folders and serves single JPEGs; timelapse-player.html plays one folder as a client-side slideshow. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 49a868e webui: gate pages on session before first paint Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 1a9dc28 linux-kopt: re-register THINGINO_KOPT_PREPARE_KERNEL post-patch Commit 94867f9 reworked the kopt extension for per-device dts and dropped the LINUX_POST_PATCH_HOOKS registration while keeping the THINGINO_KOPT_PREPARE_KERNEL macro definition. The LED header generator and the board_base.c patch therefore never ran, leaving no leds-gpio platform device and an empty /sys/class/leds/. Restore the registration on LINUX_POST_PATCH_HOOKS (not PRE_BUILD): the cumulative 3.10.14 kernel patch rewrites board_base.c, so the LED board patch must run after the patches are applied. Fixes #1637 Co-authored-by: multica-agent github@multica.ai
- b67b5ab docs: stop describing HTTP_REDIRECT as an automatic/default feature It never worked before tonight's fix, and now ships opt-in (off by default) - these docs still described it as automatic. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- fbfec89 cameras: add Infiya K1 t31l sc31hai atbm6132cu
- d111ec5 package/open-tx-isp: update to e92166b Update open-tx-isp from 9315bed to e92166b Hash change: 9315bede913c7a75b4800f94da8657a8d2836398 -> e92166b985606613f2395831bac65413c7542877 Changelog: e92166b: fix(t31): recover WDR algorithms and DMA statistics pipeline
- 5fe157f package/lightnvr: update to 0.41.17 Update lightnvr from 0.41.15 to 0.41.17 Hash change: 0.41.15 -> 0.41.17 (No changelog available)
- b62de08 package/ingenic-sdk: update to b1d8645 Update ingenic-sdk from 070e4ff to b1d8645 Hash change: 070e4ff7f2d4f635611f91c7e8ae26a6785e873a -> b1d8645d7e172434f20490a611c7b7141ce5e7bc Changelog: f193459: add IQ files harvested from Infiya K1 b1d8645: t31: add sc231hai sensor driver
- ce75e1a thingino-uhttpd: wire up HTTP_REDIRECT, default it off UHTTPD_TLS_REDIRECT was never actually set, so uhttpd's -q redirect flag never fired despite the option existing and defaulting to y. Wire it up, but flip the default to n while doing so - opt-in per camera, not a fleet-wide behavior flip on merge. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 0c1e6d5 thingino-webserver: drop redundant HTTP_REDIRECT select The symbol already defaults y under UHTTPD_TLS; the select only made it unoverridable by a local.fragment. Co-Authored-By: Claude Opus 5 noreply@anthropic.com
- 55029fe timps: drop the redundant HTTP_REDIRECT gate on http.https=1 The tri-state made 1 both-schemes, and WEBSERVER_UHTTPD selects the symbol anyway, so the condition was never false.
- d395de2 timps: make the WebUI follow the page scheme on http.https=1 timps-token.cgi now reports a tri-state "scheme" (http/both/https); on "both" the JS uses location.protocol instead of a hardcoded scheme. It also missed 2 entirely, reporting TLS-only as plaintext. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 3d1f5bf package/timps: bump to v1.9.11 http.https tri-state (0 plain, 1 http+https on one port, 2 TLS only). The tri-state packaging scripts need this binary; v1.9.10 parses "2" as 0. Hash verified via a real git-archive fetch. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 22fb62a package/timps: gate http.https=1 auto-write on uhttpd's redirect Without HTTP_REDIRECT wired up (see the companion thingino-uhttpd PR), http.https=1 made the preview port TLS-only while the WebUI stayed on plain HTTP with no redirect - page and stream ended up on mismatched schemes. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- fea3d27 timps: sync shipped timps.conf TLS comments with the tri-state http.https Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 6631fdb timps: treat http.https=2 (strict TLS) as https in scheme detection S96onvif_discovery advertised http:// URIs and agent-adapter probed /control over http:// on a TLS-only port, which answers 426. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 12e8f56 timps: generate TLS certs for strict http.https=2 too Without a cert the TLS listener fails closed, so http.https=2 left the HTTP port unbound entirely. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 3984909 configs: revert 2026.07 secureboop configs that break ciao's 2013.07 U-Boot The T31LC and Xiaomi T31 boards on ciao boot via the 2013.07 vendor-signed SPL splice (CONFIG_T31LC / CONFIG_XIAOMI_SPL), so they do not need the secureboop signature-collision patch. 849fa55 enabled secureboop on them for master's 2026.07 U-Boot (where the vendor splice is gone), but on ciao the secureboop post-build hook hard-fails: it only recognizes lzma/lzo binaries and the 2013.07 build produces plain u-boot-with-spl.bin. Drop the secureboop options and restore the 2013.07 binary name (u-boot-with-spl.bin) on the four Xiaomi and four T31LC defconfigs. Move wyze_campan3_mmc to cameras-exp: it targets the 2026.07 U-Boot board isvp_t31x_msc0 and u-boot-with-tpl-mmc-lzma.bin, neither of which exists in ciao's 2013.07 U-Boot, so it drops out of the CI build matrix until 2026.07 MMC boot support lands on ciao. Signed-off-by: Paul Philippov paul@themactep.com
- f34b715 cameras: drop stale webcam fragment reference from wansview 106 Commit 58b67d3 folded webcam.fragment into thingino-raptor Kconfig defaults gated by BR2_THINGINO_DEV_WEBCAM and deleted the fragment. A later rebase re-added the webcam token to the # FRAG: line, leaving the build to fail with 'Missing fragment configs/fragments/webcam.fragment'. Signed-off-by: Paul Philippov paul@themactep.com
- 32390a2 linux: fix binary-assets guard - quoted path broke it for xburst1 too aee2c44 guarded the LINUX_EXTRACT_THINGINO_BINARY_ASSETS hook by tarball existence, intending to disable it only for xburst2 (no bundle shipped). Broke it for xburst1 (3.10.14) as well: this file loads before buildroot re-includes .br2-external.mk to un-quote BR2_EXTERNAL_THINGINO_PATH, so $(wildcard "...") never matched and the hook silently stopped registering for every kernel version - a real, from-scratch T31/T23 build now fails with "no rule to make target mxu-v2-ex.obj" (one of 31 missing binary assets). Strip the quotes for the parse-time test only; the recipe itself was never affected (expands later, already unquoted). Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- 3597a4f vanhua_t55a_t41lq_gc5603_eth: fix T41LQ 64MB memory split T41LQ only has 64MB DRAM; the untested 22/8 MB rmem/nmem split left no headroom for the sensor's native 2880x1620 VBM pool, so framesource allocation failed and no frame ever reached the encoder. NMEM (NNA memory) has no consumer in this tree, so reclaim all of it into rmem. Confirmed end to end (sensor bring-up, RTSP, ONVIF, load test) on real hardware - this profile has sat untested since it was added in March 2025 (26d098f). Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- d629110 linux: guard the binary-assets extract hook by tarball existence Only 3.10.14 (xburst1) ships a thingino-binary-assets-.tar.gz bundle. xburst2 kernels (T40/T41/...) resolve LINUX_VERSION to a live git hash, so there's no stable filename for one and none is needed - the kernel source already comes from git. Guard the hook so it no-ops instead of failing when the tarball isn't there. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
- e85c4d9 ingenic-sdk: fix T41 gc5603 clock names and min/max fps t41/gc5603.c was a stale copy of t40/gc5603.c: it asked for T40's numbered CIM clocks (mux_cim0/1/2, div_cim0/1/2) and T40's epll, none of which exist on T41 - clk_get() silently returned -ENOENT, leaving the sensor unclocked and its chip-ID read NAK'ing as "not a gc5603 chip". Every other T41 sensor driver already resolves MCLK via SEN_MCLK/SEN_BCLK/SEN_TCLK; gc5603.c is the one file that was never updated when ported from T40. Same file also never set video.max_fps/min_fps, fields T40's tx_isp_video_in struct doesn't have but T41's does. Left at 0, the closed ISP firmware read that as "max/min fps error" and zeroed the AE's fps bounds outright. Confirmed on real T41LQ+GC5603 hardware (Vanhua T55A). Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com