O-3000 Camera Series
2.3
Software Interfaces
Note: The O-3000 cameras are no webcams. They do not support the UVC standard used in plug-
and-play consumer stuff. Instead the O-3000 cameras offer a simple and flexible interface, optimized
for industrial vision.
There are two different levels, allowing access to the camera. The more comfortable one is through
the open-source camera driver, available in the O-3000 install package. However, it is also possible
to access the camera directly through the USB endpoints, without using the driver. The second way
requires more programming effort but leads to a very slim and optimized solution. And of course the
open-source driver can be used as a guideline for the second way.
In any case, communication to the camera consists of two different paths, one for messages to and
from the camera and one to transport image data. The message path is used to send configuration
commands to camera and to read information from the camera, such as the software version, camera
settings, and so on.
2.3.1
Driver-Level Access
The O-3000 driver provides a simple and light-weight API to communicate with the O-3000 camera
series. It abstracts user applications from the USB internas and deals with low-level interfacing which
is tedious to implement and hard to debug if done the wrong way. The driver is written in plain C.
For use in Java, such as the O-3000 demo application, the JNI (Java Native Interface) wrapper may
be used. See [
4
] for more information.
2.3.2
USB-Level Access
Mainly for embedded projects, it is mandatory to be able to interact directly with the camera. On
the host side, that means interacting with the USB interface. You do not have to fully understand the
USB 2.0 standard, but some basic knowledge is essential. Each USB connection provides a set of
independent sub-channels, called pipes. The host-side end of the pipe are buffers, the device-side end
consists of so-called endpoints. Each endpoint is uniquely addressed by the USB device’s address
and the endpoint number. Endpoint 0 is reserved for device control; the other endpoints (up to 15 for
high-speed devices) are implemented application specific. An endpoint offers an IN channel (device
to host) and an OUT channel (host to device), although not both of them have to be implemented.
The O-3000 cameras utilise two USB endpoints in bulk mode for messages and for image data. Details
are explained in [
5
].
Page 7