Создание тупиковой реализации класса адаптера

Чтобы создать тупиковую реализацию вашего класса адаптера, выполните эту процедуру:

  1. Добавьте заголовочный файл C++ в адаптер проект C++. Этот заголовочный файл будет содержать определение вашего класса адаптера. Можно дать классу любое имя. Этот пример использует следующее соглашение о присвоении имен:

    vendor_name + adaptor
    

    В данном примере заголовочный файл, который содержит определение класса адаптера, называют MyDeviceAdaptor.h.

  2. Скопируйте следующее определение класса в заголовочный файл. Этот класс адаптера содержит все виртуальные функции, заданные абстрактным классом 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();
    
    };
    
  3. Добавьте исходный файл C++ в проект адаптера. Можно дать исходному файлу любое имя. Этот пример называет файл mydeviceadaptor.cpp.

  4. Скопируйте следующие тупиковые реализации всех виртуальных функций адаптера в исходный файл 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;}
    
  5. Добавьте ссылку на свой заголовочный файл класса адаптера к файлу, содержащему экспортируемые функции, mydevice_exported_fcns.cpp, что вы создали в Использовании Адаптера Экспортируемые Функции. Это необходимо, потому что createInstance() экспортируемая функция инстанцирует объекта этого класса.

    #include "MyDeviceAdaptor.h"
    
  6. Отредактируйте тупиковые реализации функции 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;
    }
    
  7. Создайте DLL адаптера. Выберите опцию Решения для Сборки в меню Build.

  8. Запустите MATLAB.

  9. Вызовите функцию imaqhwinfo. Отметьте, как адаптер, названный mydeviceimaq, включен в список доступных адаптеров, возвращенных imaqhwinfo. Если вы ранее не указали свой DLL адаптера, укажите свой адаптер с тулбоксом — смотрите Регистрацию Адаптера с Тулбоксом. Чтобы просмотреть более подробную информацию о вашем адаптере, вызовите imaqhwinfo снова с этим синтаксисом:

    dev_info = imaqhwinfo('mydeviceimaq');
    
  10. Создайте объект ввода видео для адаптера 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.