Introduction to GenICam

Official introduction:

GENiCAM_Flyer.pdf (1.3 MB)


GenICam (Generic Interface for Cameras) provides a universal programming interface for all types of cameras. It is applicable regardless of the camera’s hardware interface technology (such as GigE Vision, USB3 Vision, CoaXPress, Camera Link HS, Camera Link) or its implemented features.

For the same functionality, GenICam can utilize the same application programming interface (API) without the need for consideration for the specific hardware interface technology of the camera.


Modular Components

GenICam consists of the following modules:

1. GenApi (also known as the GenICam standard): API for configuring a camera

GenApi defines a mechanism for providing a universal API based on self-describing XML files in camera devices. The GenApi module addresses the issue of configuring the camera, with the main idea being to enable camera manufacturers to provide machine-readable manuals for their cameras. These manuals, known as camera description files, contain the information needed to automatically map the camera’s properties to registers.

For example, if a user wants to set Gain=42, using GenICam, generic software would read the camera’s description file, find that setting Gain to 42 means writing 0x2A to register location 0x0815, and simultaneously check whether the write is within the allowed range and if the camera has processed the Gain property.
Adding a new property to the camera is equivalent to extending the camera description file, making the new feature immediately available to GenICam-supported applications.

The diagram above illustrates the process of configuring the camera. An application needs access to the camera’s properties at the camera API level, as shown in the code:
Camera.Gain = 42;
The GenApi module translates this command into a series of calls to transport layer APIs, which provide register-level functions:
TransportLayer.WriteRegister(0x0815, 0x2A, 2); //address, data, length
Finally, the transport layer passes these calls to the camera interface.

The GenICam standard defines the syntax of camera description files and the semantics of the transport layer API.

The GenICam standard does not include the actual code for reading description files and translating properties into registers, nor does it include code for the transport layer. The GenApi section enables users to write their own camera description files. Reference manuals are available to guide users on how to use the GenApi module.

2. SFNC (Standard Features Naming Convention)

The Standard Features Naming Convention (SFNC) standardizes the usage of names, types, meanings, and device functionalities to ensure that devices from different manufacturers use the same names for the same functionalities. It standardizes and explains the names of over 300 common camera and application functionalities. To comply with the transport layers of GigEVision®, USB3 Vision™, or CoaXPress®, it also establishes the lowest level of mandatory functionalities to ensure system functionality.

A related standard is PFNC (Pixel Format Naming Convention), which standardizes and explains how to encode the pixel stream from a sensor so that software engineers know how to use it in their applications.

3. GenTL (Transport Layer): API for transport layer (TL) that allows grabbing images

The GenTL standardizes the programming interface for the transport layer (TL). It is a low-level API used to provide a standard interface for devices. It allows device enumeration, access to device registers, streaming of data, and provides asynchronous events. It has its own standard naming convention, GenTL SFNC.

4. GenDC (Data Container)

The GenDC standard defines a portable generic data container (GenDC) format. This allows devices to send any form of data (such as 1D, 2D, 3D, multispectral, metadata, etc.) in a transport layer protocol (TLP)-independent format. It enables a universal data container format to be shared across all TLP standards.

5. GenCP (Control Protocol)

This is a low-level standard that defines the packet format for device control. It is used by interface standards to avoid the need for reinventing control protocols for each new standard.

6. CLProtocol: API for interfacing Camera Link camera to GenAPI

Integrates GenICam with the interface technology for Camera Link devices.

7. FWUpdate

Standardized method for updating device firmware.