Skip to content

Add ssc325_lite_heimvision-hm202 (Heimvision HM202 pan/tilt, GC2063, RTL8188FU) - #223

Draft
rp- wants to merge 1 commit into
OpenIPC:masterfrom
rp-:heimlink-hm202
Draft

rp- wants to merge 1 commit into
OpenIPC:masterfrom
rp-:heimlink-hm202

Conversation

@rp-

@rp- rp- commented Nov 3, 2026 •

Copy link
Copy Markdown

Device

Heimvision HM202 indoor pan/tilt camera, also sold as HM202A and as Heimlink HM202 (made by Shenzhen VanCorp
Technology Innovation; vendor firmware EYEPLUS / Closeli "CloudCam"):
SigmaStar SSC325, 64 MB DRAM, 8 MB Winbond W25Q64JV SPI NOR, GalaxyCore GC2063 (reports chip ID 0x2053 and runs
with the infinity6 gc2053 driver and IQ file), LB-Link BL-M8188FU3 (RTL8188FTV) USB WiFi, two unipolar steppers
behind a 74HC595, IR-cut filter, IR LEDs, speaker amplifier, microphone, reset button, microSD slot. Some units
have an Ethernet jack; the profile keeps OpenIPC's default dual mode.

Cloned from ssc325_lite_imou-c22cp (same SoC, flash and WiFi chip). The commit message lists what each file is
for; in short: the WiFi power/probe sequence, wpa_supplicant bgscan, gpiostep in its 74HC595 mode plus the
majestic-af gpiostep settings, a microphone unmute, the GPIO map, a first-boot customizer and an exclude list. The
board needs no device tree of its own: the generic infinity6-ssc009a-s01a one is used unchanged (the SD driver's
hold on GPIO 17, which also powers the WiFi module, is hard-wired in the driver, not taken from the device tree, so
the WiFi script handles it).

Depends on

This profile needs one change that belongs in another repository; it stays a draft until it is in:

Already in:

Hardware tested on

Two Heimvision HM202 units (SSC325 + GC2063 + W25Q64JV + RTL8188FU), flashed over UART from microSD: OpenIPC's
u-boot-ssc325-nor.bin, then kernel and rootfs built from this profile. Both now run an image built from firmware
master (with #2753, #2754 and the majestic-af bump in #2756), the 2026-11-03 majestic nightly, and linux#166 as a
local patch. One unit's flash has QE set (1-1-4 reads), the other's has it clear (falls back to 1-1-1).

Evidence

  • Boots from cold without an SD card on both units; WiFi associates and gets DHCP on every boot; ping 2-4 ms on a
    near access point with power saving off (50-350 ms with it on).
  • Sensor autodetected as gc2053, IQ file loads, 1920x1080 at 20 fps main stream plus a 640x360 sub stream, both
    pulled over RTSP by an NVR overnight; colours neutral under room light with the filter in.
  • IR-cut pulses on GPIO 78/79 give day colour / night grey; IR LEDs on GPIO 44 follow night mode; automatic
    day/night switches both ways on gain.
  • Pan/tilt: homing to both stops and centring on the first majestic start after boot (later restarts keep the
    position); moves from /ptz, the WebUI pad and ONVIF PTZ from the NVR, in the expected directions with mirror
    and flip set.
  • Reset button: a 5 s hold beeps once and reboots. A hold over 15 s runs firstboot: the camera comes back
    unclaimed (setup page), with the U-Boot environment, WiFi credentials included, unchanged.
  • Microphone: GPIO 16 is a mute switch (high mutes, floating nearly mutes, low passes the signal; the vendor app
    switches it the same way). Speech could not be verified on these two units: the capsule glue had crept over the
    membranes on both, and the vendor firmware hears no speech on them either.
  • Image size: rootfs 4984 KB of its 5120 KB slot.

…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.

@openipc-ai openipc-ai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Keeping this as a draft is right while linux#166, firmware#2753, firmware#2754 and majestic-af#42 are open. Once the firmware pair merges, firmware also needs a majestic-af: bump to … that carries #42. The profile follows ssc325_lite_imou-c22cp's layout, the customizer is the run-once kind, and 4984/5120 KB leaves room.

Two small things:

  • etc/init.d/S94hm202-mic exists only to run gpio clear 16. /usr/share/openipc/muxes.sh is the per-device seam for that: S30customizer runs it on every boot, and the profile you cloned already ships one. Moving the line there drops an init script and keeps the board's pin setup in one place.
  • etc/network/interfaces.d/wlan0 is firmware's file plus the bgscan sed. That's fine, but it is now a fork of a shared file. If firmware's wlan0 changes, this one won't follow, so a comment naming the upstream file it copies would help the next person.

Thanks for being explicit that the microphone and the direct-GPIO gpiostep path could not be verified.

@openipc-ai

Copy link
Copy Markdown
Contributor

Both firmware dependencies are in master: OpenIPC/firmware#2753 (gpiostep 74HC595 mode, 4f08ef28a) and OpenIPC/firmware#2754 (reset-button, 552d10098). Two dependencies are left:

Once those land, take this out of draft.

@rp- rp- changed the title Add ssc325_lite_heimlink-hm202 (Heimlink HM202 pan/tilt, GC2063, RTL8188FU) Add ssc325_lite_heimlink-hm202 (Heimvision HM202A pan/tilt, GC2063, RTL8188FU) Nov 3, 2026
@rp- rp- changed the title Add ssc325_lite_heimlink-hm202 (Heimvision HM202A pan/tilt, GC2063, RTL8188FU) Add ssc325_lite_heimvision-hm202 (Heimvision HM202 pan/tilt, GC2063, RTL8188FU) Nov 3, 2026
@rp-

rp- commented Nov 3, 2026

Copy link
Copy Markdown
Author

Update: both firmware dependencies are in, and OpenIPC/majestic-af#42 was closed in favour of the core fix in OpenIPC/majestic#363, so the only open dependency is OpenIPC/linux#166; the description is updated. Your two suggestions are in as well: muxes.sh instead of S94hm202-mic, and a comment naming firmware's wlan0.

I've also renamed the profile to ssc325_lite_heimvision-hm202: the sticker on the camera says HM202 without a brand, and it is sold as HeimVision (made by Shenzhen VanCorp Technology Innovation). The README lists HM202A and Heimlink HM202 in the clones table, and the WiFi profile id and the upgrade URL follow the new name.

I rebuilt the image from current firmware master (ed19b25, with #2753, #2754 and the majestic-af bump in #2756), the 2026-11-03 nightly (master+43427ff) and linux#166 as a local patch, and moved both units to it: the plugin loads without any fallback, the head homes and moves, reset-button watches GPIO 66, muxes.sh unmutes the microphone, and bgscan is in the wpa_supplicant config. The unit whose flash has QE clear falls back to FAST_READ; the other reads in quad mode.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants