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

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

  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 Solution в меню 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.