tcam-uvc-extension-loader

The tcam-uvc-extension-loader is our internal replacement for uvcdynctrl.

Its only purpose is to load UVC extension units for USB cameras.

The description files for the extension units are written in json (with comments allowed) and are a direct representation of the underlying struct that is submitted to the kernel.

For a description of the UVC driver mapping command, please refer to the kernel documentation.

Examples

The examples expect a default installation. If any paths have been changed some things may have to adjusted.

#
# /dev/v4l/by-id contains softlinks to the actual /dev/video0
tcam-uvc-extension-loader -f /usr/share/theimagingsource/tiscamera/uvc-extension/usb<X>.json -d /dev/v4l/by-id/usb-The_Imaging_Source_Europe_GmbH_<camera ident>-video-index0

Arguments

tcam-uvc-extension-loader has the following arguments:

-h, --help    Show help message and exit
-d, --device  Device that shall receive the extension unit. (Default: /dev/video0)
-f, --file    Extension unit file that shall be loaded (This flag is required)

Plug & Play

With a default installation, tcam-uvc-extension-loader is automatically called when a compatible device is attached. This is done via UDev rules.

What extension to use?

Currently the following associations are used for automatic loading. To see the association of a specific camera execute lsusb and use the the second part of the ID (199e:XXXX).

PID - json association

Device PID

Extension File

82XX

usb2.json

83XX

usb2.json

84XX

usb23.json

85XX

usb23.json

86XX

usb23.json

87XX

usb23.json

90XX

usb33.json

94XX

usb37.json

98XX

usb33.json

Extension Unit

The following description is a generic example showing what a file that is loadable by this program must look like.

C-Style comments are allowed.

{
    // execute `lsusb -vd <vid>:<pid>`
    // and search for `guidExtensionCode`
    // the guid from that field has to be entered here
    "guid": "0aba49de-5c0b-49d5-8f71-0be40f94a67a",

    // the list of mappings
    "mappings": [
        {
            // string containing the u32 id number that V4L2
            // will give when querying the device
            "id": "0x199e9999",
            // String containing the name. Maximum of 31 characters
            "name", "My property",
            // UVC control selector
            "selector": "0xB1",
            // type the UVC property has.
            // possible values are: unsigned, signed, raw, enum, booean, bitmask
            "uvc_type": "",
            // type the V4L2 property has.
            // possible values are: bitmask, boolean, button, integer, menu, string
            v4l2_type: "",
            // size of the UVC property in bit
            size_bits: 8,
            // size of the offset in bit.
            // It is possible to map multiple V4L2 onto the same UVC property field.
            // E.g. this offset allows access to single bit in a bitfield.
            offset_bits 0,

            // entries is an optional field.
            // It is a list of menu entries
            // That shall be mapped
            entries: [
                {
                    // integer value the V4L2 property shall set in UVC upon selection.
                    value: 999,
                    // String for the entry. Maximum of 31 characters
                    "entry": "My Menu Entry"
                }
            ]
        }
    ]
}

Exit status

The following return states are possible:

0   - Normal operation, everthing went ok.
1   - Device was not found.
3   - File for extension unit could not be loaded.
106 - A required argument is missing.