Using the Ipevo Ziggi HD document camera from Linux

(Note: this page is starting out pretty terse, as I just want to get the facts out there; hopefully I’ll have time later to revise it and make it more readable.)

The Ipevo Ziggi HD presents itself as a compound USB device with three components: Video, Audio and HID (Human Interface Device class). The Video device is UVC-compliant, except (it turns out) for the auto-focus control, so we can access manual focussing, exposure and other controls using libwebcam and its command-line utility uvcdynctrl, and/or v4l2-ctl. It does require a minor patch to libwebcam.c – see sourceforge.net/p/linux-uvc/mailman/message/34192575/

The HID device relates to the buttons and slide-switch on the camera head, and also to the auto-focus function. It can be accessed using HIDAPI and its test GUI:

By default you will need to run the test GUI with sudo privilege in order to to access the USB device, but this can be fixed by creating a udev rule. Shamelessly copied and adapted from Jan Axelson’s excellent USB website:

“By default, applications that use the libusb-1.0 library require administrative privileges (sudo). To enable users to access a device via the libusb-1.0 library without administrative privileges, add a udev rule for the device. This rule specifies the USB device with Vendor ID = 1778h and Product ID = 0210h (Ipevo Ziggi-HD document camera) and sets the MODE parameter to grant read/write permissions for all users:

The rule should be on one line in the file. (Press Enter only at the end.) Place the rule in a file with a .rules extension (such as 81-libusb.rules) and save the file in /etc/udev/rules.d/ On the next device attachment or boot, users can run applications that use libusb-1.0 functions to read and write to the specified device.”

To trigger an auto-focus via USB, exactly as if the blue button on the camera head has been pressed, send a 5-byte HID Output Report containing the data 0x02 0x4F 0x00 0x00 0x00 (as shown in the screenshot above). The camera will immediately return a 5-byte Input Report containing 0x01 0x02 0x01 0x00 0x00, will carry out its auto-focus procedure, and then return a second Input Report containing 0x01 0x02 0x02 0x00 0x00.