Skip to content

firmware-2026-07-31

Latest

Choose a tag to compare

@github-actions github-actions released this 31 Jul 06:38
378c90e

Changes in this release:

  • 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
  • b04c33f pack: correct where the size report is written It goes to the build root, beside uenv.txt, not into images/ -- which is what the CI glob that collects it already assumes.
  • d4e7cff package/prudynt-t: update to 4e29b88 Update prudynt-t from 0f3fa5e to 4e29b88 Hash change: 0f3fa5edbcafd1513afce6f34430edea2a9cc18b -> 4e29b8858478e6a229fb75f946b4db5f6d034f0d Changelog: 740ff75: osd: replace burnin background bool with color, nest SEI under osd.sei 713302c: osd: auto-migrate old osd.enabled/elements to osd.sei on config load 62c64af: osd: rename sei.elements -> sei.entries 7e6ce62: osd: fix entries null-wipe on query ac650c5: api: add REST GET endpoints for config domains 80b6947: osd: fix burnin outline, background via alpha blending in putBlock 2a241b8: osd: skip burnin passes when color alpha is zero 4e29b88: api: move config GET endpoints before auth check
  • 8f9d9d3 webui: fix autocomplete warning on HA config page Replace form-level autocomplete=off (ignored by Chrome) with autocomplete=current-password on the password field. Signed-off-by: Paul Philippov paul@themactep.com
  • bcaba05 webui: drop redundant console.error in timelapse toggle The error is already shown to the user via showAlert; the console.error was just noise that made it look like the error wasn't being handled. Signed-off-by: Paul Philippov paul@themactep.com
  • 1f5537a webui: replace preview.js null-query with parallel REST GETs loadConfig() now fetches image/motion/privacy/rtsp/stream0/stream1 in parallel from :8080/api/v1/config/* instead of sending a monolithic null-filled POST through the CGI. Signed-off-by: Paul Philippov paul@themactep.com
  • 80202be webui: use REST GET for OSD config reads Replace null-filled POST queries with clean GET to :8080/api/v1/config/osd. Signed-off-by: Paul Philippov paul@themactep.com
  • 109074f webui: osd.sei.elements -> osd.sei.entries Signed-off-by: Paul Philippov paul@themactep.com
  • 995f2b7 webui: replace burnin background switch with color picker, nest SEI OSD under osd.sei - Replace burnin background checkbox with full color selector (swatch + picker + hex field + alpha slider), matching fill/outline UX - Change API field from osd.burnin.background (bool) to osd.burnin.background_color (hex string #RRGGBBAA, default #80) - Nest SEI OSD under osd.sei (enabled + elements) for consistency with osd.burnin - Update timps bridge docs: osd.enabled -> osd.sei.enabled Signed-off-by: Paul Philippov paul@themactep.com
  • 1915392 thingino-ha: skip WiFi RSSI on Ethernet-only cameras, rename Live View to Preview - Add ha_has_wifi() helper to detect wireless interfaces - RSSI discovery and state publish now gated on ha_has_wifi - Rename 'Live View' camera entity to 'Preview' to avoid confusion with actual RTSP live streams Signed-off-by: Paul Philippov paul@themactep.com
  • 88189b9 webui: install json-osd-sei.cgi with 0755 permissions Signed-off-by: Paul Philippov paul@themactep.com
  • 6ead84a webui: add json-osd-sei.cgi SSE bridge, convert consumers to SSE - New /x/json-osd-sei.cgi: SSE bridge that polls prudynt :8080 and pushes events as text/event-stream, deduplicated by content - preview.html SEI overlay: single persistent SSE connection - sei-rotate.js: SSE, closes after first rotation received Signed-off-by: Paul Philippov paul@themactep.com
  • 9d081b3 webui: restore :8080/api/v1/osd-sei — CGI endpoint does not exist Signed-off-by: Paul Philippov paul@themactep.com
  • d45046b webui: revert SSE to fetch polling — /x/json-osd-sei.cgi returns text/html Signed-off-by: Paul Philippov paul@themactep.com
  • dee5f12 preview: switch SEI overlay from fetch polling to SSE Signed-off-by: Paul Philippov paul@themactep.com
  • 84063a0 sei-rotate: switch from poll to SSE, remove inline polling from streamer pages - sei-rotate.js: use EventSource (SSE) instead of fetch polling, close connection after first rotation event received - streamer-{main,substream,image,sensor}.html: remove redundant inline polling scripts, rely on sei-rotate.js Signed-off-by: Paul Philippov paul@themactep.com
  • cc62e08 sei-rotate: skip preview.html to avoid double-polling with its own handler Signed-off-by: Paul Philippov paul@themactep.com
  • 66f4a88 thingino-diag: add wireless information thingino-diag: redact raw hex PSK and add overlay tree dump Redact unquoted 64-char hex PSK values in wpa_supplicant.conf that were leaking through the existing quoted-psk-only sed pattern. Also add a tree /overlay/ section so diagnostics include the overlay filesystem contents. Signed-off-by: Paul Philippov paul@themactep.com
  • f78f308 webui: adjust osd modal form layout
  • 0598b99 package/prudynt-t: bump to 0f3fa5e (@ glyph for beats) Signed-off-by: Paul Philippov paul@themactep.com
  • 8393e1f package/prudynt-t: update to 980f01e Update prudynt-t from d81e6e9 to 980f01e Hash change: d81e6e93b1b2b9d906a7bb19c840fa13e403a0f9 -> 980f01e73d1b1e66b8549148af9a954532b29908 Changelog: e7de9c4: osd: add Font5x7 glyph set, configurable burn-in fill/outline colors 9cd9cbe: docs: comprehensive OSD documentation for burn-in and SEI layers 091e526: motion: exclude burn-in OSD area from motion detection ROI d2963a6: docs: document burn-in motion detection exclusion 8bb5fc5: osd: add @b/%b Swatch Internet Time (.beats) token for burn-in c4b51db: osd: restrict .beats token to @b only (%b conflicts with strftime) 42364da: font5x7: add # (hash) glyph 980f01e: font5x7: add / (slash) glyph
  • cd726ab package/open-tx-isp: update to fddb684 Update open-tx-isp from f5224df to fddb684 Hash change: f5224df98e1326d9c443fa344e645211805cd1d5 -> fddb6843814385dad8b684dd922bc488cbcb70c2 Changelog: 2ef03b2: Check pt 29b2a38: Work on GIB d4c8315: Enable the full pipeline b13acb5: Check pt ec502f7: Check pt de6515a: mostly stable 12fcefa: more OEM matching c6e1a43: more OEM matching 5243486: Check pt avpu stalls 995b7bb: flickr is gone c132e02: Check pt c1abc35: Stream1 doesn't crash 7e574e2: Check pt f903758: multi-channel working b3b4064: Check pt e287cd9: Check pt 0e816ff: Dead code cleanup + CSI timing stabalization fix around sc2336 e61b962: Check pt 10927e3: Check pt fc4ab81: ADR working 37f7ce7: AWB work 308418e: Check pt 0d8ff79: Check pt 7dc544e: AWB color correction hacks + enable GIB block 511b46d: Revert WB register address change (0x1804 caused purple), keep GIB enabled 7312fa5: Fix AWB stats collection: bit16=0 gives raw Bayer data, fixes sepia e19ea2f: AWB stats fix (bit16=0) + GIB disabled pending investigation 4d35e4b: Check pt work on Gib acfc893: GIB deferred enable: bypass until libimp sends DEIR params b378e8d: AWB work e55374c: Fix AWB gain registers: 0x1804/0x1808/0x180c (OEM vic_mdma_enable+offsets) c1a9ae0: Implement OEM-exact cm_control 3x3 BT.601 saturation matrix 22092b0: Fix BCSH: compute OffsetRGB2yuv from tuning binary (was hardcoded) 263ad8d: Fix BCSH saturation: S-vector packing, EV interpolation, clip0/HLSP 419f1e0: Check pt 8f491c2: Add netlink param dispatch, AF params, fix MDNS/netlink timing d4f30af: Implement OEM-exact MDNS DMA buffer setup and enable ca22141: MDNS work a03add0: Check pt 6a062fb: Check pt MDNS 781ba3e: Check pt dacc0e1: check pt 52f881a: FIXED (AWB stats collection). 6c121fb: testing b2134b9: Check pt f3f7cf3: exclude c55369f: Fix color pipeline regressions — restore working image quality ea7fc44: Fix AE register clobbering and improve DMA buffer allocation 3c1166c: Revert WB gain registers to 0x183c/0x1840/0x1844/0x1810 71637ce: Revert WB registers to 0x183c/0x1840/0x1844/0x1810 (working colors) 51bfb0e: Add explicit AWB stats enable (0xb000=1) from OEM trace analysis 05a1153: Check pt 7d00fc4: AWB stats now working a8f25b6: Fix AE stats DMA: load params from tuning binary, fix zone grid config 4548677: Fix AE zone parsing: read Y luminance from DMA word[1] when word[0] is zero aa80ce6: Fix AE overexposure: stop re-arming 0xa000 per-frame, use OEM-exact zone parse edccb9b: Fix AE exposure: read Y from DMA word[1], zero _ae_parameter per OEM 83f60a4: Fix WB gain registers: write to 0x1804/0x1808/0x180c instead of no-ops efe6dd6: Fix AWB zone_rgbg scaling and restore AE grid config f6062b3: Fix fix_point_div_64: left-shift numerator by q before dividing 9891972: Fix AE/AWB: use OEM-exact word[0] Y extraction, fix AWB DMA corruption 3ebc1a7: Implement internal AE algorithm: exposure convergence + sensor writes 7e814ae: Fix AE overexposure: keep static AE params instead of zeroing them 9e88994: Fix AE limits: sensor-agnostic fallbacks, disable broken tuning load a795091: Fix tuning binary loading, sensor gain tracking, and log2 computation 66261b5: Fix AE parameter field mapping: correct max AG/DG indices, add tisp_ae_target 6a0bb59: Fix AWB CT: remove incorrect zone_rgbg scaling, add CT diagnostics f24fc4d: Fix AWB zone_rgbg: restore << q shift for Q8→Q18 format conversion 458e3ba: Fix AWB CT: divide out cof_bg before << q shift on bg channel 3715f5f: Fix sensor gain/exposure writes, add image style controls, reduce log noise 754620d: Check pt 8a64761: Clean up tuning block init: OEM-exact GIB, deferred MDNS, remove dead code 59174e0: Enable MDNS: implement OEM tx_isp_set_buf DMA registers and buffer size calc eb888d5: Fix AWB zone_rgbg: restore << q shift for Q8→Q18 format conversion 82a82f4: Fix AE zone extraction and AWB DMA re-arm corruption 68fb0ee: Re-enable GIB block: bypass register now matches OEM target 0xb5742249 71bebe5: Fix sensor gain/exposure writes, add image style controls, reduce log noise fd3858d: Fix log levels: silence ioctl spam, restore AE/AWB diagnostics, add AE tables e631ef2: Use uncached KSEG1 addresses for AE/AWB DMA buffers 6e3da92: Fix sensor gain/IT writes: trigger I2C workqueue after AE updates 43d40e1: AE convergence safety: 2x step cap, gain index limit, sensor expo diagnostics 8992d00: Remove AE gain cap and debug logging, match OEM _ae_reg init fe4c202: Disable GIB block: BLC subtraction zeros data at high sensor gain 9d080e1: AE convergence safety: 2x step cap, gain index limit, sensor expo diagnostics 21b4432: Re-enable GIB block with tighter AE convergence 6d11e40: Fix AE convergence stall at low IT values fc61e17: Revert GIB re-enable: confirmed BLC still zeros data at high gain e266e3a: Fix AE/AWB pipeline: remove conflicting AE1, enforce block whitelist, fix AWB Ct_Detect 463c239: GIB: fix BLC source (use OEM static defaults), defer block enable d10ab61: Fix GIB Bayer case 0x08: swap ch0/ch4 to match OEM b4a26ae: check pt d49ccee: GIB/CSI/VIC fixes: BLC from binary, unconditional LUT writes, multi-sensor support 39358dd: CSI/VIC bring-up: move vic_write32(0x10) to vic_start, enable CSI clocks in activation 6496c3e: CSI: move VIC 0x0c kick after rate calc, before wrapper writes f2f987f: OEM matching b9063a3: Fix AWB→BCSH CT event pipeline and revert AE step cap ad83c02: Ungate BCSH CT update from MDNS bypass bit e2130d8: check pt ff56de8: Check pt df74956: GIB/GB block investigation: lean system_reg_write, whitelist removal, GB fixes b481453: Fix ad0_cache shift loop, 0xc00c56c6 V4L2 dispatch, DN switch, poll/wake 7d18d5a: ADR OEM-exact params_refresh, GIB/MDNS bypass controls, DN switch improvements 90c3008: Check in docs 7a2d301: Merge tuning-blocks-correct into main fea3022: Document all 32 bypass register bits in pipeline architecture 4ac2579: Remove non-OEM frame buffer zeroing that caused MDNS R=G=B 8d3ae2c: Default GIB bypassed, MDNS enabled — baseline for image tuning 3e55457: Disable MDNS UV processing to fix pink tint and block artifacts c4719d2: Remove dead mdns_intp_generated.c, fix MDNS UV disable in correct file c160919: Match OEM: enable MDNS in tiziano_mdns_init, remove deferred enable 8fe0d87: TEST: GIB DG nudge — force value change to trigger HW latch 6edd163: OEM BCSH matrix matching 5cf92a4: More OEM matching d99edd4: OEM f9ea81a: Implement ~60 missing OEM functions for full ISP pipeline coverage 836a7ac: OEM fab4061: Enable DN switch with OEM-exact call order, fix tisp_cust_mode_s_ctrl e6f8b1a: Re-enable RDNS in DN switch (all 18 OEM functions active) 4765029: Implement missing gamma/RDNS functions, re-enable all 18 DN calls 9e3aa1a: Implement missing CCM attr functions, disable RDNS in DN switch 4c89d27: Bypass GIB by default — BLC write-gate causes black circular image 66655eb: Revert GIB bypass — disabling GIB kills AWB stats 7dbd675: Fix GIB/GB write-gate: use back-to-back volatile stores 0b64cd0: Implement missing interrupt/stats functions for OEM parity d9b0558: Implement 33 missing s_ctrl commands for OEM ioctl parity 94198ef: Implement ~30 missing g_ctrl commands for OEM ioctl parity 5ce6026: Fix check_state build error — tx_isp_subdev has no state member bd010ef: Add forward declarations for g_ctrl/s_ctrl dispatch functions fe61891: Replace g_ctrl/s_ctrl stubs with real implementations bc86a31: Implement deferred stubs: tisp_s_defog_enable + frame_done_wait b480acb: Resolve all TODO items across driver codebase 7eb03f4: FIX R=G=B: use _wb_static not _awb_cof for AWB zone ratio calibration bcbb052: Fix s_ctrl dispatch gaps and AWB parameter handling to match OEM 8deb403: Confirm R=G=B is upstream of WB gains; revert latch experiment 49d3d6c: Force-bypass GIB+GB+MDNS: confirms GIB as R=G=B root cause f77a683: Stable bypass config: GIB+LSC+ADR+GB+MDNS bypassed 91cdedc: Re-enable ADR: improved contrast and dynamic range b9284b3: Re-enable LSC: lens shading correction without regression 65ca3dd: GIB investigation: reg 0x106c shows stale value, R=G=B confirmed 4564f5d: GIB investigation: register values correct, HW activation issue 20ccc36: Check pt 7eb2f5f: better represent OEM logic 9dabd24: OEM exception_handle pipeline reset, MDNS enabled, AE step cap fix 99da383: AE dark-image fix, OEM bypass mask, ADR tone mapping overhaul 6c38516: Add ISP tuning math reference document 471fb64: check pt fcf8005: BCSH DN fixes, revert subsection gamma swap, add CCM diagnostics d30ed80: Temporarily re-bypass GIB/GB to restore AWB stats d29cc50: Revert Toffset_RGB2YUV and TransitParam changes that corrupted color 2835c2a: Implement TransitParam from OEM decompilation (default passthrough) 62efa04: Full OEM TransitParam: Cslope, Sstep, HDP/HBP/HLSP slopes from OEM 9515b0a: Add forward declaration for tiziano_bcsh_TransitParam d14d7fb: Move TransitParam globals to top of file for visibility 3414951: Fix __udivdi3 link error: use div_u64 for 64-bit division on MIPS32 bb98c19: Revert BCSH hysteresis gating — update every frame unconditionally 8f25f4b: ADR grid fix + AE convergence: OEM-exact ae0_tune2 ordering and step clamp d6c6609: ADR DMA diagnostic: confirm per-block stats arriving, identify uniform curve cause bbf2095: GIB/GB still kills AWB stats — revert to bypassed, add ADR weight diagnostics c31817d: Enable DPC from tuning binary (OEM-exact), add ADR weight + block diagnostics 372361a: Enable MDNS UV chroma temporal denoise (OEM-exact) 43ceef7: OEM-exact SDNS rewrite: 213 register writes via system_reg_write db53e92: Check pt sdns work 8621f5e: OEM-exact: all refresh wrappers, AF hardware params, missing functions a73e2a6: Fix tisp_s_sdns_ratio: per-channel h_s scaling, re-enable MDNS, fix braces c73154e: Add 22 missing AE functions from OEM decompilation bdd5c9c: AE DG via system_reg_write_ae, rename to OEM tisp_log2_fixed_to_fixed, destub AE hist/scene_luma dd12933: Remove non-OEM post-engine AE/AWB writes, restore OR mask 0x34002029 f90a5f1: Fix AE FIFO deadlock, OEM-exact JZ_Isp_Ae_Dg2reg, 64-bit log2 functions f1857f8: Check pt fc72e49: Fix AE convergence: FIFO domain, alloc IT clipping, full ae0_weight_mean2, Phase H reduction f649866: Check pt 7045fa4: faster AE convergence 6e36f5d: Fix data_9a2ec/GIB_CFG_DEIR_EN mismatch, revert GIB bypass pending HW root cause 3735aac: Check pt db86e41: faster AE convergence 368b362: Add DVP (parallel) sensor interface support in VIC start a77c122: Restore OEM-exact bypass OR mask 0x34000009 973bb12: Add VIC stop/restart to exception_handle pipeline reset 8ebcaef: Add force_bypass_dpc and force_bypass_lsc module params for AWB bisection f7f401a: Remove dead GC2053-hardcoded validation function and sensor name fallback 29b71af: Remove remaining GC2053-hardcoded values for multi-sensor support 5a0e52c: Fix sensor detection: use catch-all else instead of name matching a43db16: Remove fabricated isp_trigger_frame_data_transfer and DMA_READY handler 656a553: Remove fabricated tx_isp_arm_day_night_drop_window f1b50a4: Fix three DPC divergences from OEM that likely kill AWB stats bb6b698: Implement __enqueue_in_driver matching OEM (0xa3cc) 4ba03c7: Fix else-without-if build error in tx_isp_subdev.c bde9e3e: Fix data_9ab10 undeclared error: move declaration before first use 9587989: Add tisp_g_dpc_str_internal and unify dpc_ratio variable 415361d: Implement OEM buffer rotation for MSCA DMA address cycling 5f0deab: Add absFun and apical_isp_hvflip_update e914b92: Add math helpers and OEM symbol stubs (WIP — getters need proper impl) cedd897: Fix system_yvu_or_yuv: system_reg_write returns void 587b0d3: Add 9 buffer/module/lifecycle functions for OEM symbol parity 6ad9b30: Add 17 proc/debug/show/tuning functions for OEM symbol parity c525bf0: Add forward declaration for tisp_g_defog_str_internal 710fee2: Add forward declarations for tisp_af_get_metric and tisp_g_mscaler_mask_attr 22e3dbc: Add DN transition handler, GIB register verification, OEM-exact data_9a2ec 7aaba1b: Fix AWB deadlock: don't early-return on zero zones during bootstrap 4b9cbd4: Fix data_9a2ec init: OEM is 0x0, not 1 — affects ae0_tune2 and GIB reg 0x106c c018b45: Rewrite tisp_simple_intp to match OEM 32-bit arithmetic exactly 98ec02d: Fix day-mode ISP bypass and AE stats handling 1d0357c: good progres d653d75: isp: restore oem ae0 interrupt path 5a95395: isp: restore ae histogram dma path c859531: isp: feed ae fifo from prior target 96981f6: isp: stop forcing sc2336 day awb tables b1fbdef: isp: restore bcsh luma offset transform 0e35943: isp: bypass dpc on sc2336 b634011: isp: declare sensor name helper early 43d2543: Revert "isp: bypass dpc on sc2336" ab0a3de: Check pt dd034d0: Fix ADR 9571b1f: Good with ADR disabled 6af1ddb: Load AE target lists from runtime tuning blobs cd01e51: Restore AE EV thresholds for target interpolation b51f35f: Restore OEM AE FIFO target-domain input 05ff160: Stable image d4ab71a: Fix ADR tuning path against OEM behavior a9c83d9: Align OEM day/night tuning events and BCSH refresh path a585e98: Check pt 967207f: isp: baseline AWB stabilization eb773e9: check pt 3f2924c: check pt 01d32d3: Merge branch 'main' of https://github.com/opensensor/open-tx-isp c252816: Check pt t41 0eb3b27: check pt tools ce98a4b: factoring out common logic of open-tx-isp driver I bcf8546: Iterate on factoring out common driver math II 5b970b7: Factor out more common elements of the tx-isp driver ab8a13d: share tuning ABI and frame layouts across active SoCs fddb684: share checked frame buffer layouts across active SoCs
  • f781a7e package/llhttp: update to v9.4.3 Update llhttp from v9.4.2 to v9.4.3 Hash change: v9.4.2 -> v9.4.3 (No changelog available)
  • c3d219e webui: swap burn-in and SEI OSD order in preview modal Signed-off-by: Paul Philippov paul@themactep.com
  • 32035a4 webui: SEI selects 5rem, color wrappers 10rem Signed-off-by: Paul Philippov paul@themactep.com
  • 740e83f webui: SEI color pickers -> swatch+text pattern, accept 6 or 8 hex Signed-off-by: Paul Philippov paul@themactep.com
  • 0f229b3 webui: SEI font/outline gap-1 -> gap-2 Signed-off-by: Paul Philippov paul@themactep.com
  • 102d6d4 webui: modal format/scale gap-1 -> gap-2 Signed-off-by: Paul Philippov paul@themactep.com
  • 5228edc webui: fix modal fill/outline gap-1 -> gap-2, restore corrupted label Signed-off-by: Paul Philippov paul@themactep.com
  • c994588 package/prudynt-t: bump to 091e526 (precise burn-in ROI exclusion) Signed-off-by: Paul Philippov paul@themactep.com
  • cbf88f4 package/prudynt-t: bump to 15ceb11 (motion ROI excludes burn-in area) Signed-off-by: Paul Philippov paul@themactep.com
  • cf4baf8 package/prudynt-t: bump to 9cd9cbe (OSD font + burn-in colors + docs) Signed-off-by: Paul Philippov paul@themactep.com
  • c6ad345 webui: add burn-in fill/outline color pickers with alpha sliders - streamer-osd.html: rearranged burn-in form, added fill/outline color fields with swatch + native picker + alpha range slider - preview.html: added same color controls to OSD modal - sei-rotate.js: only poll on /preview.html, use /x/json-osd-sei.cgi - S31prudynt: hardened restart with wait-loop, force-kill fallback, retry up to 3 times Signed-off-by: Paul Philippov paul@themactep.com
  • 6b16089 webui: live SEI OSD visual settings, fix SSE poll overwriting them Visual controls (font, outline, colors) now apply instantly on change without requiring a save. repaint() reads localStorage on every frame so the SSE poll no longer resets user visual settings. Signed-off-by: Paul Philippov paul@themactep.com
  • d792bd3 webui: redesign OSD modal with burn-in section and compact visual controls Restructure the preview page OSD modal into three sections: - SEI OSD: enabled toggle, elements list, add button - Visual: Font [size|color] Outline [size|color] on one line - Burn-in OSD: enabled, Format input, Scale dropdown, Background toggle Signed-off-by: Paul Philippov paul@themactep.com
  • 64d3675 webui: SEI OSD overlay respects osd.enabled, only on preview page preview.html: overlay poller checks _seiOsdEnabled flag set from config; opening the OSD modal no longer auto-starts the overlay. Modal checkbox and overlay are decoupled — only saving updates both. streamer-osd.html: toggle SEI overlay visibility with osd.enabled checkbox on the OSD config page. sei-osd.js: check config before starting SSE; expose global SeiOSD.start/stop/restart controls. Signed-off-by: Paul Philippov paul@themactep.com
  • fbe26f1 package: bump prudynt-t for burn-in scale control, add WebUI scale dropdown prudynt-t: bump to d81e6e9 (configurable burn-in timestamp scale with runtime update, 0=auto, 1-10) webui: replace OSD scale slider with dropdown (0-10) Signed-off-by: Paul Philippov paul@themactep.com
  • 55672b3 bump prudynt-t to ce03f64 (fix burnin OSD + format corruption) Signed-off-by: Paul Philippov paul@themactep.com
  • 0e59985 thingino-dfu: update hash for v1.5.39 Signed-off-by: Paul Philippov paul@themactep.com
  • c5f3e0a fix: poll prudynt API instead of deleted SSE CGI
  • 4d2d760 Restructure OSD page: split burn-in and SEI into separate cards, fix layout
  • 88f575b package/prudynt-t: bump to 232d528 (osd pool size + burnin background) - Fix IPU buffer too small by calling IMP_OSD_SetPoolSize() at init - Make burn-in timestamp background optional - Fix snprintf truncation warning Signed-off-by: Paul Philippov paul@themactep.com
  • c5f8efc webui: add burn-in overlay background toggle and format to OSD page Wire osd.burnin.background (translucent dark box behind timestamp) and osd.burnin.format (strftime format string) controls to the streamer-osd WebUI page alongside the existing burnin enabled switch. Signed-off-by: Paul Philippov paul@themactep.com
  • 1c57f26 package/prudynt-t: update to fdbb28c Update prudynt-t from 31975f5 to fdbb28c Hash change: 31975f5f79623efab1175132de8caa70762c5be8 -> fdbb28c8dff4c4ed0ace678f587205df7c2b5e0e Changelog: 4160307: osd: move default clock element position to bottom-right (-10,-10) 79d6f32: osd: add runtime toggle for burned-in timestamp overlay a084042: osd: configurable burn-in timestamp format via osd.burnin.format 1ced7f6: fix: move burnin.format to getCharItems, fix add_str typo 1e426b5: rtsp: defer initial RTCP SR until after video anchor is set fdbb28c: osd: cap burn-in scale to 2 to fit IPU OSD buffer limit
  • 802006c webui: rename OSD enabled switch to SEI OSD for clarity Signed-off-by: Paul Philippov paul@themactep.com
  • 0962033 webui: default new timestamp OSD elements to bottom-right Matches the prudynt.json default change (-10,-10) so the SEI overlay doesn't overlap with the burned-in hardware timestamp at top-left. Signed-off-by: Paul Philippov paul@themactep.com
  • a421003 prudynt-t: add BR2_PACKAGE_PRUDYNT_T_OSD_BURNIN Kconfig option Wires the compile-time OSD_BURN_TIMESTAMP flag behind a Kconfig option (enabled by default). When enabled, prudynt renders a hardware timestamp overlay directly into video frames using the IMP OSD engine. The timestamp format is driven by the 'clock' OSD element in prudynt.json. Signed-off-by: Paul Philippov paul@themactep.com
  • 12fbcf8 webui: fix unclosed IIFE breaking streamer-osd.html Add button The inline <script> block opened (function() { ... } but never closed with })();. This caused a SyntaxError ('Unexpected end of input') that prevented all event listeners from registering, including the 'Add OSD element' button handler. Signed-off-by: Paul Philippov paul@themactep.com
  • f9069ff prudynt-t: bump to 31975f5 (fix stale RTCP SR state on reconnect) Signed-off-by: Paul Philippov paul@themactep.com
  • 12c187d pack: write a buildscope size report when the tool is available Attributes the rootfs to the packages that installed it and reads real usage out of every image into images/buildscope-report.json, which needs the build tree that pack still has and distclean removes. Prefers the copy BR2_PACKAGE_HOST_BUILDSCOPE installs into HOST_DIR and falls back to PATH, so a report is available without enabling the package. Guarded on the tool being present, and never fails the build.
  • bca74bd thingino-core: fix camera config merge order Camera thingino.json was staged as 10-camera.json, which sorted before all package defaults (20-, 30-, 40-, 50-). This caused package defaults with empty hardware-specific values (e.g., gpio_pan, gpio_tilt, gpio_switch from motors.json) to overwrite the camera's real GPIO pin configuration. Rename to 90-camera.json so the camera config overrides all package defaults, but still runs before user configs. Signed-off-by: Paul Philippov paul@themactep.com
  • 1619c54 package/thingino-jct: update to v1.1.0 Update thingino-jct from v1.0.0 to v1.1.0 Hash change: v1.0.0 -> v1.1.0 (No changelog available)
  • 0c35ab9 package/ingenic-sdk: update to 5e5d7d2 Update ingenic-sdk from bcd2e09 to 5e5d7d2 Hash change: bcd2e09c024e821fe30f8917da0dcb664a00d8fd -> 5e5d7d2c84c5fd64dc2cd5aa54d9638d960736a4 Changelog: 2d6a93f: Revert "sensor-iq: t23: group 2.10 IQ under 2.10/, drop duplicate os05a10" 8cab32e: restore and add/rename t23 iq files a4e08e5: sinfo: remove duplicates, formatting 5e5d7d2: iq: restore files per sdk, symlink identical files as newer to older
  • 8709e4a package/wifi-atbm6441: update to 5cd383d Update wifi-atbm6441 from 8cf3606 to 5cd383d Hash change: 8cf360686bb4e6e41b5206adaa86c3161d7e1515 -> 5cd383d4dbef9b3fc035e53db5671430faaf5983 Changelog: 5cd383d: Replace vendor SDK dump with trimmed driver source
  • 1926c68 package/timps: update to v1.6.4 Update timps from v1.6.1 to v1.6.4 Hash change: v1.6.1 -> v1.6.4 (No changelog available)
  • 3aef732 package/thingino-dfu: update to v1.5.39 Update thingino-dfu from v1.5.38 to v1.5.39 Hash change: v1.5.38 -> v1.5.39 (No changelog available)
  • 8875b44 package/lightnvr: update to 0.36.5 Update lightnvr from 0.36.4 to 0.36.5 Hash change: 0.36.4 -> 0.36.5 (No changelog available)
  • eb06736 uboot: add support for EN25QX64A flash chip (ID 1c7117)
  • 0f5d794 build-container.sh: inherit IP-based camera detection from make Support IP= ./build-container.sh to auto-detect the camera profile by SSH-ing into the device and reading IMAGE_ID from /etc/os-release, then offering the detected camera to the user before falling back to interactive selection. Also forward IP through to container-make and container-ota in both the wrapper script and Makefile.container. Signed-off-by: Paul Philippov paul@themactep.com
  • 2bc7009 wire thingino-floodlightd to the tree
  • 01167a7 timps: bump to v1.6.1 Bugfix release: the sub-stream (or any small-resolution encoder channel) could permanently stall delivering zero video after a single complex-scene IDR frame exceeded its AU assembly buffer's 128KB floor - the overflow handler's own recovery (force a fresh IDR) made it worse, since the replacement IDR was just as oversized, immediately overflowing again. See https://github.com/Lu-Fi/timps/releases/tag/v1.6.1 Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • 1f08bd2 Collapse preview endpoint list into dropdown below lg breakpoint On screens smaller than lg (< 992px), the inline endpoint list is replaced by a Bootstrap dropdown menu. Both views share the same renderPreviewEndpoints() population and copy-to-clipboard behavior.
  • 780ec0a sysupgrade: fix hook timing - ROOTFS_PRE_CMD_HOOKS, not TARGET_FINALIZE_HOOKS Verified via a real build+unsquashfs inspection: TARGET_FINALIZE_HOOKS runs BEFORE target-finalize's own overlay copy (BR2_ROOTFS_OVERLAY is applied at the end of that same recipe), so the previous hook never actually saw S97sysupgrade - the placeholder shipped unsubstituted. ROOTFS_PRE_CMD_HOOKS runs later, per rootfs-image-format, against a tree rsync'd from the now fully-finalized (overlay included) target directory - confirmed the packed squashfs now has the placeholder correctly resolved. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • b87f201 ifplugd: fix permissions on service script
  • 46371d4 package/thingino-onvif: update to 4ca8f06 Update thingino-onvif from 6b10262 to 4ca8f06 Hash change: 6b102622a16838e0d1d947fb4df774cb666fe002 -> 4ca8f063563b96631d04e1ed7ceb2244d413f736 Changelog: 51ed227: onvif: allow PTZ cameras without zoom capability 4ca8f06: reorder config entries alphabetically
  • d317bf7 sysupgrade: resolve the post-upgrade chime's extension at compile time Per review (same as the wifi captive-portal sounds): no decision- making on the camera side. S97sysupgrade now references a single @SOUND_EXT@ placeholder instead of an opus-then-wav runtime fallback. Substituted by a new thingino-sounds TARGET_FINALIZE_HOOKS entry (thingino-sounds is what decides THINGINO_SOUNDS_FORMAT in the first place) rather than a .in + package-local sed, since S97sysupgrade is a plain overlay file owned by no package - this runs once, after the overlay copy has already placed the file, and rewrites the one placeholder to the format this image actually ships. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • 52eda02 wifi: resolve the sound file extension at compile time, not runtime Per review: no decision-making on the camera side - if the image is built with one sound format, only that format ships and only that format is ever referenced. The previous runtime opus-then-wav fallback violated that. S38wpa_supplicant.in now references a single @SOUND_EXT@ placeholder, substituted by wifi.mk (mirroring THINGINO_SOUNDS_FORMAT in thingino-sounds.mk) to the one extension this image's thingino-sounds selection actually installs - the same .in-template mechanism already used for @WLAN_STA_NETDEV@ etc. in this file. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • ada9645 thingino-sounds: rename G.711 files .wav -> .ulaw Per review: .wav on these files was misleading - they're the project's own G.711 mu-law asset format, not general-purpose WAV files a user might expect to work anywhere. .ulaw makes that unambiguous. The files' actual bytes are unchanged (still a RIFF/WAVE container with the mu-law format tag - timps' decoder sniffs the RIFF header regardless of extension), only the on-disk filename/extension changed.
  • d944a11 make: add -f to make ota to enforce flashing
  • 61498c0 make: NAND support from master
  • d4bdbd0 make: sync syntax from master
  • 3fdc325 raptor: transfer changes from master
  • e03f4bf clean up
  • e41ecb8 clean up
  • 958263a clean up
  • 39b1d92 make: install onvif for any ip camera
  • 1fda28d thingino-onvif: remove stale patch
  • 752793c thingino-onvif: add PTZ no-zoom templates from upstream PR #62 Backport from roleoroleo/onvif_simple_server PR #62. Adds zoom capability detection: pan/tilt-only cameras now advertise PTZ without zoom spaces, so ONVIF clients (Frigate, etc.) don't show non-functional zoom controls. Auto-detects zoom from existing zoom commands or Z-axis ranges when the zoom flag is omitted from config. Signed-off-by: Paul Philippov paul@themactep.com
  • 21db76f thingino-onvif: bump to 6b10262, drop redundant patch Includes per-profile FrameRateLimit/BitrateLimit from upstream PR #5. The local 0001 patch is no longer needed. Signed-off-by: Paul Philippov paul@themactep.com
  • 0256ea2 cameras-exp: okam_qc2: add sensor reset and ISP params from PR #1079 Add ISP clock, ISP params, and sensor reset GPIO from @petermartis's tested configuration. Sensor needs reset_gpio=52 and shvflip=1. Signed-off-by: Paul Philippov paul@themactep.com
  • 89ce539 cameras: add TP-Link Tapo C210 (T23N, SC3336, RTL8188FTV) Picked from PR #1129 by @pastudan. Tested working on hardware: sensor, WiFi, SPI TMI8152 IR-cut, portal mode, SSH. Modernized from the PR: trimmed verbose FRAG to core ssl, removed toolchain settings (in fragments), fixed SENSOR_PARAMS to SENSOR_1_PARAMS. GPIOs extracted from stock firmware via binwalk — identical to Tapo C200 PCB layout. Signed-off-by: Paul Philippov paul@themactep.com
  • e4ccc43 cameras-exp: add TP-Link Tapo C210 v3 (T23N, SC3336, RTL8188FTV) Picked from PR #1183 by @chaserhkj. Features SPI TMI8152 PTZ motors. The spi-tmi8152 motor module changes were distilled into a patch file in the camera directory (0001-spi-tmi8152-motor-module.patch) so they do not affect other cameras — apply manually if needed. Signed-off-by: Paul Philippov paul@themactep.com
  • e147b93 cameras: add TP-Link Tapo C100 WQ9001 variant (T31L, SC2336, WQ9001) Picked from PR #1326 by @eikaf. Based on the existing tplink_tapo_c100_t31l_sc2336_rtl8188ftv profile with WiFi changed to WQ9001. Trimmed from 83-line full defconfig down to camera- specific settings only. Signed-off-by: Paul Philippov paul@themactep.com
  • c1281fe cameras: add Vanhua DJZ with GC4653 sensor (T31N, GC4653, ETH) Picked from PR #1188 by @AKoo7. GC4653 variant of the existing vanhua_djz_t31n_gc2083_eth — same GPIOs, different sensor with 64MB ISP memory split and 16MB flash. Note: dropped the core.fragment console changes — those are global and unrelated to this camera profile. Signed-off-by: Paul Philippov paul@themactep.com
  • 1ccd63c cameras-exp: add Sannce I21AG (T10L, JXH62, MT7601U) Picked from PR #216 by @diadatp. Placed in cameras-exp/. Includes PTZ motor configuration, dual-pin I2C, IRCUT, and IR850. Signed-off-by: Paul Philippov paul@themactep.com
  • 3123bb4 cameras-exp: add Laxihub 14T (T31L, SC2336, ATBM6032) Picked from PR #403 by @crossan007. Placed in cameras-exp/ as an incomplete profile — SD card, speaker, microphone, IR LEDs, and IR filter were listed as TODO by the original author. Signed-off-by: Paul Philippov paul@themactep.com
  • 987083a cameras-exp: add JAVISCAM A3 (T23N, OS02N10, AIC8800DC) Picked from PR #1038 by @Carl1509. Placed in cameras-exp/ pending OS02N10 sensor support confirmation in ingenic-sdk. Signed-off-by: Paul Philippov paul@themactep.com
  • 7328974 sysupgrade: fall back to .wav for the post-upgrade chime when .opus is missing Same issue as the wifi captive-portal sounds: play /usr/share/sounds/ thingino.opus fails outright on a board built with the G.711-only thingino-sounds format (companion PR) - no .opus files ship at all in that configuration. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • 1268c81 ingenic-audiodaemon: uClibc build - inline glibc-compat stubs instead of libuclibcshim Replace the -luclibcshim link dependency with two tiny inline stub functions (__ctype_b_loc/__ctype_tolower_loc) compiled directly into the build, dropping the ingenic-uclibc dependency this package doesn't otherwise need. Self-contained instead of relying on another package's shim library being present/linked correctly. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • a9ee18f wifi: fall back to .wav for portal sounds when .opus is missing play /usr/share/sounds/*.opus fails outright on a board built with the G.711-only thingino-sounds format (companion PR) - no .opus files ship at all in that configuration. Fall back to the matching .wav so the captive-portal start/timeout chimes still play instead of silently failing. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • 240af93 thingino-sounds: add G.711 mu-law format option New BR2_PACKAGE_THINGINO_SOUNDS_FORMAT_{OPUS,G711} choice. Opus stays the default (smaller on-disk, higher quality) but needs opusfile/opus/ libogg linked into the consumer (~200KB flash); G.711 needs zero extra library since a plain mu-law decoder is trivial to build in, at the cost of larger sound files - the better tradeoff on boards too flash-constrained for the Opus decode path. The 21 files here are the same voice lines/chimes already shipped as *.opus, re-encoded to 8kHz mono mu-law WAV (ffmpeg -acodec pcm_mulaw) so both format choices ship byte-identical content. The choice auto-defaults to G.711 whenever the consuming package can play sounds but has no Opus decoder built in (see the companion timps PR's BR2_PACKAGE_TIMPS_AUDIO_PRESET_MINIMAL), so the two packages' choices stay consistent without the user needing to coordinate them manually. thingino-sounds.mk purges both formats' files before installing the selected one, so switching formats on an existing board doesn't leave stale files from the previous choice behind. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • e82bd98 timps: native speaker (backchannel + play queue), v1.6.0, WebUI updates Native IMP_AO speaker output - timps now owns the camera speaker directly instead of piping decoded audio to /bin/iac (ingenic-audiodaemon). One arbiter (src/rtsp/speaker.c in timps) handles two producers: - ONVIF audio backchannel (BR2_PACKAGE_TIMPS_BACKCHANNEL, optional AAC via BR2_PACKAGE_TIMPS_BC_AAC) - unchanged from the caller's perspective, just native now instead of shelling out. - System-sound play queue (BR2_PACKAGE_TIMPS_PLAY, optional Opus via BR2_PACKAGE_TIMPS_PLAY_OPUS) - a FIFO speaking the same "PLAY url=... / STOP" protocol /usr/sbin/play already uses, so the WiFi captive-portal chime, the post-upgrade sound, and the ESPHome media_player/TTS integration all get a working speaker on a timps image with no extra glue. New BR2_PACKAGE_TIMPS_AUDIO_PRESET_{FULL,MINIMAL} Kconfig presets bundle the backchannel+play+sounds-format combinations that are known to work, since getting the related knobs right one at a time is easy to get wrong. MINIMAL fits flash-constrained boards (~5MB rootfs) with G.711-only (pairs with the thingino-sounds G.711 format option in a companion PR); FULL is Opus quality on boards with headroom. Also: - Live speaker volume/gain slider + system-sound test-play control on the Audio Settings page (audio.spk_volume/spk_gain live keys, speaker.play/stop actions). - Day/night: time-window and sunrise/sunset override modes (daynight.mode = sensor/time/sun) - a fixed local-clock window, or real sunrise/sunset for a configured lat/long. The Photosensing page gained an "Override Mode" section for this, replacing a "Time Schedule" UI block that never actually did anything (POSTed to a legacy CGI endpoint nothing ever read). - OSD page Phase 1 redesign: the backend supports up to 8 independent overlay items per stream, but the WebUI only ever exposed 4 in fixed, hardcoded roles. streamer-osd.js now renders items as a dynamic card list (add/remove, any of the 8 slots, per-card live-vs-restart-required status), adds a transparency control that existed on the backend but was never exposed, and an "apply to both streams" convenience per card. Also fixes a pre-existing bug where the enable checkbox was gated on a caps.osd capability key the backend never actually advertises. - S48webui-config: fixes a false-positive PTZ-capability check that showed the pan/tilt overlay on boards without motors. - TIMPS_VERSION bumped to v1.6.0. Test plan: built and flashed to real hardware across the T20/T23/T31/ T31L family (Wyze Cam v2, a Cinnado T23 and T31L, a Galayou Y4 T23, a Wuuk T31), verified via timps-qa.sh (RTSP/ONVIF/motion/OSD/recording integrity) plus real acoustic verification of the speaker path (RTSP-mic self-loopback, comparing played-clip audible span against source content). Day/night modes verified forcing real switches against a live sensor reading in both directions, manual-mode suppression, garbage-input rejection. OSD redesign verified via /control round-trips (transparency, both-streams scope, backward- compat load of the classic 4-item layout) and rendered-frame snapshots showing a live transparency change. See https://github.com/Lu-Fi/timps/blob/main/CHANGELOG.md for full technical detail on the daemon-side changes. Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
  • 3332370 Merge branch 'feat/mqtt-tls-skip-verify' into ciao
  • 99b2b4a package/prudynt-t: update to 76c8071 Update prudynt-t from edf9d2b to 76c8071 Hash change: edf9d2b427a50d9b1566991da1bfe7e58d7554e0 -> 76c80712f2de8b218d91f12611fce1f46f41a6e2 Changelog: 76c8071: rtsp: seed subtitle RTP timestamp at 90000 to prevent t=0 duplicate
  • 1788b48 mqtt-sub: add TLS skip verify control Add optional tls_skip_verify setting for MQTT subscriptions when using TLS with self-signed or untrusted broker certificates. - WebUI toggle (hidden until SSL is enabled) with warning text - CGI handler properly normalizes and persists the boolean - Documentation for both MQTT subscriptions and Home Assistant
  • c3b35c3 ingenic-sdk: T31 audio codec - mute speaker amp at probe gpio_request() alone leaves the speaker-amp enable pin floating until codec_set_speaker()/codec_turn_off() (replay open/close) first drives it. A capture-only session (mic-only, no two-way audio - the common case) never opens replay, so the floating pin lets clock/analog activity from mic capture leak through to the amp as a persistent high-pitched whine. Confirmed live on a Cinnado D1 T31L/SC2336: whine present exactly while the mic-capture daemon runs, silent when stopped, /proc/jz/audio/audio_info reporting replay as "closed" throughout - the amp was simply never told to mute. Driving the pin to its inactive level once at probe fixes it without any periodic toggling.
  • cee55fc docs: suggested docs changes for container SELinux volume labels Suggested documentation for the Makefile.container SELinux mount-label behavior. Reviewers may drop this commit if docs are unwanted. Signed-off-by: halcycon adam@thecuckoocamp.co.uk Co-authored-by: Cursor cursoragent@cursor.com
  • d52786d Makefile.container: auto-label bind mounts on SELinux Enforcing hosts Unlabeled workspace mounts fail with Permission denied on Fedora/Bazzite and similar Enforcing hosts. Detect getenforce and append shared :z by default; allow CONTAINER_VOLUME_LABEL override. Signed-off-by: halcycon adam@thecuckoocamp.co.uk Co-authored-by: Cursor cursoragent@cursor.com
  • facd724 package/prudynt-t: update to edf9d2b Update prudynt-t from bf446f5 to edf9d2b Hash change: bf446f5e41fd8008f144aee926b8d6b7f26d0ed2 -> edf9d2b427a50d9b1566991da1bfe7e58d7554e0 Changelog: edf9d2b: rtsp: fix video RTCP SR NTP using drifted imp_ts instead of CLOCK_MONOTONIC
  • 8ce51fb package/prudynt-t: update to edf9d2b Update prudynt-t from bf446f5 to edf9d2b Hash change: bf446f5e41fd8008f144aee926b8d6b7f26d0ed2 -> edf9d2b427a50d9b1566991da1bfe7e58d7554e0 Changelog: edf9d2b: rtsp: fix video RTCP SR NTP using drifted imp_ts instead of CLOCK_MONOTONIC
  • 5a07cc4 Remove name/target directives from mdnsd service files mdnsd v0.12 ignores the target directive and uses the name field (which contains spaces/parentheses) as the SRV target hostname. Avahi cannot resolve those malformed hostnames, so _http._tcp, _https._tcp, and _rtsp._tcp services never appear in avahi-browse. Fix by dropping name and target entirely, keeping only type and port -- the same pattern the working SSH service already uses. mdnsd then uses the system hostname as the service instance name.
  • 5d87da5 Remove name/target directives from mdnsd service files mdnsd v0.12 ignores the target directive and uses the name field (which contains spaces/parentheses) as the SRV target hostname. Avahi cannot resolve those malformed hostnames, so _http._tcp, _https._tcp, and _rtsp._tcp services never appear in avahi-browse. Fix by dropping name and target entirely, keeping only type and port -- the same pattern the working SSH service already uses. mdnsd then uses the system hostname as the service instance name.
  • 096e732 package/thingino-dfu: update to v1.5.38 Update thingino-dfu from v1.5.37 to v1.5.38 Hash change: v1.5.37 -> v1.5.38 (No changelog available)
  • fd94a72 package/thingino-dfu: update to v1.5.38 Update thingino-dfu from v1.5.37 to v1.5.38 Hash change: v1.5.37 -> v1.5.38 (No changelog available)
  • 7175cfc package/prudynt-t: update to bf446f5 Update prudynt-t from a03923a to bf446f5 Hash change: a03923a4bc1c916d8faf536c207fdfb2c7a39a3c -> bf446f5e41fd8008f144aee926b8d6b7f26d0ed2 Changelog: 69e461e: rtsp: rework subtitle track to plain text with correct PTS timing 9db39cf: rtp: fix UDP send failure cascading into bitstream desync e605e25: rtsp: fix RTCP SR NTP timestamp using wrong clock domain 783a69f: rtsp: use CLOCK_MONOTONIC for video RTP timestamps 175775a: rtsp: clear video tap buffer on PLAY to prevent startup burst d1e91f6: rtsp: use imp_ts for RTP pacing, CLOCK_MONOTONIC only for RTCP SR d6793a6: Revert "rtsp: use imp_ts for RTP pacing, CLOCK_MONOTONIC only for RTCP SR" bf446f5: rtsp: use imp_ts for RTP pacing with mono-offset for SR NTP
  • 4547430 package/prudynt-t: update to bf446f5 Update prudynt-t from a03923a to bf446f5 Hash change: a03923a4bc1c916d8faf536c207fdfb2c7a39a3c -> bf446f5e41fd8008f144aee926b8d6b7f26d0ed2 Changelog: 69e461e: rtsp: rework subtitle track to plain text with correct PTS timing 9db39cf: rtp: fix UDP send failure cascading into bitstream desync e605e25: rtsp: fix RTCP SR NTP timestamp using wrong clock domain 783a69f: rtsp: use CLOCK_MONOTONIC for video RTP timestamps 175775a: rtsp: clear video tap buffer on PLAY to prevent startup burst d1e91f6: rtsp: use imp_ts for RTP pacing, CLOCK_MONOTONIC only for RTCP SR d6793a6: Revert "rtsp: use imp_ts for RTP pacing, CLOCK_MONOTONIC only for RTCP SR" bf446f5: rtsp: use imp_ts for RTP pacing with mono-offset for SR NTP
  • 514e76e docs: update thingino.json assembly order for staging directory Document the new merge pipeline: base config, per-camera overrides, per-package staging fragments (in priority order), and user configs (applied last). Replaces the old three-step description that predated the /usr/share/thingino-defaults/ staging directory.
  • 099a857 docs: update thingino.json assembly order for staging directory Document the new merge pipeline: base config, per-camera overrides, per-package staging fragments (in priority order), and user configs (applied last). Replaces the old three-step description that predated the /usr/share/thingino-defaults/ staging directory.
  • ef59846 fix: serialize thingino.json assembly via staging directory Replace per-package jct import on /etc/thingino.json with a staging directory (/usr/share/thingino-defaults/) where each package drops its JSON fragment during install. A single TARGET_FINALIZE_HOOK in thingino-core merges all fragments in sorted priority order after all packages are installed, then applies user overrides last. This eliminates the read-modify-write race condition that occurred when multiple packages (agent, daynightd, ha, motors) ran jct import concurrently on the same thingino.json inode under BR2_PER_PACKAGE_DIRECTORIES=y, causing keys like 'daynight' to be silently lost. Staging priority order: 10-camera.json (per-camera overrides) 20-agent.json (thingino-agent) 30-motors.json (thingino-motors) 40-daynightd.json (thingino-daynightd) 50-ha.json (thingino-ha) 55-ha-doorbell.json (conditional, HA doorbell) ... user configs ... (common > camera > device, applied last) Packages no longer need host-thingino-jct as a dependency; only thingino-core retains it for the final merge step.
  • d462059 fix: serialize thingino.json assembly via staging directory Replace per-package jct import on /etc/thingino.json with a staging directory (/usr/share/thingino-defaults/) where each package drops its JSON fragment during install. A single TARGET_FINALIZE_HOOK in thingino-core merges all fragments in sorted priority order after all packages are installed, then applies user overrides last. This eliminates the read-modify-write race condition that occurred when multiple packages (agent, daynightd, ha, motors) ran jct import concurrently on the same thingino.json inode under BR2_PER_PACKAGE_DIRECTORIES=y, causing keys like 'daynight' to be silently lost. Staging priority order: 10-camera.json (per-camera overrides) 20-agent.json (thingino-agent) 30-motors.json (thingino-motors) 40-daynightd.json (thingino-daynightd) 50-ha.json (thingino-ha) 55-ha-doorbell.json (conditional, HA doorbell) ... user configs ... (common > camera > device, applied last) Packages no longer need host-thingino-jct as a dependency; only thingino-core retains it for the final merge step.
  • 04cc83e package/scriba: update to 17ee5a9 Update scriba from c590b6a to 17ee5a9 Hash change: c590b6a7c55043218c28d7f34d6c213d950d8b71 -> 17ee5a9a6a02a62d05e0ab5497c95cb348bc24a6 Changelog: 636262d: wasm: minimal WebUSB/CH341A flash programmer support 3f63e6b: docs: add Web/WASM build and deploy instructions to README 18fa7e6: fix: address code review feedback 6ac95f7: fix: detect and warn on fast-erase failure d125c21: ch341a: split oversized SPI streams to stay inside the USB timeout (#2) d6e65b1: Merge PR #1: WASM/WebUSB CH341A flash programmer support 17ee5a9: web: bump vite ^6.4.3, fix Dependabot alerts
  • 0589dcd package/scriba: update to 17ee5a9 Update scriba from c590b6a to 17ee5a9 Hash change: c590b6a7c55043218c28d7f34d6c213d950d8b71 -> 17ee5a9a6a02a62d05e0ab5497c95cb348bc24a6 Changelog: 636262d: wasm: minimal WebUSB/CH341A flash programmer support 3f63e6b: docs: add Web/WASM build and deploy instructions to README 18fa7e6: fix: address code review feedback 6ac95f7: fix: detect and warn on fast-erase failure d125c21: ch341a: split oversized SPI streams to stay inside the USB timeout (#2) d6e65b1: Merge PR #1: WASM/WebUSB CH341A flash programmer support 17ee5a9: web: bump vite ^6.4.3, fix Dependabot alerts
  • cddad45 package/prudynt-t: update to a03923a Update prudynt-t from 4518d5f to a03923a Hash change: 4518d5f543f445949de2aa99e9fe1f2488b96690 -> a03923a4bc1c916d8faf536c207fdfb2c7a39a3c Changelog: 5eb35fd: cleanup: remove dead/misleading config and scripts a03923a: fix: resolve compiler warnings
  • f12228b package/prudynt-t: update to a03923a Update prudynt-t from 4518d5f to a03923a Hash change: 4518d5f543f445949de2aa99e9fe1f2488b96690 -> a03923a4bc1c916d8faf536c207fdfb2c7a39a3c Changelog: 5eb35fd: cleanup: remove dead/misleading config and scripts a03923a: fix: resolve compiler warnings
  • 69b3b8a sysupgrade: fall back to flash_eraseall when flashcp lacks -A support On older firmware, busybox flashcp doesn't have the -A flag (Thingino patch that skips already-erased blocks). Detect -A via --help and fall back to flash_eraseall + flashcp -v so upgrades from older releases work. Add flash_eraseall to the bbapplets list so the applet is available in the stage2 workdir. Signed-off-by: Paul Philippov paul@themactep.com
  • 65aec08 sysupgrade: fall back to flash_eraseall when flashcp lacks -A support On older firmware, busybox flashcp doesn't have the -A flag (Thingino patch that skips already-erased blocks). Detect -A via --help and fall back to flash_eraseall + flashcp -v so upgrades from older releases work. Add flash_eraseall to the bbapplets list so the applet is available in the stage2 workdir. Signed-off-by: Paul Philippov paul@themactep.com
  • 5ae4cc3 package/prudynt-t: update to 4518d5f Update prudynt-t from dd3c3a6 to 4518d5f Hash change: dd3c3a6d92f53f788c03bd7ab09e9068819f6cea -> 4518d5f543f445949de2aa99e9fe1f2488b96690 Changelog: e2f29b8: sdp: add b=AS bandwidth attribute with configured video bitrate 531d42c: debug: trace bitrate through SDP generation 811889e: sdp: move b=AS before a=control:* per RFC 4566 ordering 4518d5f: rtsp: guard against zero and jumping IMP driver timestamps
  • 620db27 package/prudynt-t: update to 4518d5f Update prudynt-t from dd3c3a6 to 4518d5f Hash change: dd3c3a6d92f53f788c03bd7ab09e9068819f6cea -> 4518d5f543f445949de2aa99e9fe1f2488b96690 Changelog: e2f29b8: sdp: add b=AS bandwidth attribute with configured video bitrate 531d42c: debug: trace bitrate through SDP generation 811889e: sdp: move b=AS before a=control:* per RFC 4566 ordering 4518d5f: rtsp: guard against zero and jumping IMP driver timestamps
  • c76a2ff ingenic-audiodaemon: guard two IMP calls unsupported by T20's libimp IMP_AI_SetAgcMode and IMP_AO_SetHpfCoFrequency are link-time undefined on T20 - its libimp predates these APIs, unlike the T23/T31/etc SDK this audio-processing code was written against. Guard both under #ifndef CONFIG_T20, matching the existing CONFIG_T20 guard already a few lines above IMP_AI_SetAgcMode in input.c for IMP_AI_SetAlcGain. IMP_AI_EnableAgc/IMP_AO_EnableHpf are left unguarded - they do link on T20 - so AGC/HPF still enable there, just without this one non-essential mode/frequency tuning call.
  • 0df4d17 ingenic-audiodaemon: link against libuclibcshim instead of hand-rolled stub The uClibc build was hand-generating a uclibc_compat.c stub at build time to provide __ctype_b_loc/__ctype_tolower_loc (glibc-specific ctype accessors the vendor audiodaemon blob was linked against). This project already ships ingenic-uclibc's libuclibcshim for exactly this class of legacy-symbol shim, used by the vendor IMP/isp libraries on T10/T20/T21/T30 - link against that instead of maintaining a parallel one-off stub, and add the ingenic-uclibc build dependency so it's guaranteed to exist first.
  • b49c451 package/prudynt-t: update to dd3c3a6 Update prudynt-t from c21c7c2 to dd3c3a6 Hash change: c21c7c2bab9fb4c1b85d5bf8402fab73ab5ce707 -> dd3c3a6d92f53f788c03bd7ab09e9068819f6cea Changelog: ec1618a: fix: resolve compiler warnings in RtspServer.cpp dd3c3a6: update default config
  • 4af9fae package/prudynt-t: update to dd3c3a6 Update prudynt-t from c21c7c2 to dd3c3a6 Hash change: c21c7c2bab9fb4c1b85d5bf8402fab73ab5ce707 -> dd3c3a6d92f53f788c03bd7ab09e9068819f6cea Changelog: ec1618a: fix: resolve compiler warnings in RtspServer.cpp dd3c3a6: update default config
  • 922f33e prudynt: use default config from the app
  • d3cce20 prudynt: use default config from the app
  • ed5d96c init: stop exporting TZ from rcS so daemons see live timezone changes rcS exported TZ before starting every init script, so every long-running daemon (timps/raptor/prudynt-t alike) inherited a TZ value frozen at boot. uClibc-ng's localtime_r() only re-reads /etc/TZ on every call when TZ is UNSET in the environment - with it set, a daemon started at boot never notices a later timezone change (e.g. via the WebUI's date/time settings) without being restarted, even though /etc/TZ and /etc/localtime on disk are already correct. Confirmed on a wyze_cam2 (T20) camera running timps: after changing the timezone live, the OSD timestamp stayed 2h off (stale UTC) until timpsd was manually restarted; the WebUI itself showed correct time throughout since its CGI scripts are fresh per-request processes. No code changes needed in timps/raptor/prudynt-t - interactive shells still get TZ exported fresh per-login via /etc/profile, this only affects the daemons started by rcS.
  • 81a7026 docs: webrtc info in Chrome
  • c7a3ec7 docs: webrtc info in Chrome
  • bc8def1 agents: do not allow agent to write to the camera, use a network share
  • 2c276ff agents: do not allow agent to write to the camera, use a network share
  • 4e8a812 scripts: add update-packages.py for automated package version + hash bumps Supports --check (audit all github-tarball packages for hash mismatches) and direct updates that download the tarball, compute sha256, and update both the .mk and .hash files in one step. Signed-off-by: Paul Philippov paul@themactep.com
  • 7883d1b scripts: add update-packages.py for automated package version + hash bumps Supports --check (audit all github-tarball packages for hash mismatches) and direct updates that download the tarball, compute sha256, and update both the .mk and .hash files in one step. Signed-off-by: Paul Philippov paul@themactep.com
  • 6c0a984 package: fix hashes for thingino-dfu v1.5.37 and lightnvr 0.36.4 Signed-off-by: Paul Philippov paul@themactep.com
  • 060f7d5 package: fix hashes for thingino-dfu v1.5.37 and lightnvr 0.36.4 Signed-off-by: Paul Philippov paul@themactep.com
  • 024ddd0 package/prudynt-t: update to c21c7c2 Update prudynt-t from 8a473c0 to c21c7c2 Hash change: 8a473c034bb9c55eec1ca5e3127d50810f12673e -> c21c7c2bab9fb4c1b85d5bf8402fab73ab5ce707 Changelog: c21c7c2: audio: hardcode speaker sample rate to 48kHz, add kSpkBitrateKbps constant
  • 123bd93 package/prudynt-t: update to c21c7c2 Update prudynt-t from 8a473c0 to c21c7c2 Hash change: 8a473c034bb9c55eec1ca5e3127d50810f12673e -> c21c7c2bab9fb4c1b85d5bf8402fab73ab5ce707 Changelog: c21c7c2: audio: hardcode speaker sample rate to 48kHz, add kSpkBitrateKbps constant
  • f1441bd webui: remove speaker sample rate knob (now hardcoded to 48kHz)
  • 1377f33 webui: remove speaker sample rate knob (now hardcoded to 48kHz)
  • 924fbdc package/prudynt-t: update to 8a473c0 Update prudynt-t from 26d47e9 to 8a473c0 Hash change: 26d47e962d79f7383949fd31186fa61684e01156 -> 8a473c034bb9c55eec1ca5e3127d50810f12673e Changelog: 8a473c0: audio: capture natively at 48kHz, remove resampling & config knobs
  • cad4718 package/prudynt-t: update to 8a473c0 Update prudynt-t from 26d47e9 to 8a473c0 Hash change: 26d47e962d79f7383949fd31186fa61684e01156 -> 8a473c034bb9c55eec1ca5e3127d50810f12673e Changelog: 8a473c0: audio: capture natively at 48kHz, remove resampling & config knobs
  • 3ecf0bf package/timps: update to v1.5.0 Update timps from v1.4.6 to v1.5.0 Hash change: v1.4.6 -> v1.5.0 (No changelog available)
  • 64f2c78 package/timps: update to v1.5.0 Update timps from v1.4.6 to v1.5.0 Hash change: v1.4.6 -> v1.5.0 (No changelog available)
  • 62569c8 package/thingino-dfu: update to v1.5.37 Update thingino-dfu from v1.5.33 to v1.5.37 Hash change: v1.5.33 -> v1.5.37 (No changelog available)
  • 55d1f57 package/thingino-dfu: update to v1.5.37 Update thingino-dfu from v1.5.33 to v1.5.37 Hash change: v1.5.33 -> v1.5.37 (No changelog available)
  • ec5f201 package/lightnvr: update to 0.36.4 Update lightnvr from 0.36.3 to 0.36.4 Hash change: 0.36.3 -> 0.36.4 (No changelog available)
  • cee1226 package/lightnvr: update to 0.36.4 Update lightnvr from 0.36.3 to 0.36.4 Hash change: 0.36.3 -> 0.36.4 (No changelog available)
  • f3b74ef webui: remove mic_bitrate and mic_sample_rate config knobs These are now compile-time constants in prudynt (48kHz/128kbps). Signed-off-by: Paul Philippov paul@themactep.com
  • 40d56dd webui: remove mic_bitrate and mic_sample_rate config knobs These are now compile-time constants in prudynt (48kHz/128kbps). Signed-off-by: Paul Philippov paul@themactep.com
  • ecab834 fw_ota: verify camera reboot before erasing flash after memory remap If the camera stalls during shutdown (e.g. on a stuck init script), the memory-remap reboot path would reconnect to the old SSH session, assume the reboot happened, and start erasing flash. When the camera finally completed shutdown mid-erase, it bricked. Three changes to prevent this: 1. Plant a /tmp/needs_reboot tmpfs marker before issuing reboot. After reconnecting, verify it's gone -- tmpfs is wiped on every genuine reboot. If the marker still exists, abort immediately. 2. Use 'reboot -f' to bypass init scripts entirely, so a stalled init script cannot block the reboot in the first place. 3. After reconnecting, verify the new osmem value persisted across the reboot with fw_printenv. Also fixes wait_for_reboot_after_detach to use the same marker-file approach instead of the saw_disconnect heuristic (which could mistake a transient network blip for a reboot). The function no longer takes an uptime argument; it relies solely on /tmp/needs_reboot. Signed-off-by: Paul Philippov paul@themactep.com
  • 88c2d86 fw_ota: verify camera reboot before erasing flash after memory remap If the camera stalls during shutdown (e.g. on a stuck init script), the memory-remap reboot path would reconnect to the old SSH session, assume the reboot happened, and start erasing flash. When the camera finally completed shutdown mid-erase, it bricked. Three changes to prevent this: 1. Plant a /tmp/needs_reboot tmpfs marker before issuing reboot. After reconnecting, verify it's gone -- tmpfs is wiped on every genuine reboot. If the marker still exists, abort immediately. 2. Use 'reboot -f' to bypass init scripts entirely, so a stalled init script cannot block the reboot in the first place. 3. After reconnecting, verify the new osmem value persisted across the reboot with fw_printenv. Also fixes wait_for_reboot_after_detach to use the same marker-file approach instead of the saw_disconnect heuristic (which could mistake a transient network blip for a reboot). The function no longer takes an uptime argument; it relies solely on /tmp/needs_reboot. Signed-off-by: Paul Philippov paul@themactep.com
  • 7df5600 portal: serve HTTPS alongside HTTP when a certificate exists The portal access point is open, so everything posted to the setup page crosses in the clear. uhttpd already links mbedTLS and already serves 443 in client mode; the portal branch just passed an empty HTTPS listen. Port 80 stays, unconditionally. Captive-portal detection is plain HTTP by definition, so the OS probes (/generate_204, /hotspot-detect.html, /ncsi.txt) and the -E error handler all depend on it. 443 is purely additive, for clients that address the portal directly and can demand TLS. Falls back to HTTP only when no usable certificate exists. Portal mode is the only way to configure a fresh camera, so a missing or zero-length cert must not make one unprovisionable. cert_path/key_path move above the portal branch, which returns early and so could never have reached the client-mode definitions; have_certs factors out the check both branches now share. Verified the three cert states produce the right arguments, and that -p 172.16.0.1:80 with -E /x/portal.cgi survives all of them.
  • 6be4e80 portal: accept a pre-derived PSK and root password hash The portal access point is open, so everything posted to api.cgi is readable by anyone in range with a monitor-mode radio. A client that can hash locally can now send wlan_psk and rootpass_hash instead, and neither secret crosses in the clear. wlan configure already took a 64-hex PSK in place of a passphrase, so that side only needed validation. chpasswd -e takes an already-encrypted field for the root password. Both are optional and the plaintext fields still work, so the web portal is unaffected. rootpass_hash is restricted to $6$ so a caller cannot quietly downgrade root to a weaker scheme such as $1$ MD5. Note this is a partial mitigation, not a fix: a WPA PSK is password-equivalent for joining the network, so an eavesdropper who captures it still gets on the Wi-Fi. It protects the passphrase string itself, which users reuse, and it genuinely protects the root password since the hash is not usable to log in. Confidentiality for the PSK still needs an encrypted transport. Verified against the values a client would compute: PBKDF2-HMAC-SHA1 (passphrase, ssid, 4096, 32) matches wpa_passphrase byte for byte, and busybox mkpasswd -m sha512 matches openssl passwd -6.
  • b8d483a sysupgrade: fix watchdog reset during flash erase Replace the hand-rolled echo+sleep watchdog feeder with the real busybox watchdog applet. The old feeder opened the device without setting an explicit timeout, relying on whatever driver default the Ingenic JZ_WDT assigned after the magic-close reopen -- which was apparently too short for the 2-second feed interval, causing the hardware watchdog to fire mid-erase. The real watchdog applet sets a 10-second timeout via ioctl(WDIOC_SETTIMEOUT) and feeds reliably at half that interval. It is the same well-tested code that feeds the hardware before the takeover, now running from tmpfs so erasing rootfs cannot kill it. Also replaced the separate flash_eraseall + flashcp dance with a single flashcp -v -A, using Thingino's existing erase-all flag. Signed-off-by: Paul Philippov paul@themactep.com
  • 86c9d02 sysupgrade: fix watchdog reset during flash erase Replace the hand-rolled echo+sleep watchdog feeder with the real busybox watchdog applet. The old feeder opened the device without setting an explicit timeout, relying on whatever driver default the Ingenic JZ_WDT assigned after the magic-close reopen -- which was apparently too short for the 2-second feed interval, causing the hardware watchdog to fire mid-erase. The real watchdog applet sets a 10-second timeout via ioctl(WDIOC_SETTIMEOUT) and feeds reliably at half that interval. It is the same well-tested code that feeds the hardware before the takeover, now running from tmpfs so erasing rootfs cannot kill it. Also replaced the separate flash_eraseall + flashcp dance with a single flashcp -v -A, using Thingino's existing erase-all flag. Signed-off-by: Paul Philippov paul@themactep.com
  • 1f970cc ha-watchdog: re-publish discovery 30s after crash restart After a crash recovery, HA may miss the retained discovery messages if its MQTT integration reconnected during the restart gap. A delayed re-publish ensures the camera reappears in HA. Signed-off-by: Paul Philippov paul@themactep.com
  • 1b89fa6 ha-watchdog: re-publish discovery 30s after crash restart After a crash recovery, HA may miss the retained discovery messages if its MQTT integration reconnected during the restart gap. A delayed re-publish ensures the camera reappears in HA. Signed-off-by: Paul Philippov paul@themactep.com
  • 1e94568 ha-daemon: re-publish discovery 30s after boot HA's MQTT integration may miss retained discovery messages if it connects after the initial publish. A delayed re-publish ensures HA picks up the camera even after late broker connections. Signed-off-by: Paul Philippov paul@themactep.com
  • d95bf8d ha-daemon: re-publish discovery 30s after boot HA's MQTT integration may miss retained discovery messages if it connects after the initial publish. A delayed re-publish ensures HA picks up the camera even after late broker connections. Signed-off-by: Paul Philippov paul@themactep.com
  • 8a2ba27 thingino-ha: fix auto-enable doorbell build error Use $(if ...) inside the define block instead of += append, which doesn't work correctly with conditional defines in Buildroot. Signed-off-by: Paul Philippov paul@themactep.com
  • bf5f839 thingino-ha: fix auto-enable doorbell build error Use $(if ...) inside the define block instead of += append, which doesn't work correctly with conditional defines in Buildroot. Signed-off-by: Paul Philippov paul@themactep.com
  • 52c54e5 doorbell: add chime bypass mode, HA watchdog, and related fixes - Add chime.bypass config toggle (Web UI + CLI) to suppress no-chime alarm and skip chime playback while still firing HA button events - Add ha-watchdog to respawn ha-daemon if it crashes, preventing HA from staying offline after transient MQTT disconnects - Auto-enable ha.enable_doorbell at build time for doorbell cameras - Change HA firmware entity from update (with install) to read-only sensor - updates must be done via SSH - Reduce doorbell_alarm bypass log spam to single message - Add VDB2 substream resolution 640x480 via prudynt.json Signed-off-by: Paul Philippov paul@themactep.com
  • 1f5f0e5 doorbell: add chime bypass mode, HA watchdog, and related fixes - Add chime.bypass config toggle (Web UI + CLI) to suppress no-chime alarm and skip chime playback while still firing HA button events - Add ha-watchdog to respawn ha-daemon if it crashes, preventing HA from staying offline after transient MQTT disconnects - Auto-enable ha.enable_doorbell at build time for doorbell cameras - Change HA firmware entity from update (with install) to read-only sensor - updates must be done via SSH - Reduce doorbell_alarm bypass log spam to single message - Add VDB2 substream resolution 640x480 via prudynt.json Signed-off-by: Paul Philippov paul@themactep.com
  • b9fc642 doorbell: publish ON instantly via MQTT, not just poll cycle doorbell_event now publishes ON directly to MQTT when the button is pressed, so Home Assistant automations fire immediately instead of waiting up to state_interval (15s) for the next ha-state poll. - doorbell_event: sources ha-common (if available), publishes ON with force+retain, then touches /tmp/doorbell_pressed as before - ha-state: when flag file is present, force-publishes ON then OFF to overwrite the retained ON — guarantees a clean pulse - Gracefully degrades: if ha-common is absent, falls back to flag-file- only behavior (no MQTT, poll-based) Signed-off-by: Paul paul@themactep.com
  • 2a809b3 doorbell: publish ON instantly via MQTT, not just poll cycle doorbell_event now publishes ON directly to MQTT when the button is pressed, so Home Assistant automations fire immediately instead of waiting up to state_interval (15s) for the next ha-state poll. - doorbell_event: sources ha-common (if available), publishes ON with force+retain, then touches /tmp/doorbell_pressed as before - ha-state: when flag file is present, force-publishes ON then OFF to overwrite the retained ON — guarantees a clean pulse - Gracefully degrades: if ha-common is absent, falls back to flag-file- only behavior (no MQTT, poll-based) Signed-off-by: Paul paul@themactep.com
  • ba6b1f5 thingino-ha: add doorbell binary sensor for button press triggers Doorbell button presses (doorbell_event) now expose a momentary binary sensor in Home Assistant, enabling automations on ring events. - binary_sensor.thingino__doorbell: ON when button pressed, clears to OFF on next ha-state poll (max 15s delay) - doorbell_event touches /tmp/doorbell_pressed; ha-state consumes it - device_class: sound, icon: mdi:doorbell - Disabled by default (enable_doorbell: false) — only cameras with doorbell hardware should enable it Signed-off-by: Paul paul@themactep.com
  • 73d8c40 thingino-ha: add doorbell binary sensor for button press triggers Doorbell button presses (doorbell_event) now expose a momentary binary sensor in Home Assistant, enabling automations on ring events. - binary_sensor.thingino__doorbell: ON when button pressed, clears to OFF on next ha-state poll (max 15s delay) - doorbell_event touches /tmp/doorbell_pressed; ha-state consumes it - device_class: sound, icon: mdi:doorbell - Disabled by default (enable_doorbell: false) — only cameras with doorbell hardware should enable it Signed-off-by: Paul paul@themactep.com
  • b21d93d wyze vdb2: keep default substream resolution
  • 13bf99d wyze vdb2: keep default substream resolution
  • 338b76c thingino-ha: add firmware version/timestamp sensors, optimize poll path Firmware sensors: - firmware_version: release+short-commit (e.g. ciao+9a88c72) - firmware_timestamp: build date in UTC (e.g. 2026-07-24 03:04:32 UTC) - Both parsed from COMMIT_ID in /etc/os-release, one file read - Configurable via thingino.json and Web UI checkboxes - MQTT discovery publishes as retained sensor entities Performance (pre-existing refactoring): - ha_entity_enabled() memoizes enable flags: zero jct forks after startup - HA_MQTT_BASE_ARGS pre-built once; ha_mpub_cmd reconstructs only client ID - _sq() fast path: no sed fork for strings without single quotes - ha_pub_begin() defers mktemp until first queued publish (idle cycles free) - _ha_state_changed(): read builtin instead of cat fork - eval instead of sh -c for mosquitto_pub/sub invocations - mpub hoisted out of camera snapshot loop in ha-daemon - ha_pub_disc/ha_clear_disc use cached HA_DISC_PREFIX Bug fixes: - S93ha stop_daemon: match by -n (name) not -x (exe) — shell scripts resolve to /bin/sh via /proc/PID/exe, so -x never matched - S93ha stop(): source ha-common so HA_CAMERA_ID is set before cleaning up mosquitto clients by MAC - S93ha start(): quote read_config output to avoid syntax error on empty - ha-common: restore HA_MQTT_TLS_SKIP_VERIFY + --insecure (lost in refactor) Behavior changes: - ha-state: publish availability only on startup sync (FORCE=1), not every poll cycle — ha-commands re-asserts online on MQTT reconnect - OTA firmware state/latest now published with -r (retained) so HA recovers after restart without waiting for next check cycle - S93ha: graceful shutdown with 20s wait_for_ha_shutdown before SIGKILL Signed-off-by: Paul paul@themactep.com
  • b40225e thingino-ha: add firmware version/timestamp sensors, optimize poll path Firmware sensors: - firmware_version: release+short-commit (e.g. ciao+9a88c72) - firmware_timestamp: build date in UTC (e.g. 2026-07-24 03:04:32 UTC) - Both parsed from COMMIT_ID in /etc/os-release, one file read - Configurable via thingino.json and Web UI checkboxes - MQTT discovery publishes as retained sensor entities Performance (pre-existing refactoring): - ha_entity_enabled() memoizes enable flags: zero jct forks after startup - HA_MQTT_BASE_ARGS pre-built once; ha_mpub_cmd reconstructs only client ID - _sq() fast path: no sed fork for strings without single quotes - ha_pub_begin() defers mktemp until first queued publish (idle cycles free) - _ha_state_changed(): read builtin instead of cat fork - eval instead of sh -c for mosquitto_pub/sub invocations - mpub hoisted out of camera snapshot loop in ha-daemon - ha_pub_disc/ha_clear_disc use cached HA_DISC_PREFIX Bug fixes: - S93ha stop_daemon: match by -n (name) not -x (exe) — shell scripts resolve to /bin/sh via /proc/PID/exe, so -x never matched - S93ha stop(): source ha-common so HA_CAMERA_ID is set before cleaning up mosquitto clients by MAC - S93ha start(): quote read_config output to avoid syntax error on empty - ha-common: restore HA_MQTT_TLS_SKIP_VERIFY + --insecure (lost in refactor) Behavior changes: - ha-state: publish availability only on startup sync (FORCE=1), not every poll cycle — ha-commands re-asserts online on MQTT reconnect - OTA firmware state/latest now published with -r (retained) so HA recovers after restart without waiting for next check cycle - S93ha: graceful shutdown with 20s wait_for_ha_shutdown before SIGKILL Signed-off-by: Paul paul@themactep.com
  • c66a694 t10 camera: adjust rmem
  • 2913ce8 t10 camera: adjust rmem
  • 02f2adb wyze vbd2: do not force image rotation, vbd2 has sensor in correct position
  • 63c389e wyze vbd2: do not force image rotation, vbd2 has sensor in correct position
  • 7ce35a4 build: add post-build check for busybox long-option usage Thingino disables CONFIG_LONG_OPTS globally, but buildroot packages can silently install init scripts that use --long-option syntax (e.g. S41ifplugd with --start, --background, --exec, etc.). These scripts fail at runtime with a cryptic 'invalid option -- -' because getopt() cannot parse --long-option without FEATURE_*_LONG_OPTIONS. Add a post-build check (scripts/check-busybox-lopts.sh) that scans /etc/init.d/ for start-stop-daemon invocations using long options. The check runs as the final step of rootfs_script.sh and aborts the build on violations, so the problem is caught before flashing. Signed-off-by: Paul Philippov paul@themactep.com
  • 9a88c72 build: add post-build check for busybox long-option usage Thingino disables CONFIG_LONG_OPTS globally, but buildroot packages can silently install init scripts that use --long-option syntax (e.g. S41ifplugd with --start, --background, --exec, etc.). These scripts fail at runtime with a cryptic 'invalid option -- -' because getopt() cannot parse --long-option without FEATURE_*_LONG_OPTIONS. Add a post-build check (scripts/check-busybox-lopts.sh) that scans /etc/init.d/ for start-stop-daemon invocations using long options. The check runs as the final step of rootfs_script.sh and aborts the build on violations, so the problem is caught before flashing. Signed-off-by: Paul Philippov paul@themactep.com
  • 4e11284 overlay: fix S41ifplugd for busybox without long options Thingino disables CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS (and CONFIG_LONG_OPTS globally), but the upstream buildroot init script uses long options exclusively (--start, --background, --make-pidfile, etc.). Without long option support, getopt() chokes on '--start', prints 'start-stop-daemon: invalid option -- -', and the ifplugd daemon fails to start. Convert all start-stop-daemon invocations to short options: --start -> -S --stop -> -K --background -> -b --make-pidfile -> -m --pidfile -> -p --exec -> -x --test -> -t --quiet -> -q The -- separator between daemon options and the command is standard getopt behavior and works fine with short options. Signed-off-by: Paul Philippov paul@themactep.com
  • 524287f overlay: fix S41ifplugd for busybox without long options Thingino disables CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS (and CONFIG_LONG_OPTS globally), but the upstream buildroot init script uses long options exclusively (--start, --background, --make-pidfile, etc.). Without long option support, getopt() chokes on '--start', prints 'start-stop-daemon: invalid option -- -', and the ifplugd daemon fails to start. Convert all start-stop-daemon invocations to short options: --start -> -S --stop -> -K --background -> -b --make-pidfile -> -m --pidfile -> -p --exec -> -x --test -> -t --quiet -> -q The -- separator between daemon options and the command is standard getopt behavior and works fine with short options. Signed-off-by: Paul Philippov paul@themactep.com
  • cd64bae make backchannel test script to use shorter lower tone sound
  • 2954380 make backchannel test script to use shorter lower tone sound
  • 4f43c51 formatting
  • 3840193 formatting
  • 512d6d7 package/prudynt-t: update to 26d47e9 Update prudynt-t from 7a768e0 to 26d47e9 Hash change: 7a768e067b7a8633471474e1669ce3d38b75631a -> 26d47e962d79f7383949fd31186fa61684e01156 Changelog: 26d47e9: osd: fix privacy cover format for T23/T32/T33 platforms
  • 5b87269 package/prudynt-t: update to 26d47e9 Update prudynt-t from 7a768e0 to 26d47e9 Hash change: 7a768e067b7a8633471474e1669ce3d38b75631a -> 26d47e962d79f7383949fd31186fa61684e01156 Changelog: 26d47e9: osd: fix privacy cover format for T23/T32/T33 platforms
  • 433658d mqtt-sub: add TLS skip verify control
  • d43ca57 scripts: add go2rtc SEI OSD overlay solution Add a go2rtc-based alternative to sei-rtsp.py that restores OSD from SEI metadata into RTSP video streams. Uses a Go NAL parser (sei-extract) to extract Thingino SEI user-data payloads and writes per-element text files for ffmpeg's drawtext filter with reload=1. Key features: - Per-element positioning from SEI metadata (auto mode) plus preset modes - Wall-clock timestamp interpolation between SEI frames - Auto-rotate from SEI metadata - Runs go2rtc via podman/docker container (alexxit/go2rtc) or native binary - Multi-protocol output: RTSP, WebRTC, MSE - Passthrough audio (-c:a copy) Includes documentation in docs/go2rtc-sei-osd.md Signed-off-by: Paul Philippov paul@themactep.com
  • 343d100 package/prudynt-t: update to 7a768e0 Update prudynt-t from 8b02ea8 to 7a768e0 Hash change: 8b02ea882ab8f57cd46523d70f21ef1d664d3b3e -> 7a768e067b7a8633471474e1669ce3d38b75631a Changelog: 7a768e0: Fix audio/video PTS divergence in RTCP Sender Report when NTP is unsynced
  • 95f4e6e package/open-tx-isp: update to f5224df Update open-tx-isp from 7601012 to f5224df Hash change: 76010124b480e0e2611dd06cbb198df6b4facb96 -> f5224df98e1326d9c443fa344e645211805cd1d5 Changelog: f5224df: Check pt work on t41.
  • ef99ecf package/prudynt-t: update to 8b02ea8 Update prudynt-t from 743ff11 to 8b02ea8 Hash change: 743ff1165d04b25fb3ca74fe0789a65d4b2601c8 -> 8b02ea882ab8f57cd46523d70f21ef1d664d3b3e Changelog: 8b02ea8: experimental subtitle stream (wip)
  • 9bcb608 package/open-tx-isp: update to 7601012 Update open-tx-isp from d783ec7 to 7601012 Hash change: d783ec7ee553c821999acf49f4ca7b1e9a187ab4 -> 76010124b480e0e2611dd06cbb198df6b4facb96 Changelog: 7601012: Check pt work on t41
  • 3a564eb scripts: fix permissions
  • 6517104 linux-kopt: run LED hooks post-patch to survive cumulative patch The Thingino cumulative kernel patch ships its own board_base.c which overwrites the LED platform device registration injected by the PRE_PATCH hook. Add a POST_PATCH hook to re-apply after patches land. Signed-off-by: Paul Philippov paul@themactep.com
  • dc0600e Fix formatting in package-bundles.md
  • 558898d overlay: remove vestigial F00ledd init script No longer needed — the kernel leds-gpio pipeline handles LEDs directly, and S99led already resets triggers on startup. Signed-off-by: Paul Philippov paul@themactep.com
  • 25d7541 thingino-kopt: enable GPIO LED kernel support by default Set BR2_PACKAGE_THINGINO_KOPT_LEDS default y so that cameras with BR2_THINGINO_LED_*_GPIO pins defined get /sys/class/leds entries and the startup indicator LED dropdown works out of the box. Signed-off-by: Paul Philippov paul@themactep.com
  • 7454456 telegrambot: remove from default packages, can be installed as a bundle
  • 508f169 mqtt: add tls_skip_verify option for self-signed brokers Add an optional tls_skip_verify setting across all MQTT clients. When enabled together with use_ssl, the --insecure flag is passed to mosquitto_pub/mosquitto_sub alongside --capath /etc/ssl/certs. The connection remains encrypted but broker certificate verification is skipped — useful for self-signed or private-CA brokers. Config defaults (tls_skip_verify: false): - send2.json (mqtt section) - thingino-ha.json (ha.mqtt section) - thingino-agent.json (mqtt_sub section) Shell scripts (reads key, passes --insecure when use_ssl && skip_verify): - send2mqtt (also adds missing use_ssl/--capath TLS support) - mqtt-sub-dispatcher - ha-common (independent HA setting, no fallback to mqtt_sub) - telegram-cam-agent - telegram-cam-register (both copies) WebUI (toggle shown only when SSL enabled): - HA config page (config-ha.html/js, json-config-ha.cgi) - Send-to-MQTT config page (tool-send2-mqtt.html/js) Signed-off-by: Paul Philippov paul@themactep.com
  • b0fc0fd kernel: update cross compiler prefix for t32
  • cf0c976 kernel: add vfat driver
  • 48901af bundle: rebuild plugins.js from all installed manifests Remove plugins.js from bundles — instead, thingino-pkg rebuilds it from all /var/www/a/plugins/*.webui.json manifests on every install and remove. This supports multiple webui plugin bundles without overwriting each other's nav items. Signed-off-by: Paul Philippov paul@themactep.com
  • 6dbf91c bundle: rsync webui files then assemble directly Instead of thingino-webui-rebuild + target-finalize (which doesn't reliably merge per-package files into the global target), rsync the plugin's web files into target/ and run assemble_plugins.py directly. This correctly produces an updated plugins.js with the plugin's nav items. Update docs to reflect the new approach. Signed-off-by: Paul Philippov paul@themactep.com
  • fee07fd bundle: fix busybox tar incompatibilities in thingino-pkg Busybox tar on the camera lacks gzip support (-z flag) and --exclude. - Pipe through zcat instead of using tar -z - Remove manifest after extraction instead of using --exclude - Add || true guards on optional json_get calls (jct exits non-zero when key not found, which kills script with set -e) Signed-off-by: Paul Philippov paul@themactep.com
  • 2b15f61 bundle: rename manifest to thingino-pkg.json (no leading dot) Avoids ./ prefix issues when tarring from '.' directory. Device script handles both paths for backward compatibility. Signed-off-by: Paul Philippov paul@themactep.com
  • 767eaae docs: update package-bundles with current implementation details - Package must be enabled in config (corrected from earlier draft) - Document dirclean → build → strip pipeline - Document per-package + global target fallback for file collection - Document WebUI plugin assembly and limitations - Update walkthrough with menuconfig step and stripping output Signed-off-by: Paul Philippov paul@themactep.com
  • 408163e bundle: rename .tpb to .tgz extension Midnight Commander and other Linux tools get confused by non-standard extensions. Use .tgz which is universally recognized as gzip'd tar. Signed-off-by: Paul Philippov paul@themactep.com
  • 954248d bundle: fix webui plugin support - Makefile: bundle-% target detects .webui.json manifest and runs thingino-webui-rebuild + target-finalize to assemble plugin files into the global target directory - make-bundle.sh: fall back to global target/ for files not found in per-package target (webui assembly output lands there) - telegrambot.bundle: include webui plugin files + assembled plugins.js Signed-off-by: Paul Philippov paul@themactep.com
  • e212dde bundle: strip binaries, dirclean before build, add nino bundle - make-bundle.sh: auto-detect cross-compile strip tool and strip all binaries in the bundle before archiving - Makefile: add package-dirclean before package build in bundle-% target so existing packages can be rebundled cleanly - New bundle: nino (terminal text editor) Signed-off-by: Paul Philippov paul@themactep.com
  • 0d9acb5 Add Phase 1 package bundle system Introduces a lightweight mechanism to build and distribute precompiled software bundles (.tpb files) that can be installed on a running Thingino camera without reflashing firmware. Build side: - BR2_THINGINO_PACKAGES menuconfig (selects thingino-pkg + thingino-jct) - 'make bundle-' target: builds the package on-demand, then packs it - scripts/make-bundle.sh: collects files from per-package target dir, generates manifest, produces .tpb archive - .bundle files: per-package file manifests for bundle inclusion Device side: - /usr/sbin/thingino-pkg: install, remove, list, info, files commands - SOC family validation, conflict checking, storage tier auto-selection - Tiers: overlay (data partition), sdcard (symlinks), tmp (volatile) Documentation: docs/package-bundles.md covering architecture, bundle format, manifest schema, walkthrough, security, and limitations. Signed-off-by: Paul Philippov paul@themactep.com
  • c847c37 system: guard SD card related files with BR2_THINGINO_SDCARD
  • 236d16b wireguard: contain wireguard files in wireguard-tools package
  • c4eded0 package/prudynt-t: update to 743ff11 Update prudynt-t from ac02b80 to 743ff11 Hash change: ac02b8014ab64d8ff3c3f8b49a9af0586ee7ad9e -> 743ff1165d04b25fb3ca74fe0789a65d4b2601c8 Changelog: 527d2cd: privacy: hardware OSD cover for black screen + suppress motion detection 743ff11: AACEncoder: port to faac 2.0 API
  • d614afb privacy-lite: remove text element settings from privacy screen configuration The active prudynt-t backend only supports a boolean enabled/disabled toggle for privacy covers. Remove all text, font, color, stroke, and image overlay settings from the webui config page and JS that had no corresponding backend support. Signed-off-by: Paul Philippov paul@themactep.com
  • 57e973c timps: copy changes from master
  • 5396012 floodlightd: copy package from master
  • ff33d0e ha-state: remove 'iw' fallback for RSSI, not available on Thingino Signed-off-by: Paul Philippov paul@themactep.com
  • a024c02 ha-state: add wpa_cli signal_poll for WiFi RSSI sensor The existing RSSI detection used 'iw' and /proc/net/wireless, neither of which worked reliably on these Ingenic cameras. Add wpa_cli signal_poll as the primary method - it's available on every Thingino camera with Wi-Fi and returns RSSI in dBm directly. Also fix interface detection to check /sys/class/net/*/wireless instead of grep-ping for 'wlan', so it works with any interface naming scheme (wlan0, ra0, etc.). Signed-off-by: Paul Philippov paul@themactep.com
  • bc9d32d ha-event: push motion state to MQTT immediately on event Add /usr/sbin/ha-event script that publishes entity state changes to Home Assistant MQTT the moment they happen, bypassing the periodic ha-daemon poll cycle. Previously, motion ON/OFF was only detected during the next ha-state poll (up to state_interval seconds of delay). The motion script now calls 'ha-event motion ON/OFF &' right after creating/removing the motion_alarm file. The ha-daemon polling loop remains as a consistency fallback. The ha-event script sources ha-common for MQTT config, checks that HA is configured and the entity is enabled, then publishes with force=1. It silently exits if HA is not installed, so there is no hard dependency between prudynt-t and thingino-ha. Signed-off-by: Paul Philippov paul@themactep.com
  • 679f1dd lightnvr: update hash for 0.36.3 Signed-off-by: Paul Philippov paul@themactep.com
  • 0a5d580 package/subzeroclaw: update patch and config for upstream ab18b78 The upstream source was significantly rewritten (new Config struct with request_extra/compact_extra/session fields, no more 'model' or 'max_messages' keys). Rebase the embedded-paths patch against the current HEAD and update the Thingino default config to match the new format (model now rides in request_extra JSON). Signed-off-by: Paul Philippov paul@themactep.com
  • e8b54ce jct: update hash file
  • 0dac651 dfu: update hash file
  • a389157 libflac: update hash file
  • dbda8e7 packages: update faac to 2.0, libsrt to 1.5.6, libhelix-{aac,mp3} to 2.4.2 faac 2.0 switches to meson build system and new faac_encoder API. libsrt and libhelix hash files updated to match version bumps in .mk. Signed-off-by: Paul Philippov paul@themactep.com
  • df1ac15 package/libsrt: update hash for v1.5.6 Signed-off-by: Paul Philippov paul@themactep.com
  • e2d884a package/open-tx-isp: update to d783ec7 Update open-tx-isp from 5881b6e to d783ec7 Hash change: 5881b6e95ae186382ad27708b981b37420ffa1ad -> d783ec7ee553c821999acf49f4ca7b1e9a187ab4 Changelog: e823c43: Add recovered T41 driver baseline 96aee8d: Restore the T41 OEM export surface 12dde6c: Add staged T41 device smoke harness a441264: Repair T41 interrupt wrapper chain 8b1027f: Restore T41 user copy and leading bit helpers 0f69330: Restore T41 fixed point log helpers 2c84119: Restore T41 vendor synchronization shims b16f05e: Restore T41 TISP fixed point logs 93be638: Repair T41 ISP reset pulse a9dd4af: Restore T41 fixed point add and subtract d0114d3: Restore T41 scalar fixed point helpers 3611294: Restore T41 ISP pad event dispatch 7736d69: Restore T41 Bayer format programming 92c3f1d: Preserve empty sensor argument in T41 smoke 1d79699: Repair T41 parent device teardown f764a38: Restore T41 child platform teardown 7e86f43: Gate T41 core teardown with bring-up state 5c353a6: Restore T41 child driver removal paths 867a044: Restore T41 subdevice resource teardown e9bdc44: Document clean T41 level zero smoke 1b08af6: Restore T41 subdevice initialization 033fed2: Restore T41 private ISP memory allocator a22a831: Repair T41 core probe object offsets 768e08c: Restore T41 tuning object initialization b283771: Restore T41 core output channels 8ab70da: Restore T41 firmware state extents 00d7352: Restore T41 TISP allocation teardown 47bd80b: Restore T41 calibration binary loader 27b85f5: Reconstruct T41 TISP initialization 1ff2da8: Repair T41 core firmware transition 6826811: Repair T41 AF and GIB lifecycle 1c334c3: Reconstruct T41 AWB lifecycle baa0a99: Reconstruct T41 tone mapping lifecycle 38030e9: Reconstruct T41 WDR lifecycle 85432c3: Add T41 sensor registry ABI 9e3a042: Repair T41 ISP open and release paths c81184b: Repair T41 core activation lifecycle ea59a8e: Restore T41 core event dispatch 35de66e: Restore T41 VIC and frame-source dispatch 6cd43b3: Restore T41 VIN sensor dispatch 889636a: Restore T41 VIC sensor transitions 89ae4a9: Restore T41 tuning initialization caeba38: Restore T41 deferred sensor events c62e511: Restore T41 sensor callback table 3248912: Restore T41 tuning event dispatch 68e7010: Restore T41 driver version ioctl f1ede22: Restore T41 sensor registration ioctls 7834396: Capture T41 smoke process diagnostics 21d1f50: Restore T41 VIN and CSI ops wiring 6cfdc5f: Fix T41 VIN probe byte offsets 851f2ba: Restore T41 notification dispatch 8c218ae: Detect T41 unaligned kernel faults 428b814: Restore T41 user copy wrapper 5e10957: Restore T41 sensor input activation 4922d6d: Restore T41 AE initialization f429b9a: Restore T41 black level correction 10ee499: check pt e8e3e8b: Restore T41 DPC through Gamma initialization 98358df: Restore T41 Defog lifecycle in safe bypass 1ce8d50: Restore T41 LCE lifecycle in safe bypass 6c81f8b: Restore T41 MDNS lifecycle in safe bypass 94b7232: Preserve T41 AF state in fixed-focus safe mode 01c9abe: Restore T41 YDNS lifecycle in safe bypass 7e972a2: Restore T41 CDNS lifecycle in safe bypass 4a7cebd: Restore T41 SDNS lifecycle in safe bypass 7a02f30: Restore T41 YSP lifecycle in safe bypass c9b7685: Restore T41 BCSH lifecycle in safe neutral mode 963739d: Restore T41 CLM lifecycle in safe neutral mode f632d0b: Capture T41 kernel faults before process diagnostics c6ec98e: Check pt d783ec7: Check pt
  • ca83f99 package/libhelix-mp3: update to 2.4.2 Update libhelix-mp3 from 2.4.1 to 2.4.2 Hash change: 2.4.1 -> 2.4.2 (No changelog available)
  • 8a86364 package/libhelix-aac: update to 2.4.2 Update libhelix-aac from 2.4.1 to 2.4.2 Hash change: 2.4.1 -> 2.4.2 (No changelog available)
  • 6f8a567 package/libflac: update to 2.4.2 Update libflac from 2.4.1 to 2.4.2 Hash change: 2.4.1 -> 2.4.2 (No changelog available)
  • 8b20e26 webui: tighten recording/motion/privacy button active checks The previous permissive truthy checks (value && value !== 0 && value !== "false") could produce false positives for unexpected JSON values like the string "0" (truthy in JS, !== 0 due to strict type mismatch). Use explicit value === true || value === 1 to match only the expected heartbeat formats: boolean true (raptor path) or integer 1 (native path). Signed-off-by: Paul Philippov paul@themactep.com
  • 5f6814e package/thingino-dfu: update to v1.5.33 Update thingino-dfu from v1.5.32 to v1.5.33 Hash change: v1.5.32 -> v1.5.33 (No changelog available)
  • 0f1537f package/prudynt-t: update to ac02b80 Update prudynt-t from 997a6df to ac02b80 Hash change: 997a6df98fba1e27f9403c8ac0add07abe8beee4 -> ac02b8014ab64d8ff3c3f8b49a9af0586ee7ad9e Changelog: ac02b80: api: serve sse stream for sei data
  • 93cdcf8 webui: fix motion/privacy/recording/Auto button highlight from heartbeat The slow heartbeat (native path) sends motion_enabled, privacy_enabled, rec_ch0, rec_ch1 as integers 0/1, but updateHeartbeatUi() compared them with strict boolean equality (=== true). Since 1 !== true in JavaScript, the buttons never highlighted when the native heartbeat reported active state. Similarly, the raptor heartbeat path sends daynight_enabled as boolean true/false, but the Auto button checked only === 1, missing the raptor case. In preview.js, handleMessage() was setting .checked on elements, which is a no-op. Changed to classList.toggle('active', ...). All checks now use robust truthy tests consistent with the existing mic_enabled/spk_enabled pattern: value && value !== 0 && value !== false. Signed-off-by: Paul Philippov paul@themactep.com
  • 4e40d15 Makefile: print total build time at end of pack
  • 5eaf6e7 package/thingino-dfu: update to v1.5.32 Update thingino-dfu from v1.5.30 to v1.5.32 Hash change: v1.5.30 -> v1.5.32 (No changelog available)
  • 50fe432 package/prudynt-t: update to 997a6df Update prudynt-t from c063550 to 997a6df Hash change: c0635506956ac759929f09625f77a8d13b749f17 -> 997a6df98fba1e27f9403c8ac0add07abe8beee4 Changelog: 997a6df: http: add Access-Control-Allow-Origin to /api/v1/osd-sei
  • 9f08f7f package/libsrt: update to v1.5.6 Update libsrt from v1.5.5 to v1.5.6 Hash change: v1.5.5 -> v1.5.6 (No changelog available)
  • 0012ffc thingino-button: block in poll() instead of busy-polling the input device
  • 673bfce linux: fix T31 CGU parent-only clock changes Signed-off-by: Matt Davis matteius@gmail.com
  • c7c6d9e ingenic-audiodaemon: fix malformed output.c hunk in safer-defaults patch
  • a0d5ccd Add some new camera documents.
  • d0ddffd motors: apply invert_x/invert_y at runtime on GPIO/TCU steppers; fix Cinnado D1 tilt direction GPIO/TCU steppers get inversion at runtime via 'motors -I' after the daemon starts (modprobe rejects the params). Sets invert_y on the four Cinnado D1 profiles to fix the swapped tilt direction.
  • e50a403 Add dts and Experimental config for 360 k7ts t41nq. note: 1.The led_g is currently not working for all kernel 4.4 cameras. 2.The external speaker works ,but I didn't find the disable/enable pin. 3.The original firmware have gpio 57 and 61 as input, 82 output low, I don't know what are they. 4.Motors need previous patch in ingenic-sdk to work.
  • e22cb86 Add dts and Experimental config for 360 k7ts t41nq. note: 1.The led_g is currently not working for all kernel 4.4 cameras. 2.The external speaker works ,but I didn't find the disable/enable pin. 3.The original firmware have gpio 57 and 61 as input, 82 output low, I don't know what are they. 4.Motors need previous patch in ingenic-sdk to work.
  • bc329ac Add experimental H3C tc2100 and modify c2041 config to add ethernet
  • 3625e1b Add experimental config for 360 ap6pcm03 note: 1.The sdio wifi script currently conflits wired ethernet and usb cdc network. So, no wifi even if both are unconnected. And the attempt to remoce mmc 1 break mmc 0 ,need the previous network and kernel patch to work. 2.32m image size for autoupdate-full.bin doesn't work in old uboot (Warning! Only lower 16MiB are accessible. Add #define CONFIG_SPI_FLASH_BAR for full access.). So please use new mainline uboot. 3.shvflip=1 doesn't work, so i flipped it later in prudynt and raptor. 4.get "gpio-73 (sdio_wifi_power_on ) out hi" in original firmware, but it doesn't seem to have any effect in my device.