This basic concept belongs to Maxim Chertov (thank you for your original utility) and Nikita Orlov (for cute YAML format for describing hardware). A warm welcome also to Igor Zalatov (for suggestions for new features and describing ways to do them).
Use the link
to download latest build (even directly to your camera). The build uses musl
C library to work on vast majority of hardware.
Public NFS server (in case your camera firmware includes NFS client support, proven to work on XM cameras):
$ mount -o nolock 95.217.179.189:/srv/ro /utils/ $ /utils/ipctool
Using telnet/console and uget utility: basically convert small
ugetbinary intoecho/printfchunks and deploy to/tmppartition. Read more in documentationTFTP, since some cameras have tftp clients and/or servers by default. Assuming you have the
ipctool-mips32binary ready under/directory/to/serve:On a desktop computer:
$ pip install ptftpd $ ptftpd -p 6969 en0 /directory/to/serveOn the camera:
# tftp -r /directory/to/serve/ipctool-mips32 -g 192.168.1.107 6969 46% |************** | 61952 0:00:01 ETA
# ipctool -hWhere: -c, --chip-name read chip name -s, --sensor-name read sensor model and control line -t, --temp read chip temperature (where supported) backup <filename> save backup into a file restore [mac|filename] restore from backup (cloud-based or local file) [-s, --skip-env] skip environment [-f, --force] enforce upgrade <bundle> upgrade to OpenIPC firmware (experimental feature, use only on cameras with UART) [-f, --force] enforce printenv drop-in replacement for fw_printenv setenv <key> <value> drop-in replacement for fw_setenv dmesg drop-in replacement for dmesg i2cget <device address> <register> spiget <register> read data from I2C/SPI device i2cset <device address> <register> <new value> spiset <register> <new value> write a value to I2C/SPI device i2cdump [--script] <device address> <from register> <to register> spidump [--script] <from register> <to register> dump data from I2C/SPI device reginfo [--script] dump current status of pinmux registers gpio (scan|mux) GPIO utilities trace [--skip=usleep] <full/path/to/executable> [program arguments] dump original firmware calls and data structures -h, --help this helpWhen run without parameters utility produces YAML with all hardware-specific information about given IP-camera or DVR:
---
board:
vendor: Xiongmaimodel: 50H20LcloudId: 3beae2b40d84f889chip:
vendor: HiSiliconmodel: 3516CV300ethernet:
mac: "00:12:89:12:88:e1"u-mdio-phyaddr: 1phy-id: 0x001cc816d-mdio-phyaddr: 0rom:
- type: norblock: 64Kchip:
name: "w25q128"id: 0xef4018partitions:
- name: bootsize: 0x30000sha1: 7a7a83e9contains:
- name: xmcryptooffset: 0x1fc00
- name: uboot-envoffset: 0x20000
- name: romfssize: 0x2e0000path: /,squashfssha1: 62529dab
- name: usersize: 0x300000path: /usr,squashfssha1: cbb7e9ca
- name: websize: 0x160000path: /mnt/custom/data/Fonts,squashfssha1: 48140b3b
- name: customsize: 0x40000path: /mnt/custom,cramfssha1: fb72a5f5
- name: mtdsize: 0x50000path: /mnt/mtd,jffs2,rwsize: 8Maddr-mode: 3-byteram:
total: 128Mmedia: 72Mfirmware:
u-boot: "2010.06-svn1098 (Jun 11 2018 - 13:17:42)"kernel: "3.18.20 (Thu Jul 5 14:44:19 CST 2018)"toolchain: gcc version 4.9.4 20150629 (prerelease) (Hisilicon_v500_20170922) libc: uClibc 0.9.33.2sdk: "Hi3516CV300_MPP_V1.0.0.0 B010 Release (Jun 22 2018, 19:22:22)"main-app: /usr/bin/Sofiasensors:
- vendor: Sonymodel: IMX291control:
bus: 0type: i2caddr: 0x34params:
bitness: 12databus: LVDS 4 chfps: 30data:
type: LVDSlane-id:
- 0
- 1
- 2
- 3lvds-wdr-en: 0lvds-wdr-mode: 0lvds-wdr-num: 0raw-data-type: RAW_DATA_12BITsync-mode: LVDS_SYNC_MODE_SAVdata-endian: LVDS_ENDIAN_BIGsync-code-endian: LVDS_ENDIAN_BIGsync-code:
- - 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- - 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- - 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- - 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0
- 0xab0, 0xb60, 0x800, 0x9d0clock: 37.125MHzDetermine chip name:
# ipctool --chip-namehi3516cv300
Determine sensor model and control line:
# ipctool --sensor-nameimx291_i2c
Get temperature from chip's internal sensor (not all devices supported):
# ipctool --temp50.69
Save full backup with YAML metadata into specific file:
# mount -o nolock mynfsserver:/srv /var/utils # ipctool backup /var/utils/mybackup-00:12:17:83:d6:39 # sync
Drop-in replacement of
dmesgcommand:# ipctool dmesgDrop-in replacement of
fw_printenvandfw_setenvcommands:# ipctool printenv | grep bootargs # ipctool setenv bootargs "mem=\${osmem} mtdparts=hi_sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)"
Drop-in replacement of
i2cget,i2csetandi2cdumpcommands fromi2c-toolspackage:# ipctool i2cget 0x34 0x3000 # ipctool i2cset 0x34 0x3000 1 # ipctool i2cdump 0x34 0x3000 0x31ff # ipctool i2cdump --script 0x34 0x3000 0x31ff
The same approach is to manipulate SPI sensor registers:
# ipctool spiget 0x200 # ipctool spiset 0x200 1 # ipctool spidump 0x200 0x300 # ipctool spidump --script 0x200 0x300
Dump the state of pinmux registers in human- and machine-readable format or shell script ready to be applied on another system:
# ipctool reginfo # ipctool --script reginfo
Advanced replacement of
strace:# ipctool trace /usr/bin/Sofia
Tested on:
| Manufacturer | Models |
|---|---|
| HiSilicon | Hi3516CV100/200/300, Hi3516EV100/200/300, Hi3516DV300, Hi3518EV100 |
| SigmaStar | SSC335 |
| Xiongmai | XM510, XM530, XM550 |
| Rockchip | RV1109 |
Please test on your device to help us extend the list.
Tested on:
| Manufacturer | Models |
|---|---|
| Xiongmai | Various models |
| Hankvision | V6202IR-IMX327 |
| Ruision | RS-H649F-A0, RS-H651JAI-AO, RS-H656S-AO |
| TP-Link | NC210 |
Tested on:
| Manufacturer | Models |
|---|---|
| Silicon Optronics, Inc. | JX-F22, JX-F23, JX-F37, JX-H62, JX-H65, JX-K05 |
| Sony | IMX224, IMX290, IMX291, IMX307, IMX322, IMX323, IMX327, IMX335, IMX415 |
| ON Semiconductor | AR0130, AR0237 |
| SmartSens | SC2135, SC2232, SC2235, SC2235P, SC2239, SC2315e (SC307E, SC4239Р), SC335E (SC5300) |
| OmniVision | OV9712 |
| GalaxyCore | GC2053 |
Please test on your device to help us extend the list.
OpenIPC offers two levels of support.
- Free support through the community (via chat).
- Paid commercial support (from the team of developers).
Please consider subscribing for paid commercial support if you intend to use our product for business. As a paid customer, you will get technical support and maintenance services directly from our skilled team. Your bug reports and feature requests will get prioritized attention and expedited solutions. It's a win-win strategy for both parties, that would contribute to the stability your business, and help core developers to work on the project full-time.
If you have any specific questions concerning our project, feel free to contact us.
If you like what we do, and willing to intensify the development, please consider participating.
You can improve existing code and send us patches. You can add new features missing from our code.
You can help us to write a better documentation, proofread and correct our websites.
You can just donate some money to cover the cost of development and long-term maintaining of what we believe is going to be the most stable, flexible, and open IP Network Camera Framework for users like yourself.
You can make a financial contribution to the project at Open Collective.
Thank you.

