From ed42c67c523bbd53b5cc4aba647b784357e6f2c6 Mon Sep 17 00:00:00 2001 From: Rene Peinthor Date: Mon, 2 Nov 2026 23:41:36 +0100 Subject: [PATCH] Add ssc325_lite_heimvision-hm202 (Heimvision HM202 pan/tilt, GC2063, RTL8188FU) The Heimvision HM202, also sold as HM202A and as Heimlink HM202 (vendor firmware EYEPLUS / Closeli "CloudCam"): SSC325, 8 MB W25Q64JV NOR, GalaxyCore GC2063 (chip ID 0x2053, run as gc2053 with the infinity6 gc2053.bin), LB-Link BL-M8188FU3 (RTL8188FTV) on USB, two unipolar steppers behind a 74HC595, IR-cut, IR LEDs, speaker, reset button. Cloned from ssc325_lite_imou-c22cp (same SoC, flash and WiFi): - The defconfig adds the gc2053 sensor, gpiostep, majestic-af and reset-button. - /etc/wireless/usb: GPIO 17 powers the WiFi module (active low), and the SD driver drives the same pad as its card power switch, off at probe when no card is in. The script powers the module, re-probes the EHCI if the module is not there yet (it does not see a device that turns up after its probe), and loads 8188fu with its power saving off (it held packets for up to a beacon interval: 50-350 ms pings and a stalling stream). - /etc/network/interfaces.d/wlan0 adds bgscan to wpa_supplicant: the driver never leaves an access point by itself, and with two APs on one SSID a camera stayed on the far one after a dropout. - /etc/modules loads gpiostep in its 74HC595 mode (sck, si, rck on GPIO 53, 47, 52; pan on Q0-Q3, tilt on Q4-Q7); /etc/gpiostep.conf gives majestic-af the travel (520 x 180 steps, the vendor driver's bounds), directions, step delays, homing and steps per frame. - muxes.sh drives GPIO 16 low on every boot: high mutes the microphone, and left floating as an input it nearly mutes it. - customizer.sh: mirror and flip (the sensor sits upside down), IR-cut on 78/79, IR LEDs on 44, day/night by gain (the exposure flag never fires on this sensor), speaker amp on 62, PTZ via gpiostep, image.rotate 0 so the WebUI pad knows the orientation. - The excludes drop the NFS modules by full path: wildcard lines are no longer expanded, and without them the rootfs is 4 KB over its slot. - README: the device row, and HM202A and Heimlink HM202 in the clones table. --- README.md | 3 + .../ssc325_lite_heimvision-hm202_defconfig | 76 +++++++++++++++++++ .../general/overlay/etc/gpiostep.conf | 18 +++++ .../general/overlay/etc/modules | 3 + .../overlay/etc/network/interfaces.d/wlan0 | 10 +++ .../general/overlay/etc/wireless/usb | 24 ++++++ .../overlay/usr/share/openipc/customizer.sh | 47 ++++++++++++ .../overlay/usr/share/openipc/gpio.conf | 13 ++++ .../overlay/usr/share/openipc/muxes.sh | 6 ++ .../general/scripts/excludes/ssc325_lite.list | 5 ++ 10 files changed, 205 insertions(+) create mode 100644 devices/ssc325_lite_heimvision-hm202/br-ext-chip-sigmastar/configs/ssc325_lite_heimvision-hm202_defconfig create mode 100644 devices/ssc325_lite_heimvision-hm202/general/overlay/etc/gpiostep.conf create mode 100644 devices/ssc325_lite_heimvision-hm202/general/overlay/etc/modules create mode 100644 devices/ssc325_lite_heimvision-hm202/general/overlay/etc/network/interfaces.d/wlan0 create mode 100755 devices/ssc325_lite_heimvision-hm202/general/overlay/etc/wireless/usb create mode 100755 devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/customizer.sh create mode 100644 devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/gpio.conf create mode 100644 devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/muxes.sh create mode 100644 devices/ssc325_lite_heimvision-hm202/general/scripts/excludes/ssc325_lite.list diff --git a/README.md b/README.md index 6c5b5aa49..49b14fc8e 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ 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 +Heimvision HM202 SSC325 GC2063 RTL8188FU_USB NOR_8M video-ok, wifi-ok, ir-ok, pan/tilt-ok (74HC595) 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 @@ -132,6 +133,8 @@ Model names Our firmware Dahua IPC-HFW1230SP-V3 => Dahua IPC-HFW1230SP-V2 Dahua IPC-C22C-LC => Imou IPC-С22CP +Heimlink HM202 => Heimvision HM202 +Heimvision HM202A => Heimvision HM202 Imou IPC-С22EP-A => Imou IPC-С22CP Imou IPC-F22AP => Imou IPC-С22CP Switcam HS303 v3 => Qtech QVC-IPC-136W diff --git a/devices/ssc325_lite_heimvision-hm202/br-ext-chip-sigmastar/configs/ssc325_lite_heimvision-hm202_defconfig b/devices/ssc325_lite_heimvision-hm202/br-ext-chip-sigmastar/configs/ssc325_lite_heimvision-hm202_defconfig new file mode 100644 index 000000000..303f8de8e --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/br-ext-chip-sigmastar/configs/ssc325_lite_heimvision-hm202_defconfig @@ -0,0 +1,76 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-musleabihf" +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/infinity6-ssc009a.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y + +# Filesystem +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" +BR2_PACKAGE_EXFATPROGS=y +BR2_PACKAGE_UBOOT_TOOLS=y +BR2_PACKAGE_ZLIB=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +# BR2_PACKAGE_MOSQUITTO is not set +# BR2_PACKAGE_MOSQUITTO_BROKER is not set +BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y +BR2_PACKAGE_WIREGUARD_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y + +# OpenIPC +BR2_OPENIPC_SOC_VENDOR="sigmastar" +BR2_OPENIPC_SOC_MODEL="ssc325" +BR2_OPENIPC_SOC_FAMILY="infinity6" +BR2_OPENIPC_VARIANT="lite" +BR2_OPENIPC_FLASH_SIZE="8" +BR2_OPENIPC_SNS_MODEL="gc2053" + +# Packages +BR2_PACKAGE_DROPBEAR_OPENIPC=y +BR2_PACKAGE_EXFAT_OPENIPC=y +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBOGG_OPENIPC=y +BR2_PACKAGE_MAJESTIC_FONTS=y +BR2_PACKAGE_MAJESTIC_WEBUI=y +BR2_PACKAGE_MAJESTIC=y +BR2_PACKAGE_MBEDTLS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y +BR2_PACKAGE_QUIRC_OPENIPC=y +BR2_PACKAGE_RTL8188FU_OPENIPC=y +BR2_PACKAGE_SIGMASTAR_OSDRV_INFINITY6=y +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y +BR2_PACKAGE_GPIOSTEP_OPENIPC=y +BR2_PACKAGE_MAJESTIC_AF=y +BR2_PACKAGE_RESET_BUTTON=y diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/gpiostep.conf b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/gpiostep.conf new file mode 100644 index 000000000..d3e8b3ec2 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/gpiostep.conf @@ -0,0 +1,18 @@ +# Heimvision HM202 pan/tilt head, read by majestic-af's gpiostep actuator. The +# coils sit on a 74HC595 (gpiostep sr_gpios=53,47,52, see /etc/modules). +# Travel from one gearbox stop to the other, in gpiostep steps: the vendor +# driver's hmotor_upbound / vmotor_upbound. +pan_travel=520 +tilt_travel=180 +# Raw +steps turn the head left and down, in the sensor's own orientation (the +# WebUI maps its arrows through image.mirror/flip). +pan_left=1 +tilt_up=-1 +pan_delay_us=833 +tilt_delay_us=833 +# Find both stops once per boot, then centre the head. +home=1 +# Steps per frame width/height at 1920x1080, measured by image shift +# (about 13 px a pan step, 15 px a tilt step). +pan_frame_steps=148 +tilt_frame_steps=72 diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/modules b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/modules new file mode 100644 index 000000000..d17c378d6 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/modules @@ -0,0 +1,3 @@ +vfat +exfat +gpiostep sr_gpios=53,47,52 diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/network/interfaces.d/wlan0 b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/network/interfaces.d/wlan0 new file mode 100644 index 000000000..d88b32085 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/network/interfaces.d/wlan0 @@ -0,0 +1,10 @@ +# The HM202's antenna sits badly for some head positions and the RTL8188FU +# driver never leaves an access point on its own, so a camera can stay on a +# far one after a dropout: let wpa_supplicant scan below -60 dBm and roam. +# A copy of OpenIPC/firmware's general/overlay/etc/network/interfaces.d/wlan0 +# with the bgscan line added; keep it in step with that file. +iface wlan0 inet dhcp + pre-up wlan_conf "$(fw_printenv -n wlanssid)" "$(fw_printenv -n wlanpass)" > /tmp/wpa_supplicant.conf + pre-up sed -i 's/^\tscan_ssid=1$/\tscan_ssid=1\n\tbgscan="simple:30:-60:300"/' /tmp/wpa_supplicant.conf + pre-up wpa_supplicant -B -i wlan0 -D nl80211,wext -c /tmp/wpa_supplicant.conf + post-down killall -q wpa_supplicant diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/wireless/usb b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/wireless/usb new file mode 100755 index 000000000..abe4e71f6 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/etc/wireless/usb @@ -0,0 +1,24 @@ +#!/bin/sh + +# Heimvision HM202: LB-Link BL-M8188FU3 (RTL8188FTV) on USB. +if [ "$1" = "rtl8188fu-heimvision-hm202" ]; then + # GPIO 17 powers the module, active low. The SD driver also drives it as + # the card's power switch, hard-wired to that pad: off at probe when no + # card is in. The EHCI here does not see a device that turns up after its + # probe, so power the module and probe the controller again if it is not + # there. + gpio clear 17 > /dev/null + if [ ! -e /sys/bus/usb/devices/1-1 ]; then + sleep 3 + echo soc:Sstar-ehci-1 > /sys/bus/platform/drivers/Sstar-ehci-1/unbind + sleep 1 + echo soc:Sstar-ehci-1 > /sys/bus/platform/drivers/Sstar-ehci-1/bind + sleep 4 + fi + # The driver's own power saving holds every packet for up to a beacon + # interval: 50-350 ms pings and a stalling stream. iwconfig shows it off. + modprobe 8188fu rtw_power_mgnt=0 rtw_ips_mode=0 + exit 0 +fi + +exit 1 diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/customizer.sh b/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/customizer.sh new file mode 100755 index 000000000..fcff56c14 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/customizer.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# +# Perform basic settings on a known IP camera +# +# Heimvision HM202, also sold as HM202A and as Heimlink HM202 (vendor firmware +# EYEPLUS eyeplus_ipc_ms_002): SSC325, GalaxyCore GC2063 (ID 0x2053, driven as +# gc2053), 8 MB NOR, LB-Link BL-M8188FU3 USB WiFi, pan/tilt steppers on a +# 74HC595, speaker and microphone, reset button. +# +# +# Set custom upgrade url +# +fw_setenv upgrade 'https://github.com/OpenIPC/builder/releases/download/latest/ssc325_lite_heimvision-hm202-nor.tgz' +# +# +# Set wlan device and credentials if need +# +fw_setenv wlandev rtl8188fu-heimvision-hm202 +#fw_setenv wlanssid Router +#fw_setenv wlanpass 12345678 +# +# +# Set custom majestic settings +# +# The sensor sits upside down for a camera standing on its foot. +cli -s .image.mirror true +cli -s .image.flip true +# The WebUI's pan/tilt pad reads mirror, flip and rotate, and refuses every +# move while one of them is missing; this majestic has no rotate of its own. +cli -s .image.rotate 0 +# IR-cut: a pulse on 78 takes the filter out, on 79 puts it back. IR LEDs on 44. +cli -s .nightMode.irCutPin1 78 +cli -s .nightMode.irCutPin2 79 +cli -s .nightMode.backlightPin 44 +cli -s .nightMode.lightMonitor true +# The exposure-based trigger never fires here: the ISP never reports its +# exposure as maxed (isp_exposureismax stays 0 at 99 % and 64x gain in the +# dark). Switch on gain instead; 64x is the most this sensor gives. +cli -s .nightMode.autoNightGain 32 +cli -s .audio.speakerPin 62 +# Pan/tilt through majestic-af's gpiostep actuator (/ptz, ONVIF, WebUI). +cli -s .ptz.enabled true +cli -s .ptz.actuator gpiostep +fw_setenv ptz_control gpiostep +fw_setenv ptz_caps 'pan tilt' + +exit 0 diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/gpio.conf b/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/gpio.conf new file mode 100644 index 000000000..e9dd0a4d1 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/gpio.conf @@ -0,0 +1,13 @@ +alarm_in=-1 +alarm_out=-1 +button=66 +ircut1=78 +ircut2=79 +led1=-1 +led2=-1 +light_ir=44 +light_wl=-1 +light_sensor=-1 +mmc_pwr=-1 +speaker=62 +usb=17 diff --git a/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/muxes.sh b/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/muxes.sh new file mode 100644 index 000000000..13353c607 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/overlay/usr/share/openipc/muxes.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +### unmute the microphone ### +# GPIO 16 mutes it while high, and nearly so when left floating as an input. +# The vendor app drives it low once the mic is on. +gpio clear 16 diff --git a/devices/ssc325_lite_heimvision-hm202/general/scripts/excludes/ssc325_lite.list b/devices/ssc325_lite_heimvision-hm202/general/scripts/excludes/ssc325_lite.list new file mode 100644 index 000000000..f13ce0aa6 --- /dev/null +++ b/devices/ssc325_lite_heimvision-hm202/general/scripts/excludes/ssc325_lite.list @@ -0,0 +1,5 @@ +/lib/modules/4.9.84/kernel/fs/lockd/lockd.ko +/lib/modules/4.9.84/kernel/fs/nfs/nfs.ko +/lib/modules/4.9.84/kernel/fs/nfs/nfsv3.ko +/lib/modules/4.9.84/kernel/fs/nfs_common/grace.ko +/lib/modules/4.9.84/kernel/net/sunrpc/sunrpc.ko