Чтобы создать тупиковую реализацию вашего класса адаптера, выполните эту процедуру:
Добавьте заголовочный файл C++ в адаптер проект C++. Этот заголовочный файл будет содержать определение вашего класса адаптера. Можно дать классу любое имя. Этот пример использует следующее соглашение о присвоении имен:
vendor_name + adaptor
В данном примере заголовочный файл, который содержит определение класса адаптера, называют MyDeviceAdaptor.h
.
Скопируйте следующее определение класса в заголовочный файл. Этот класс адаптера содержит все виртуальные функции, заданные абстрактным классом IAdaptor
.
#include "mwadaptorimaq.h" // required header class MyDeviceAdaptor : public imaqkit::IAdaptor { public: // Constructor and Destructor MyDeviceAdaptor(imaqkit::IEngine* engine, const imaqkit::IDeviceInfo* deviceInfo, const char* formatName); virtual ~MyDeviceAdaptor(); // Adaptor and Image Information Functions virtual const char* getDriverDescription() const; virtual const char* getDriverVersion() const; virtual int getMaxWidth() const; virtual int getMaxHeight() const; virtual int getNumberOfBands() const; virtual imaqkit::frametypes::FRAMETYPE getFrameType() const; // Image Acquisition Functions virtual bool openDevice(); virtual bool closeDevice(); virtual bool startCapture(); virtual bool stopCapture(); };
Добавьте исходный файл C++ в проект адаптера. Можно дать исходному файлу любое имя. Этот пример называет файл mydeviceadaptor.cpp
.
Скопируйте следующие тупиковые реализации всех виртуальных функций адаптера в исходный файл C++.
#include "MyDeviceAdaptor.h" #include "mwadaptorimaq.h" // Class constructor MyDeviceAdaptor::MyDeviceAdaptor(imaqkit::IEngine* engine, const, imaqkit::IDeviceInfo* deviceInfo, const char* formatName):imaqkit::IAdaptor(engine){ } // Class destructor MyDeviceAdaptor::~MyDeviceAdaptor(){ } // Device driver information functions const char* MyDeviceAdaptor::getDriverDescription() const{ return "MyDevice_Driver"; } const char* MyDeviceAdaptor::getDriverVersion() const { return "1.0.0"; } // Image data information functions int MyDeviceAdaptor::getMaxWidth() const { return 640;} int MyDeviceAdaptor::getMaxHeight() const { return 480;} int MyDeviceAdaptor::getNumberOfBands() const { return 1;} imaqkit::frametypes::FRAMETYPE MyDeviceAdaptor::getFrameType() const { return imaqkit::frametypes::MONO8; } // Image acquisition functions bool MyDeviceAdaptor::openDevice() {return true;} bool MyDeviceAdaptor::closeDevice(){return true;} bool MyDeviceAdaptor::startCapture(){return true;} bool MyDeviceAdaptor::stopCapture(){return true;}
Добавьте ссылку на свой заголовочный файл класса адаптера к файлу, содержащему экспортируемые функции, mydevice_exported_fcns.cpp
, что вы создали в Использовании Адаптера Экспортируемые Функции. Это необходимо, потому что createInstance()
экспортируемая функция инстанцирует объекта этого класса.
#include "MyDeviceAdaptor.h"
Отредактируйте тупиковые реализации функции createInstance()
, также в экспортируемом исходном файле функций, mydevice_exported_fcns.cpp
. Заставьте функцию инстанцировать объекта вашего класса адаптера, подсвеченного курсивом ниже. (В тупике это возвращает NULL
.)
void getDeviceAttributes(const imaqkit::IDeviceInfo* deviceInfo, const char* formatName, imaqkit::IPropFactory* devicePropFact, imaqkit::IVideoSourceInfo* sourceContainer, imaqkit::ITriggerInfo* hwTriggerInfo){ // Create a video source sourceContainer->addAdaptorSource("MyDeviceSource", 1); } imaqkit::IAdaptor* createInstance(imaqkit::IEngine* engine, imaqkit::IDeviceInfo* deviceInfo, char* formatName){ imaqkit::IAdaptor* adaptor = new MyDeviceAdaptor(engine,deviceInfo,formatName); return adaptor; }
Создайте DLL адаптера. Выберите опцию Решения для Сборки в меню Build.
Запустите MATLAB.
Вызовите функцию imaqhwinfo
. Отметьте, как адаптер, названный mydeviceimaq
, включен в список доступных адаптеров, возвращенных imaqhwinfo
. Если вы ранее не указали свой DLL адаптера, укажите свой адаптер с тулбоксом — смотрите Регистрацию Адаптера с Тулбоксом. Чтобы просмотреть более подробную информацию о вашем адаптере, вызовите imaqhwinfo
снова с этим синтаксисом:
dev_info = imaqhwinfo('mydeviceimaq');
Создайте объект ввода видео для адаптера mydeviceimaq
, с помощью функции videoinput
.
В то время как можно создать объект ввода видео с адаптером, вы не можете использовать его, чтобы получить видео от устройства. Необходимо реализовать функции приобретения класса адаптера, чтобы сделать это. Смотрите Данные изображения Получения для получения дополнительной информации.
vid = videoinput('mydeviceimaq',1) Summary of Video Input Object Using 'MyDevice'. Acquisition Source(s): MyDeviceSource is available. Acquisition Parameters: 'MyDeviceSource' is the current selected source. 10 frames per trigger using the selected source. '640x480' video data to be logged upon START. Grabbing first of every 1 frame(s). Log data to 'memory' on trigger. Trigger Parameters: 1 'immediate' trigger(s) on START. Status: Waiting for START. 0 frames acquired since starting. 0 frames available for GETDATA.