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

Каждый адаптер должен включать функцию 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() вашего адаптера должна предоставить механизму следующую информацию для каждого устройства:

  • ID устройства

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

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

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

    Примечание

    Можно опционально хранить дополнительную специфичную для устройства информацию в данных об адаптере объекта 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() вы задаете:

  • Назовите вас, хотят присвоить устройству

  • ID вы хотите присвоить устройству

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

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

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

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

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

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

hardwareInfo->addDevice(deviceInfo);

Хранение данных о формате

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

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

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

  • Назовите вас, хотят присвоить формату

  • ID вы хотите присвоить формату

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

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

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

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