96633d557761653f184e9c333b5f00f3f63632bb
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.
OpenIPC Builder
(based on Buildroot)
Specialized features
- Tweaker for automatically configuring devices according to profile (gpio, wifi, etc).
- Specialized storage location for customized firmware for well-known devices.
- QR code recognition to automatically connect to WiFi on your home network.
List of known and supported devices
Aoni EP01J05 T31L ? RTL8188FU_USB NOR_16M new
Azarton C1 T20X JXF23 RTL8189FS_SDIO NOR_16M done
Azarton C1 T31X GC2053 RTL8189FS_SDIO NOR_16M done
Babysense See HD IP206 SSC333 GC2053 RTL8188FU_USB NOR_16M done
Bathhouse HI3518EV300 ? RTL8188FU_USB NOR_8M research
Botslab C213 T23N SC3332 ATBM6012B_USB NOR_8M **INIT** - frozen
CCDCAM IM50Q01 SSC377QE IMX335 - NOR_16M done
ChinaTelecom DS-YTJ5301 SSC30KD GC2053 RTL8188FU_USB NOR_16M video-ok, wifi-no, motors-no
ChinaTelecom Y4H-50 T31L ? ? NOR_16M new
CMCC HDC-51 A5-V12 T21N SC2235 RTL8189FTV_SDIO NOR_16M done
CMCC HDC-51 A6-V10 T31L JXF37 RTL8188FU_USB NOR_16M done
CMCC HDC-51 A6-V11 T31L SC2332 RTL8188FU_USB NOR_16M done
Cootli CAMV0103 GK7202V300 SC223A SSV6355_USB NOR_8M in progress
CP Plus CP-UNC-TA21L2C GK7205V200 SC223A - NOR_16M video-ok, ir-cut-no, audio-no
Emax Wyvern Link SSC338Q IMX415 NOR_16M done
Foscam X5 SSC337DE GC4653 RTL8188FU_USB NOR_16M done
G.Craftsman GCA50 T31ZX GC4653 - NOR_16M done
EC37-T11 T20L SC2232 RTL8188FU_USB MOR_16M in progress
H3C TC2101 SSC337 JXQ03 RTL8188FU_USB NOR_16M done
HB-WIFI-Z6 v1.2 T10 JXH62 RTL8188EU_USB NOR_8M in progress
iFlytek XFP301-M T31ZX JXQ03 RTL8188FU_USB NOR_16 research
Imilab EC3 CMSXJ25A SSC325 GC2053 MT7603UN_? NOR_16M in progress
Dahua IPC-HFW1230SP-V2 SSC335DE GC2053 NOR_16M done
Imou IPC-C22E-S2-v2 SSC335DE GC2053 RTL8188FU_USB NOR_16M done
Imou IPC-C22EP-S2 SSC325DE SC2239 RTL8188FU_USB NAND testing stage 1
Imou IPC-C22EP-S2 ? SSC325DE SC2335 RTL8188FU_USB NAND wait sensor driver
Imou IPC-С22СP SSC325 SC2239 RTL8188FU_USB NOR_8M in progress
Jooan A6M-U T23N SC1346 ATBM6012B_USB NOR_8M **INIT** - in progress
Jooan A6M-U vB T23N SC1A4T ATBM6012B_USB NOR_8M **INIT** - in progress
Jooan Q3R-U T23N SC1346 ATBM6012B_USB NOR_8M **INIT** - in progress
JVS INGT10 GQS60EP T10A OV9750 - NOR_8M done
Lenovo Snowman 1080P HI3518EV200 SC2035 RTL8188EUS_USB NOR_16M in progress, LightSensor-no
LSC 3215672 T23N SC2331 ATBM6012B_USB NOR_8M **INIT** - progress
Meari Speed 6S SSC333 JXF37 RTL8188FU_USB NOR_16M video-yes, wifi-yes, motors-no
OpenIPC AIO Mario SSC338Q IMX335 RTL8812AU_USB NOR_16M done
OpenIPC AIO Thinker SSC338Q IMX335 NOR_16M done
OpenIPC AIO UltraSight SSC338Q IMX415 RTL8812AU_USB NOR_16M done
OpenIPC URLLC SSC338Q NOR_16M done
Qtech QVC-IPC-136W HI3518EV200 OV9732 RTL8188EU_USB NOR_16M done
Rostelecom IPC8232SWC-WE HI3516EV300 SP2305 RTL8188FU_USB NAND done
RunCam WiFiLink SSC338Q IMX415 NOR_16M done
RVi-1NCMW2028 (2.8) HI3516EV300 SC2330 RTL8188FU_USB NAND testing
Smartwares CIP-37210 HI3518EV200 OV9732 RTL8188FU_USB NOR_16M done
Smartwares CIP-37210AT T21N JXF37 RTL8188FU_USB NOR_16M done
Switcam HS303 v1 HI3518EV200 JXF22 RTL8188FU_USB NOR_16M done
Switcam HS303 v2 HI3518EV200 OV9732 RTL8188EU_USB NOR_16M done
Tiandy TC-C321N GK7205V200 OS02G10 - NOR_8M done
Tiandy TC-C321N v2 SSC337 SC2336P - NOR_8M done
Tiandy TC-C32QN GK7205V210 OS02G10 - NOR_8M done
TP-Link Kasa KC110 HI3518EV200 OV2735 RTL8188FU_USB NOR_16M ptz-yes, video-WIP (pending majestic MIPI fix)
TP-Link Tapo C110 v1 SSC335 SC3335 ATBM6032i_USB NOR_8M done
TP-Link Tapo C110 v1 SSC337 SC3335 SSW101B_USB NOR_8M done
TP-Link Tapo C110 v2 SSC333 SC3338 SSW101B_USB NOR_8M done
TP-Link Tapo C110 v26 SSC333 ? ? NOR_? done
TP-Link Tapo C310 v1 SSC325 SC3335 RTL8192EU_USB NOR_8M in progress
TP-Link Tapo C310 v2.20 SSC335 SC3338 RTL8192EU_USB NOR_8M testing
TP-Link Tapo TC60 V5 T23N WQ9001_? NOR_8M **INIT** - frozen
TP-Link Tapo TC70 V3 T31L SC2336 RTL8188FU_USB NOR_8M done
Trassir TR-D4121IR1 v2 HI3516CV200 AR0237 - NOR_16M done
Trassir TR-W2C1 v1 SSC325 GC2053 MT7601U_USB NOR_16M done
Trassir TR-W2C1 v2 SSC335 GC2053 MT7601U_USB NOR_16M done
Tuya GV7630-T31-PTZ T31L SC2336 ATBM6012B_USB NOR_8M in progress
Umea QC012 GK7102C_A MIS2003 RDA5995_USB MOR_8M wip
Uniview C1L-2WN-G SSC335DE OS02G10 RTL8188FU_USB NOR_16M done
Vixand IPC-1 GK7205V200 none EC200N_USB NOR_8M frozen
Vixand IPH-5-4G GK7205V200 SC2239 EC200N_USB NOR_8M frozen
Vixand IVG-G3S GK7205V210 IMX307 - NOR_16M in progress
Vixand IVG-G4F-A GK7205V210 SC223A - NOR_16M in progress
Vixand IVG-G4F-A-W GK7205V210 SC223A ATBM6032i_USB NOR_16M w/ext wifi board
Vixand IVG-G4H GK7205V210 MIS2008 - NOR_16M done
Vixand IVG-G6S GK7205V300 IMX335 - NOR_16M done
Vixand IVG-G6S-W GK7205V300 IMX335 ATBM6032i_USB NOR_16M w/ext wifi board
VStarcam C43S(B) SSC333 JXF37 MT7601U_USB NOR_16M in progress
VStarcam CS55 T31N GC2053 RTL8188FU_USB NOR_16M in progress
VStarcam C8622 T23N SC2336P AIC8800DL_? NOR_8M **INIT** - in progress
VStarcam C8892WIP HI3518EV200 AR0237 MT7601U_USB NOR_16M done
VStarcam C8896WIP GK7102C_A GC2033 RTL8189ES_SDIO NOR_8M wip
Wansview Q5 1080p T21Z OV2735B RTL8188FU_USB NOR_16M in progress
Wansview Q5 2K T31L SC2336 ATBM6031_SDIO NOR_8M done
Wyze V3 (WYZEC3B) T31X GC2053 RTL8189FS_SDIO NOR_16M done
X-06S v2.2 T21 JXH62 RTL8188FU_USB NOR_8M in progress
Xiaomi MJSXJ02HL HI3518EV300 JXF22 RTL8189FS_SDIO NOR_16M preparation
Xiaomi MJSXJ03HL T31N JXQ03 RTL8189FS_SDIO NOR_16M done
Xiaomi MJSXJ03HL T31N JXQ03P RTL8189FS_SDIO NOR_16M done
Xiaomi MJSXJ05HL T31L GC2053 ATBM6031_SDIO NOR_16M preparation
ZTE K540 T31X SC4336 ATBM6012B_USB NOR_16M done
4G Camera XG521 V1.2 GK7202V300 GC1054 EC800E-CN_USB NOR_8M done
XM IPG-G3-WR GK7202V300 JXH63 ATBM60321S_USB NOR_8M done
Compatibility and clones
Many devices sold in online stores are clones of original devices or, more often, devices adapted for the local national market.
Model names Our firmware
Dahua IPC-HFW1230SP-V3 => Dahua IPC-HFW1230SP-V2
Dahua IPC-C22C-LC => Imou IPC-С22CP
Imou IPC-С22EP-A => Imou IPC-С22CP
Imou IPC-F22AP => Imou IPC-С22CP
Switcam HS303 v3 => Qtech QVC-IPC-136W
Tiandy TC-C320N => Tiandy TC-C321N
Tiandy TC-C320N v2 => Tiandy TC-C321N v2
TP-Link Tapo C110 v2.20 => TP-Link Tapo C110 v2
TP-Link Tapo C200 v3.00 => TP-Link Tapo TC70 V3
Rostelecom IPC8232SWC-WE-B => Uniview C1L-2WN-G
Rostelecom IPC C22E-S2 v2 => Imou IPC-C22E-S2-v2
Uniview C1L-2WN-G-RU => Uniview C1L-2WN-G
Device setup
WiFi Settings
Run these commands and enjoy:
fw_setenv wlanssid 'OpenIPC'
fw_setenv wlanpass 'mypassword'
reboot
Requirements for registration of new devices
When adding new devices, please follow a few simple rules. The list of files to be added should be minimal, try not to store binary files, remember that all common files and configurations should be stored in the firmware repository. However, some list of files must be required.
processor_flavor_vendor-model-version/br-ext-chip-sigmastar/configs/processor_flavor_vendor-model-version_defconfig
processor_flavor_vendor-model-version/general/overlay/usr/share/openipc/customizer.sh
processor_flavor_vendor-model-version/general/scripts/excludes/processor_flavor.list
The file names contain variables with option names - flavor, model, processor, vendor, version
- flavor - firmware direction in the openipc system, by default try to use "lite" as much as possible
- model - official model name from the main device manufacturer
- processor - official name of the processor in the OpenIPC structure
- vendor - the name of the official equipment manufacturer; if there are several of them, a description is created
- version - usually this is an addition to the model, version or revision of hardware differences
Preparing and using the project
sudo apt-get update -y
sudo apt-get install -y automake autotools-dev bc build-essential curl fzf git libtool rsync \
unzip mc tree python-is-python3
git clone https://github.com/openipc/builder.git
cd builder
./builder.sh
Create firmware with built-in credentials
- Usage:
repack.sh [uboot] [firmware] [ssid] [pass]
sh repack.sh ssc337de ssc337de_ultimate_foscam-x5-nor router password
Existing problems
- On some devices NOR flash 8M is small, and the WiFi driver is very large and the QR scanner currently does not fit into the firmware
Additional information
Technical support and donations
Please support our project with donations or orders for development or maintenance. Thank you!
Releases
2
HiLink URLLC latest
Latest
Languages
Shell
57.9%
Python
31.4%
Makefile
6.1%
C
4.4%
Dockerfile
0.2%
