/ipctool

Simple utility to check hardware information for IP cameras

Primary LanguageCMIT LicenseMIT

IPC chip information

Build CI status GitHub repo size GitHub issues GitHub pull requests License

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


Supporting

If you like our work, please consider supporting us on Opencollective or PayPal or YooMoney.

Backers Backers

Backers

Thanks a lot !!!

OpenCollective donate button PayPal donate button YooMoney donate button


Download

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.

Alternative launch methods

  • 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 uget binary into echo/printf chunks and deploy to /tmp partition. Read more in documentation

Usage

# ipctool
    available options:

	--chip_id
	--sensor_id
	--temp

	--dmesg
	--printenv
	--setenv key=value

	[--skip-env] [--force] --restore
	--help

    (or run without params to get full available information)

When run without parameters utility produces YAML with all hardware-specific information about given IP-camera or DVR:

---
board:
  vendor: Xiongmai
  model: 50H20L
  cloudId: 3beae2b40d84f889
chip:
  vendor: HiSilicon
  model: 3516CV300
ethernet:
  mac: "00:12:89:12:88:e1"
  u-mdio-phyaddr: 1
  phy-id: 0x001cc816
  d-mdio-phyaddr: 0
rom:
  - type: nor
    block: 64K
    chip:
      name: "w25q128"
      id: 0xef4018
    partitions:
      - name: boot
        size: 0x30000
        sha1: 7a7a83e9
        contains:
          - name: xmcrypto
            offset: 0x1fc00
          - name: uboot-env
            offset: 0x20000
      - name: romfs
        size: 0x2e0000
        path: /,squashfs
        sha1: 62529dab
      - name: user
        size: 0x300000
        path: /usr,squashfs
        sha1: cbb7e9ca
      - name: web
        size: 0x160000
        path: /mnt/custom/data/Fonts,squashfs
        sha1: 48140b3b
      - name: custom
        size: 0x40000
        path: /mnt/custom,cramfs
        sha1: fb72a5f5
      - name: mtd
        size: 0x50000
        path: /mnt/mtd,jffs2,rw
    size: 8M
    addr-mode: 3-byte
ram:
  total: 128M
  media: 72M
firmware:
  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.2
  sdk: "Hi3516CV300_MPP_V1.0.0.0 B010 Release (Jun 22 2018, 19:22:22)"
  god-app: /usr/bin/Sofia
sensors:
- vendor: Sony
  model: IMX291
  control:
    bus: 0
    type: i2c
    addr: 0x34
  params:
    bitness: 12
    databus: LVDS 4 ch
    fps: 30
  data:
    type: LVDS
    lane-id:
    - 0
    - 1
    - 2
    - 3
    lvds-wdr-en: 0
    lvds-wdr-mode: 0
    lvds-wdr-num: 0
    raw-data-type: RAW_DATA_12BIT
    sync-mode: LVDS_SYNC_MODE_SAV
    data-endian: LVDS_ENDIAN_BIG
    sync-code-endian: LVDS_ENDIAN_BIG
    sync-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, 0x9d0
  clock: 37.125MHz

In your own scripts

  • Determine chip id:

    # ipctool --chip_id
    hi3516cv300
  • Determine sensor model and control line:

    # ipctool --sensor_id
    imx291_i2c
  • Get temperature from chip's internal sensor (not all devices supported):

    # ipctool --temp
    50.69

As backup/restore tool

  • 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

As reverse engineering tool

  • Drop-in replacement of dmesg command:

    # ipctool --dmesg
  • Drop-in replacement of fw_printenv and fw_setenv commands:

    # ipctool --printenv | grep bootargs
    # ipctool --setenv bootargs="mem=\${osmem} mtdparts=hi_sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)"

Supported SoCs

Tested on:

Manufacturer Models
HiSilicon Hi3516CV100/200/300, Hi3516EV100/200/300, Hi3516DV300
SigmaStar SSC335
Xiongmai XM510, XM530, XM550

Please test on your device to help us extend the list.

Supported boards

Tested on:

Manufacturer Models
Xiongmai Various models
Hankvision V6202IR-IMX327
Ruision RS-H649F-A0, RS-H651JAI-AO, RS-H656S-AO

Supported sensors

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

Please test on your device to help us extend the list.