Commit Graph
410 Commits
Author SHA1 Message Date
OpenIPC AI teamandGitHub a5882d5e80 package: stop selecting jsonfilter, mirroring firmware #2304 (#128)
OpenIPC/firmware dropped BR2_PACKAGE_JSONFILTER from every one of its
defconfigs in #2304, once the WebUI stopped calling it. builder's defconfigs are
its own files, so 97 of them kept selecting it. jsonfilter selects JSON_C and
LIBUBOX, and on a device that enables neither uqmi-openipc nor wifibroadcast-ng
nothing else selects libubox, so it and jsonfilter shipped for nothing.

That is what has had three devices over their rootfs cap:

    hi3518ev200_lite_switcam-hs303      rootfs 5124KB/5120KB   -4KB
    ssc333_lite_babysense-see-hd-ip206  rootfs 5124KB/5120KB   -4KB
    ssc333_lite_meari-speed-6s          rootfs 5128KB/5120KB   -8KB

all three red on the nightly, meari since 2026-08-24. Bisecting meari across
firmware revisions lands on #2301, which added 408 bytes to the comment-stripped
sysupgrade script -- these images had no headroom left at all, and 408 bytes of
a genuine bug fix was enough to push one over a 4KB padding step. The fix is to
give them headroom, not to give back the bug fix.

Measured on ssc333_lite_meari-speed-6s, built the way builder.sh builds it --
devices/<item>/ copied over a firmware checkout at master, clean tree both times:

    before   rootfs.squashfs 5128KB/5120KB   size exceeded by: 8KB
    after    rootfs.squashfs 5096KB/5120KB   24KB spare

-32KB, from /usr/bin/jsonfilter (18068 raw) and /usr/lib/libubox.so (30404 raw).
json-c does NOT go: majestic lists it in MAJESTIC_DEPENDENCIES, so buildroot
builds and installs it whether or not BR2_PACKAGE_JSON_C is set. Only the two
files above leave the image.

Two consumers genuinely need jsonfilter and both keep it:

  * devices/apfpv's own etc/init.d/S99msposd reads majestic's config.json
    through it, and ssc338q_apfpv and ssc378qe_apfpv do not enable
    wifibroadcast-ng. Those two keep the symbol, with the reason written above
    the line -- the same undeclared-runtime-dependency trap firmware #2305 had
    to fix, and the reason this is 95 defconfigs and not 97.

  * every other FPV device enables wifibroadcast-ng, whose Config.in selects
    BR2_PACKAGE_JSONFILTER (added by #2305) for the same script. They keep it
    without saying so.

LTE devices keep libubox through uqmi-openipc, which selects it independently.

Nothing else in this repository calls jsonfilter: grepping devices/ and
package/ finds only that one S99msposd line, and firmware's own tree has no
caller left outside wifibroadcast-ng.
2026-08-25 20:29:47 +03:00
94cce13948 gk7205v200: flip dwc3 to host before unbinding xhci (otg) (#114)
Booting the otg profile with /etc/usbmode = device made S72usbmode's
`usb-mode device` log, on every single boot:

    xhci-hcd xhci-hcd.0.auto: Host not halted after 16000 microseconds.
    xhci-hcd xhci-hcd.0.auto: Host controller not halted, aborting reset.

dwc3_core_init() leaves GCTL.PRTCAPDIR = OTG(3) and this 4.9 dwc3 never
moves off OTG on its own. xhci-hcd binds and registers both buses on top
of that anyway, but it is not actually driving the port -- so unbinding
straight from OTG asks xhci_halt() to halt a host that was never really
running, and it times out.

The gadget composed regardless, so this was cosmetic in practice, but it
left the host controller un-halted: exactly the live-DMA-engine state the
unbind is there to avoid.

Flip the controller to host before unbinding, so the already-bound xHCI
is genuinely running and the unbind halts cleanly. A switch from host is
already in that state, so only boot pays for the extra flip.

Measured on gk7205v200 (Xiongmai IPC_GK7205V200_50H20AI_S38): 5/5 cold
boots warned before, 0/5 after. Runtime host<->device round trips stay
clean and still take ~0.35s, with no reboot and no majestic restart.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-31 18:21:02 +03:00
Dmitry IlyinandGitHub 96633d5577 gk7205v200: add an OTG profile that makes the camera a USB webcam (#113)
Adds gk7205v200_otg_generic, a firmware profile that puts the single DWC3
controller into dual-role so the board can either consume a USB webcam
(existing usbcam path, host role) or present itself to a PC as one (UVC
gadget, device role). The roles are mutually exclusive -- xHCI HCSPARAMS1
reports MaxPorts = 1 -- but usb-mode switches between them at runtime, so
one image covers both and no reboot is needed.

Kernel side, three patches:

0015 sets dr_mode = "otg" in the DTS so dwc3 registers both an xHCI host
and a UDC.

0016 makes device mode actually work on a part that has only ever run as
a host. Three fixes: re-run dwc3_event_buffers_setup() on gadget start
(an xHCI reset wipes GEVNTADR), soft-reset the core before taking the
lock so the PHY is re-initialised (without it high-speed chirp fails),
and swallow the run_stop timeout on pullup(0), which otherwise
permanently poisons cdev->deactivations.

0017 disables the vendor's UVC_SG_REQ path. It hands a whole frame to the
UDC as one scatter-gather request; dwc3 chains those sg entries into a
single isochronous service interval, which on a full-speed link is one
1023-byte packet, so every frame larger than that reached the host
truncated and H.264 decoders reported "bytestream -5" on roughly half the
frames. Goke never shipped this path enabled -- CONFIG_USB_CONFIGFS_F_UVC
is unset in every vendor defconfig, including gk7605v100's, and the SDK
carries no userspace UVC sample -- so it was never exercised. The
mainline path (32 plain one-packet requests) is used instead.

Userspace side: usb-mode switches roles with the unbind/flip/bind
sequencing dwc3_set_mode() does not do on its own, uvc-gadget-setup
composes the configfs gadget, and S72usbmode forces a concrete role at
boot -- not optional, since dr_mode = "otg" leaves GCTL.PRTCAPDIR in a
state this 4.9 dwc3 never moves off by itself.

The descriptors advertise exactly the one format, frame size and interval
majestic is configured to serve, read from /etc/majestic.yaml. majestic
answers every PROBE/COMMIT with its own bFormatIndex/bFrameIndex because
it has one stream and cannot follow the host, so anything extra is an
invitation to select something that will not arrive: asking for MJPEG got
raw H.264 (an SPS where a JPEG SOI belongs, garbage to every consumer),
and asking for 1080p got 720p.

Profile drops the air-unit packages (wifibroadcast, rtl8812au, mavfwd,
mavlink-router, vtund, linux-firmware, wireless-tools) and the whole
wireless kernel stack, which pays for usb_f_uvc.ko and for keeping the
full sensor list -- the fpv trim to IMX307/IMX335 is keyed on
OPENIPC_VARIANT="fpv", and a general-purpose USB webcam should not be
sensor-locked.

Measured on a gk7205v200 lab board over a full-speed link: H.264
1280x720 at 30 fps with zero decoder errors and no dropped buffers, and
MJPEG delivering valid JPEGs at the jpeg channel's own rate.

Requires a majestic built with ENABLE_UVC_GADGET to feed the gadget;
that is a separate change.
2026-07-28 23:21:12 +03:00
6c0a45e66d gk7205v200: enable USB (UVC) webcam kernel support (fpv) (#112)
Enable the media / V4L2 / uvcvideo kernel stack so a USB camera exposes
/dev/videoN for majestic's usbcam second-camera path.

To fit the 8M NOR (2M kernel / 5M rootfs) without dropping any sensor
library, uvcvideo and the videobuf2 framework are built INTO the kernel
(=y) instead of shipped as rootfs modules: the kernel partition had ~55 KB
of spare room while the rootfs was tight, so ~44 KB of weight moves from
rootfs to kernel. Resulting images: uImage 2022.8 KB / 2048 KB (25 KB
spare), rootfs squashfs 5080 KB / 5120 KB (40 KB spare).

GSPCA -- a separate driver for non-UVC webcams, pulled in by "default m
depends on VIDEO_V4L2" -- is disabled.

No kernel patch is carried: mmap capture works on stock uvcvideo once
majestic aligns its mmap() prototype with this MMAP_MUSL build's
uint32_t-offset shim (a userspace fix), so the earlier read()/fileio
uvcvideo patch is not needed.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 16:47:07 +03:00
edb7251bf3 devices: add CP Plus CP-UNC-TA21L2C (gk7205v200_lite, SC223A) (#106)
Dahua-OEM 2 MP camera. The SC223A is on hardware I2C0 routed to the
VI-RAW pads (0x112c0060/0x64 func2) rather than the default mipi-sensor
pads (0x30/0x34 func1) the SDK probes, and needs a 27 MHz MCLK
(0x120100f0=0x19; SDK default 0x11/div4 leaves it unresponsive).
S71devmem re-muxes the pads, selects the SENSOR_RSTN reset (GPIO8_7
func2) and fixes MCLK after S70vendor/load_goke; the stock
open_sensor_i2c then reaches the sensor over /dev/i2c-0. No kernel
module needed.

Verified on hardware: chip-id 0xcb3e over HW I2C0, MIPI lock 1920x1080
zero errors, majestic streams correct colour 1080p.

Co-authored-by: build <build@local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 07:37:44 +03:00
e6d8822517 Add TP-Link Kasa KC110 (HI3518EV200 + OV2735) (#99)
* Add TP-Link Kasa KC110 (HI3518EV200 + OV2735)

New device variant: hi3518ev200_ultimate_tplink-kasa-kc110.

Contents:
- kc110-board-support package: PTZ binary (mmap'd PL061), gpio-motors
  shim for the openipc web GUI, IR control script, and a boot-time
  pinmux init that writes 0x1 to the chip7/chip8 pads (0x200f00e8/ec/
  f0/fc/100/104). The OpenIPC kernel pinctrl driver does not auto-set
  these for the KC110's pan motor / IR-cut / IR-LED pads — the vendor
  firmware writes them explicitly in hn_config.sh. Without this,
  PL061 GPIODATA writes succeed silently but the pads never drive
  the ULN2803 / solenoid / LED.
- Device overlay:
    * etc/sensors/ov2735_i2c_1080p.ini — input_mode=0 (MIPI), 1-lane
      (was input_mode=4 / 4-lane in upstream cv200 osdrv, which is
      wrong for OV2735).
    * usr/bin/load_hisilicon — adds an "ov2735" case that mirrors
      ov2710_mipi (same MIPI pinmux + clock).
    * usr/share/openipc/customizer.sh — first-boot configuration:
      RTL8188FU wlandev, sensor config path, IR-cut pin 64, backlight
      pin 63, lightMonitor true (AE recovery after IR-cut toggle).
- README.md row.

Hardware notes:
- SoC: Hi3518EV200; Sensor: OV2735 (MIPI 1-lane, RAW10);
  Wi-Fi: RTL8188FU (USB); Flash: W25Q128 16 MB NOR.
- PTZ: 4-phase unipolar steppers via ULN2803 darlington array.
  Pan = vendor base-10 GPIO 81/74/73/72 = OpenIPC PL061 65/60/59/58;
  tilt = 0/1/2/44 = 0/1/2/36 (vendor's "44" is bank 4 pin 4 — i.e.
  pin 36 in OpenIPC's PL061 numbering, NOT 44).
- IR-cut filter: GPIO 64 (vendor 80) active-low; IR-LED: GPIO 63
  (vendor 77).

Status: PTZ + GPIO + IR fully functional. Video pipeline currently
needs an LD_PRELOAD shim around HI_MIPI_SET_DEV_ATTR because upstream
majestic builds combo_dev_attr_t with enIntfMode=DC / raw_data_type=0
for MIPI sensors that need RAW10. The shim is downstream-only pending
a real fix to majestic upstream; this PR delivers the rest of the
KC110 board support and will produce a fully-functional camera once
the majestic fix lands.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* tplink-kasa-kc110: use ov2735_mipi_1080p.ini

Follow OpenIPC/firmware #2155, which ships the OV2735 MIPI config as a
separate ov2735_mipi_1080p.ini and leaves ov2735_i2c_1080p.ini (the
parallel/DVP config) untouched.

- Rename the device's bundled sensor .ini to ov2735_mipi_1080p.ini and
  carry the full corrected MIPI config: input_mode=0 (MIPI),
  data_type=2 (RAW10), lane_id 2-lane, Input_mod=5 (MIPI),
  Mask_0=0xFFF00000. The previous bundled copy only had input_mode
  fixed (data_type/Input_mod/Mask_0 were still the wrong DVP defaults).
- Point customizer.sh's isp.sensorConfig at the new file.
- Exclude the unused parallel ov2735_i2c_1080p.ini from the image.

Verified on a TP-Link Kasa KC110 (OV2735 2-lane MIPI RAW10): clean
image, correct AE, RTSP H.264 1080p.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: moontwister <moontwister@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-13 22:37:11 +03:00
Ystinia 8f67509025 Strip down some profiles 2026-06-03 21:33:35 +02:00
Ystinia 17672a0d99 Update goke-osdrv-gk7205v200.mk 2026-06-03 21:09:58 +02:00
Ystinia 2fc4bb3737 [no ci] Update profiles gk7202v300_lite_xg521 gk7205v210_lite_vixand-ivg-g4f-a-w 2026-06-03 19:48:55 +02:00
83faaad635 toolchain: drop legacy gcc 8.4 pin (mirror firmware #2162) (#101)
OpenIPC/firmware PR #2162 (merged 2026-05-30) dropped the legacy
BR2_TOOLCHAIN_EXTERNAL_GCC_8=y + BR2_GCC_VERSION_LEGACY=y block from
its 18 ARM defconfigs and ships gcc 13.3.0 to those platforms now.

OpenIPC/builder's per-device and common Goke defconfigs still pinned
gcc 8, so every Goke job in the 2026-06-02 nightly Build run failed at
the toolchain stage with:

    Incorrect selection of gcc version: expected 8.x, got 13.3.0
    make[1]: *** [toolchain-external-custom/.stamp_configured] Error 1

Mirror #2162 across the 24 affected defconfigs (8 common + 16
per-device). No other defconfig content changes.

Unrelated 4 Sigmastar rootfs-overflow failures in the same nightly are
tracked separately.

Fixes failing run: https://github.com/OpenIPC/builder/actions/runs/26804792607

Co-authored-by: John <zekccsripfwrocp-15689@yn.furvionx.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 09:03:51 +03:00
Ystinia 9d8d5a323c Update gk7205v210_lite_vixand-ivg-g4h profile 2026-05-27 16:45:21 +02:00
Ystinia ee40da8007 Update gk7205v300_lite_vixand-ivg-g6s-w excludes 2026-05-25 14:44:33 +02:00
7b0757eb0e xg521: update device override for 60fps→high-fps rename in firmware (#95)
OpenIPC/firmware PR #2090 (2026-05-13, "IMX335 companion to
openhisilicon #99") renamed `general/package/goke-osdrv-gk7205v200/
files/sensor/config/60fps/` to `high-fps/`. The xg521 device-specific
goke-osdrv-gk7205v200.mk override here still references the old path,
causing every cron build of gk7202v300_lite_xg521 to fail:

  /usr/bin/install: cannot stat 'general/package/goke-osdrv-gk7205v200//
  files/sensor/config/60fps/*.ini': No such file or directory

Update the two install lines to use `high-fps` matching the renamed
upstream directory. Target install path also moves from
/etc/sensors/60fps → /etc/sensors/high-fps for consistency with what
the rest of the V4 sensor presets use.

The matching exclude-list entry in
  devices/gk7202v300_lite_xg521/general/scripts/excludes/gk7202v300_lite.list
references /etc/sensors/60fps/... and is now stale; left as-is since
`rm -f` on a non-existent path is a no-op (rootfs_script.sh:
xargs -I % rm -f ${TARGET_DIR}%). Can be cleaned in a follow-up.

Other Goke device overlays (gk7205v200_lite_*, gk7205v210_lite_*,
gk7205v300_lite_*) only have the same exclude-list staleness and no
broken install rule, so they aren't affected by this bug.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 19:18:09 +03:00
Signor Pellegrino (from Citadel PC) b69b9f1675 Binary drivers for OS02G10 sensors have been removed as everything is now built from source code. 2026-05-13 13:27:16 +03:00
92a237e82a enable opensdk for all CV200-family device profiles (#86)
Add BR2_PACKAGE_HISILICON_OPENSDK=y to 9 hi3516cv200-family profiles
that were missing it. These boards will now get open_ modules built
from openhisilicon source instead of vendor-only blobs from osdrv.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 07:50:48 +03:00
Signor Pellegrino (from Citadel PC) d7a782d137 Move ssc377qe_fpv_generic profile to real ssc377qe_fpv_ccdcam-im50q01-tipoman 2026-04-11 18:50:20 +03:00
Signor Pellegrino (from Citadel PC) 3fcb27018d The selector BR2_OPENIPC_SNS_MODEL=os02g10 is now working, and it is no longer necessary to forcibly delete unnecessary .ko and .bin sensor files. 2026-04-11 18:33:42 +03:00
Signor Pellegrino (from Citadel PC) e89f0205db Remove unused os02g10 profile 2026-04-11 18:27:53 +03:00
tipoman9andGitHub bfe88f02b4 Ssc377qe fpv added 90fps and 120fps modes for imx335 driver (#83)
* Add ssc377qe_fpv_generic device

* ssc377qe_fpv_generic added ath9k patched drivers

* Updated imx335 sensor driver added 90 and 120fps modes
2026-04-11 15:49:42 +03:00
Signor Pellegrino (from Citadel PC) d2c123a8d7 Remove unused binary hi3516ev200_isp 2026-04-11 15:43:58 +03:00
Petr BeklemishevandGitHub a91c246b30 Support transition from hi3516ev200_isp to open_isp in openipc/firmware#1979 (#84) 2026-04-11 15:35:25 +03:00
viktorxda a72e0ea177 Sync firmware changes 2026-04-08 18:04:31 +02:00
Signor Pellegrino (from Citadel PC) f22549ddec Remove MAVFWD from ssc338q_apfpv_greg-* profiles 2026-04-06 08:36:51 +03:00
Signor Pellegrino (from Citadel PC) 600ca103da Add ssc338q_apfpv_greg-generic-cu-eu profile 2026-04-06 00:05:04 +03:00
Signor Pellegrino (from Citadel PC) ee2074fc14 Add ssc338q_apfpv_greg-generic-bu-eu profile 2026-04-06 00:04:55 +03:00
Signor Pellegrino (from Citadel PC) 4d6c54cab3 Add ssc30kq_apfpv_greg-generic-cu-eu profile 2026-04-06 00:04:02 +03:00
Signor Pellegrino (from Citadel PC) 48b5edabbe Add ssc30kq_apfpv_greg-generic-bu-eu profile 2026-04-06 00:03:43 +03:00
Signor Pellegrino (from Citadel PC) d62145bc62 Update config name 2026-04-05 01:03:43 +03:00
Signor Pellegrino (from Citadel PC) 655722f9ac Merge branch 'master' of github2:OpenIPC/builder 2026-04-05 01:01:32 +03:00
tipoman9andGitHub 31a9645157 Ssc377qe fpv build (#75)
* Add ssc377qe_fpv_generic device

* ssc377qe_fpv_generic added ath9k patched drivers

* Add ssc377qe region library
2026-04-05 00:48:21 +03:00
Puzzak01andGitHub b9b94d4f61 change (#81)
* Create ssc335de_lite_dahua-hfw1230sp-v2_defconfig

* Create customizer.sh

* Create gpio.conf

* Update README.md

* Create ssc335de_lite.list

* Create ssc335de_lite.list

* Update README.md

* Update ssc335de_lite.list

* Update ssc335de_lite.list

* Update README.md

* add gpio for reset button

* add gpio for mmc

* Update ssc335de_lite_dahua-hfw1230sp-v2_defconfig

* Update gpio.conf

* Update ssc335de_lite_dahua-hfw1230sp-v2_defconfig
2026-03-22 15:12:17 +03:00
Signor Pellegrino (from Citadel PC) c3d597ee4d Merge branch 'master' of github2:OpenIPC/builder 2026-02-16 13:26:51 +03:00
cronyx fd2666c7c9 correct locations, autobuild, readme 2026-02-14 19:20:49 +03:00
piotr-goandGitHub cd099a8723 Add files via upload (#74) 2026-02-14 19:07:33 +03:00
Signor Pellegrino (from Citadel PC) 60fce4e3c5 Up hi3518ev200_lite_smartwares-cip-37210 2025-12-28 23:09:59 +03:00
elvoblinandGitHub 7703cd18eb Board ipg g3 wr (#71)
* add: ipg-g3-wr device

* update exclude lists

* wip: gk7202v300_lite_ipg-g3-wr
2025-11-05 19:14:38 +03:00
Signor Pellegrino (from Citadel PC) bbbb476c35 Update t31_lite_cmcc-hdc-51-a6-v10 link 2025-11-02 20:52:00 +03:00
Signor Pellegrino (from Citadel PC) 1a81ca78d9 Add Led crutch for cmc-hdc-51-a6-v11 2025-11-02 00:49:14 +03:00
Signor Pellegrino (from Citadel PC) 079cccb1ac Merge branch 'master' of github2:OpenIPC/builder 2025-11-01 17:05:33 +03:00
Signor Pellegrino (from Citadel PC) 652edce4a2 Update Vixand devices 2025-11-01 17:04:41 +03:00
Signor PellegrinoandGitHub cef8fd6d48 Rename gk7205v300_lite_vixand-ivg-g6s-w_defconfig to gk7205v300_lite_vixand-ivg-g6s_defconfig 2025-10-31 21:10:49 +03:00
Signor Pellegrino (from Citadel PC) 8d4c399de7 Add gk7205v300_lite_vixand-ivg-g6s 2025-10-31 19:40:32 +03:00
Signor Pellegrino (from Citadel PC) 83f1e088aa Merge branch 'master' of github2:OpenIPC/builder 2025-10-31 19:36:05 +03:00
viktorxda 42eea9633e temporarily exclude msposd from infinity6c 2025-10-31 00:35:39 +01:00
Signor Pellegrino (from Citadel PC) 7c87592428 Update Vixand configs 2025-09-25 20:42:50 +03:00
userandGitHub 434ecd893a backlight 14 to 16 and setenv soc (#67) 2025-09-25 20:27:12 +03:00
Signor PellegrinoandGitHub d97188a0a4 Update gpio.conf 2025-09-18 20:11:41 +03:00
Signor PellegrinoandGitHub f042794bd3 Enable audio settings in customizer.sh 2025-09-13 13:30:23 +03:00
Signor PellegrinoandGitHub 3245e9ed0c Add audio input channel configuration 2025-09-13 13:26:25 +03:00
Signor Pellegrino (from Citadel PC) e989403682 Update files for ssc30kd_lite_cmcc-ds-ytj5301 2025-09-10 19:28:09 +03:00