Main Content

Defining Classes to Hold Device-Specific Information

You might want to store more information about a device or format than the IDeviceInfo and IDeviceFormat objects allow. One way to do this is to define a new class that contains this additional information. Then, in your adaptor, instantiate an object of this class and store it in the adaptor data of the IDeviceInfo or IDeviceFormat objects. Using adaptor data is a good way to pass important information around inside your adaptor because the IDeviceInfo and IDeviceFormat objects are passed to other adaptor functions.

Using adaptor data is a three-step process:

  1. Define a class to hold the device or format information. See Defining a Device or Format Information Class for more information.

  2. Instantiate an object of this class in your adaptor. Use the constructor you define for your class.

  3. Store the object in the adaptor data of the IDeviceInfo or IDeviceFormat object. See Storing Adaptor Data for more information.

Defining a Device or Format Information Class

The class that you define to store additional device or format information must be derived from the IMAQinterface class. Subclassing the IMAQInterface class ensures that all memory deallocations for these classes are routed through the toolbox engine.

For an example of such a class, see the DemoDeviceFormat class in the demo adaptor, defined in the file DemoDeviceFormat.h.

Storing Adaptor Data

To store your device or format class in the adaptor data of an IDeviceInfo or IDeviceFormat object, use the setAdaptorData() member function of the object.

Note

The objects you store in adaptor data are automatically destroyed when the IDeviceInfo and IDeviceFormat objects are destroyed. Once you store an object in adaptor data, do not try to destroy the objects yourself.

The demo adaptor provides an example, defining a class to hold additional format information. This class, named DemoDeviceFormat, stores format information such as width, height, and color space. The following example, taken from the demo adaptor, shows how to instantiate an object of this derived class, assign values to the data members of the class, and then store the object in the adaptor data of the IDeviceFormat object.

DemoDeviceFormat* rgbFormatInfo = new DemoDeviceFormat();

rgbFormatInfo->setFormatWidth(demo::RGB_FORMAT_WIDTH);
rgbFormatInfo->setFormatHeight(demo::RGB_FORMAT_HEIGHT);
rgbFormatInfo->setFormatNumBands(demo::RGB_FORMAT_BANDS);
rgbFormatInfo->setFormatColorSpace(imaqkit::colorspaces::RGB);

deviceFormat->setAdaptorData(rgbFormatInfo);

Accessing Adaptor Data

To access the adaptor data stored in an IDeviceInfo or IDeviceFormat object, use the getAdaptorData() member function of the object.

The following example, taken from the demo adaptor, shows how to retrieve the adaptor data from the IDeviceFormat object. In the example, selectedFormat is a DemoDeviceFormat object. Note that because the getAdaptorData() member function returns a handle to the IMAQInterface class, you must cast the returned object to your defined class.

dynamic_cast<DemoDeviceFormat*>(selectedFormat->getAdaptorData());