exponenta event banner

Указание информации об устройстве и формате

Каждый адаптер должен включать getAvailHW() функция. В этой функции на панель инструментов выводится информация об устройстве (или устройствах), которые в настоящее время подключены к системе пользователя. Адаптер может представлять одно конкретное устройство, несколько устройств, поддерживаемых конкретным производителем, или класс устройств. Например, панель инструментов включает адаптер для устройств Matrox, который поддерживает множество различных фреймграберов, предоставляемых этим поставщиком.

Когда пользователь вызывает imaqhwinfo чтобы узнать, какие устройства доступны в их системе, механизм панели инструментов вызывает адаптер getAvailHW() функция для получения этой информации. При реализации этой функции определяются имена, идентификаторы устройств и имена форматов, отображаемые на панели инструментов пользователям.

Этот раздел включает следующие темы

Использование объектов для хранения информации об устройстве и формате

Набор адаптеров содержит три класса для хранения информации об устройстве и формате:

Объект набора адаптеров

Цель

IHardwareInfo

Общий класс контейнера для информации об оборудовании

IDeviceInfo

Контейнер для информации об определенном устройстве

IDeviceFormat

Контейнер для информации о форматах, поддерживаемых определенным устройством

Когда механизм панели инструментов вызывает адаптер getAvailHW() функция передает адаптеру ручку IHardwareInfo объект.

Для каждого устройства, которое требуется сделать доступным через адаптер, необходимо создать IDeviceInfo а затем сохранить объект в IHardwareInfo объект. Для каждого формата, поддерживаемого устройством, необходимо создать IDeviceFormat а затем сохранить объект в IDeviceInfo объект.

На следующем рисунке показана взаимосвязь этих объектов набора адаптеров. На рисунке показаны IHardwareInfo объект, содержащий два IDeviceInfo объекты, но они могут содержать больше. Аналогично, каждый IDeviceInfo показан объект, содержащий два IDeviceFormat объекты, но он также может содержать больше.

Обратите внимание на рисунке, что оба IDeviceInfo и IDeviceFormat объекты содержат данные адаптера. Данные адаптера - это дополнительный способ хранения дополнительной информации об устройстве или формате в IDeviceInfo или IDeviceFormat объект. Дополнительные сведения см. в разделе Определение классов для хранения информации о конкретных устройствах.

Объекты набора адаптеров, используемые для хранения информации об устройстве и формате

Предлагаемый алгоритм

getAvailHW() функция принимает один аргумент: дескриптор для IHardwareInfo объект. Механизм панели инструментов создает это IHardwareInfo объект и передает дескриптор адаптеру, когда он вызывает адаптер getAvailHW() функция. getAvailHW() функция не возвращает значение.

void getAvailHW(imaqkit::IHardwareInfo* hardwareInfo)

Ваш адаптер getAvailHW() функция должна обеспечивать двигатель следующей информацией для каждого устройства:

  • Идентификатор устройства

  • Имя устройства

  • Форматы, поддерживаемые устройством, включая формат по умолчанию

  • Поддерживает ли устройство файлы конфигурации устройства (также называемые файлами камеры)

    Примечание

    Дополнительно можно сохранить дополнительную информацию об устройстве в данных адаптера IDeviceInfo объект или IDeviceFormat объект. Дополнительные сведения см. в разделе Определение классов для хранения информации о конкретных устройствах.

Ниже описаны шаги, обычно выполняемые getAvailHW() функция. На следующем рисунке этот алгоритм представлен в виде блок-схемы.

  1. Определите, какие устройства доступны через адаптер. Адаптеры обычно выполняют вызовы SDK устройства для получения этой информации.

  2. Для каждого найденного устройства создайте IDeviceInfo object - см. раздел Хранение информации об устройстве.

    1. Для каждого формата, поддерживаемого устройством, создайте IDeviceFormat object - см. раздел Хранение информации о формате.

    2. Добавление каждого создаваемого объекта формата устройства в IDeviceInfo объект.

  3. Добавить IDeviceInfo объект для IHardwareInfo объект передан вашему getAvailHW() с помощью механизма панели инструментов.

  4. Повторите эту процедуру для каждого устройства, доступного в системе пользователя.

    Предлагаемый алгоритм для функции getAvailHW ()

Хранение информации об устройстве

Вы сохраняете информацию об устройстве в IDeviceInfo объект. Чтобы создать этот объект, используйте createDeviceInfo() функция-член IHardwareInfo , как в следующем примере:

imaqkit::IDeviceInfo* deviceInfo = 
          hardwareInfo->createDeviceInfo(1,"MyDevice");

В качестве аргументов для createDeviceInfo(), вы указываете:

  • Имя, которое требуется назначить устройству

  • Идентификатор, который требуется назначить устройству

Можно указать любые значения для этих аргументов, но обратите внимание, что они видны пользователям панели инструментов в структуре, возвращаемой imaqhwinfo.

Для имени устройства укажите вектор символов, который легко идентифицирует устройство. Например, можно использовать номер модели производителя.

Идентификатор, указанный для устройства, должен быть уникальным, поскольку он идентифицирует устройство для адаптера. Поскольку индексирование MATLAB ® начинается с 1, начните нумерацию идентификаторов устройств с 1, а не с нуля. Устройство с идентификатором 1 является устройством по умолчанию для вашего адаптера.

IDeviceInfo созданный объект поддерживает функции-члены для выполнения многих задач, таких как создание, добавление и извлечение IDeviceFormat объекты, связанные с устройством, и указывающие, поддерживает ли устройство файлы конфигурации устройства (также известные как файлы камеры). Для получения дополнительной информации об этом классе, посмотрите Приобретение Изображения Справочная документация API Комплекта Адаптера Toolbox™.

Добавление объекта IDeviceInfo к объекту IHardureInfo

После создания IDeviceInfo , необходимо добавить его в IHardwareInfo объект, который обработчик передал вашему getAvailHW() функция. Используйте addDevice() функция-член IHardwareInfo , как в следующем примере:

hardwareInfo->addDevice(deviceInfo);

Хранение информации о формате

Информация о формате сохраняется в IDeviceFormat объект. Чтобы создать этот объект, используйте createDeviceFormat() функция-член функции IDeviceInfo , как в следующем примере:

imaqkit::IDeviceFormat* deviceFormat = 
            deviceInfo->createDeviceFormat(1,"RS170");

В качестве аргументов для createDeviceFormat(), вы указываете

  • Имя, которое требуется назначить формату

  • Идентификатор, который требуется присвоить формату

Для имени формата укажите символьный вектор, описывающий формат. Обратите внимание, что имя формата отображается для пользователей панели инструментов. Используйте имена, которые могут быть знакомы пользователям устройства, например имена, похожие на имена форматов, используемые производителем устройства.

Поскольку идентификатор не доступен пользователям, можно указать любое удобное значение. Например, если SDK устройства использует числовые идентификаторы для указания формата, используйте эти значения для идентификаторов формата.

Вы можете использовать IDeviceFormat функции-члены выполняют множество задач, например, извлекают имя формата и идентификатор формата и определяют, является ли формат форматом по умолчанию. Дополнительные сведения об этом классе см. в справочной документации по API-интерфейсу набора средств сбора изображений.

Добавление объекта IDeviceFormat к объекту IDeviceInfo

После создания IDeviceFormat добавьте его в IDeviceInfo объект, представляющий устройство. Используйте addDeviceFormat() функция-член IDeviceInfo , как в следующем примере:

deviceInfo->addDeviceFormat(deviceFormat,true);

Задание формата по умолчанию

При добавлении формата к IDeviceInfo объект, используется второй аргумент для addDeviceFormat() чтобы указать, следует ли использовать формат в качестве формата по умолчанию для устройства. imaqhwinfo функция возвращает имя формата по умолчанию в DefaultFormat поле. Чтобы задать формат по умолчанию, задайте для этого аргумента значение true.

Настройка поддержки файла конфигурации устройства (файла камеры)

Некоторые устройства используют файлы конфигурации устройств (также называемые файлами камеры) для настройки форматов и других свойств. Если устройство поддерживает файлы конфигурации устройства, создавать их не требуется IDeviceFormat объекты. Вместо этого используйте setDeviceFileSupport() функция-член IDeviceInfo объект, указывающий, что устройство поддерживает файлы конфигурации устройства, как в следующем примере:

 deviceInfo->setDeviceFileSupport(true);

Для этих устройств пользователи передают полный путь к файлу конфигурации устройства в качестве третьего аргумента videoinput вместо указания формата устройства. Составителям адаптеров не требуется выполнять какую-либо обработку файла конфигурации устройства; вы просто передаете имя файла устройству.

Пример: Предоставление информации об устройстве и формате

В следующем примере представлена простая реализация getAvailHW() функция, определяющая информацию для одного устройства с двумя форматами. Цель этого примера - показать, как создаются объекты, необходимые для хранения информации об устройстве и форматирования. При добавлении этого кода в mydeviceimaq адаптер, вы можете запустить imaqhwinfo('mydeviceimaq') для просмотра информации об устройстве.

  1. Замените заглушку реализации getAvailHW() функция, созданная в разделе Создание адаптера заглушки, со следующим кодом:

    void getAvailHW(imaqkit::IHardwareInfo* hardwareInfo)
    { 
    	// Create a Device Info object. 
    	imaqkit::IDeviceInfo* deviceInfo = 
                      hardwareInfo->createDeviceInfo(1,"MyDevice");
    
       // Create a Device Format object.
    	imaqkit::IDeviceFormat* deviceFormat = 
                      deviceInfo->createDeviceFormat(1,"RS170");
    
       // Add the format object to the Device object.
       // Specifying "true' makes this format the default format.
    	deviceInfo->addDeviceFormat(deviceFormat, true);
    
       // Create a second Device Format object. 
    	imaqkit::IDeviceFormat* deviceFormat2 = 
                       deviceInfo->createDeviceFormat(2,"PAL");
    
       // Add the second format object to the Device object.
      	deviceInfo->addDeviceFormat(deviceFormat2, false);
    
        // Add the device object to the hardware info object.
    	hardwareInfo->addDevice(deviceInfo);
    
    }
    
  2. Перестроить mydeviceimaq для создания новой DLL.

  3. Запустите программное обеспечение MATLAB и запустите imaqhwinfo функция, указывающая имя адаптера mydeviceimaq в качестве аргумента. Обратите внимание, как DeviceIDs поле и DeviceInfo поле структуры, возвращенное imaqhwinfo теперь содержат данные.

    dev = imaqhwinfo('mydeviceimaq')
    
    dev = 
    
           AdaptorDllName: 'C:\My_Adaptor\mydeviceimaq.dll'
        AdaptorDllVersion: '4.1 (R2011a)'
              AdaptorName: 'mydeviceimaq'
                DeviceIDs: {[1]}
               DeviceInfo: [1x1 struct]
    

    Чтобы просмотреть подробную информацию об устройстве, просмотрите структуру в DeviceInfo поле. DeviceInfo поле представляет собой массив структур, где каждая структура предоставляет подробную информацию о конкретном устройстве.

    dev_info = dev.DeviceInfo
    
    dev_info = 
    
              DefaultFormat: 'RS170'
        DeviceFileSupported: 0
                 DeviceName: 'MyDevice'
                   DeviceID: 1
          ObjectConstructor: 'videoinput('mydeviceimaq', 1)'
           SupportedFormats: {'PAL'  'RS170'}
    

    В следующей таблице описывается информация в каждом поле со ссылками на другие разделы, содержащие дополнительную информацию.

    Область

    Описание

    DefaultFormat

    Символьный вектор, определяющий формат по умолчанию, используемый устройством. Формат по умолчанию определяется при добавлении IDeviceFormat объект для IDeviceInfo объект; см. раздел Задание формата по умолчанию.

    DeviceFileSupported

    Логическое значение, указывающее, поддерживает ли устройство файлы конфигурации устройства (также называемые файлами камеры). Вы используете setDeviceFileSupport() функция-член IDeviceInfo объект для установки этого значения; см. раздел Настройка поддержки файла конфигурации устройства (файла камеры).

    DeviceName

    Символьный вектор, идентифицирующий конкретное устройство. Это значение определяется при создании IDeviceInfo объект; см. раздел Хранение информации об устройстве.

    DeviceID

    Числовое значение, однозначно определяющее конкретное устройство. Это значение определяется при создании IDeviceInfo объект; см. раздел Хранение информации об устройстве.

    ObjectConstructor

    Вектор символов, содержащий videoinput синтаксис функции, необходимый для создания экземпляра объекта для этого устройства. Механизм панели инструментов создает этот вектор символов.

    SupportedFormats

    Массив ячеек символьных векторов, идентифицирующих форматы, поддерживаемые этим устройством. Это значение определяется при создании IDeviceFormat объекты, связанные с конкретным устройством; см. раздел Хранение информации о формате.