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

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

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

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

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

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

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

Цель

IHardwareInfo

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

IDeviceInfo

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

IDeviceFormat

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

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

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

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

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

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

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

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

void getAvailHW(imaqkit::IHardwareInfo* hardwareInfo)

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

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

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

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

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

    Примечание

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

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

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

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

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

    2. Добавьте каждый объект формата устройства, который вы создаете, в IDeviceInfo объект.

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

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

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

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

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

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

Как аргументы к createDeviceInfo(), вы задаете:

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

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

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

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

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

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

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

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

hardwareInfo->addDevice(deviceInfo);

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

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

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

Как аргументы к createDeviceFormat(), вы задаете

  • Имя, которое вы хотите назначить формату

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

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

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

Можно использовать IDeviceFormat функции представителя для выполнения многих задач, таких как получение имени формата и идентификатора формата и определение, является ли формат форматом по умолчанию. Для получения дополнительной информации об этом классе см. документацию по API- Ссылки Image Acquisition Toolbox Adaptor Kit.

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

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

deviceInfo->addDeviceFormat(deviceFormat,true);

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

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

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

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

 deviceInfo->setDeviceFileSupport(true);

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

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

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

  1. Замените заглушку реализации getAvailHW() функция, созданная в Creating a Stub Adaptor, с этим кодом:

    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 поле. The 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 объекты, сопоставленные с конкретным устройством; см. Хранение информации о формате».