Skip to content

File camera.h

File List > src > camera.h

Go to the documentation of this file

/*******************************************************
 * Author: Intelligent Medical Systems
 * License: see LICENSE.md file
 *******************************************************/

#ifndef XILENS_CAMERA_H
#define XILENS_CAMERA_H

#include <boost/thread.hpp>
#include <xiApi.h>

#include "constants.h"
#include "xiAPIWrapper.h"

class CameraFamily
{
  protected:
    HANDLE *m_cameraHandle;

    boost::mutex m_mutexCameraTemperature;

  public:
    virtual ~CameraFamily() = default;

    explicit CameraFamily(HANDLE *handle) : m_cameraHandle(handle)
    {
    }

    std::shared_ptr<XiAPIWrapper> m_apiWrapper;

    QMap<QString, float> m_cameraTemperature = {
        {CHIP_TEMP, 0.},
        {HOUSE_TEMP, 0.},
        {HOUSE_BACK_TEMP, 0.},
        {SENSOR_BOARD_TEMP, 0.},
    };

    virtual void UpdateCameraTemperature();

    /*
     * Queries camera temperature
     */
    QMap<QString, float> GetCameraTemperature();
};

class XiSpecFamily : public CameraFamily
{
  private:
    HANDLE *m_cameraHandle;

  public:
    explicit XiSpecFamily(HANDLE *handle) : CameraFamily(handle), m_cameraHandle(handle)
    {
    }

    void UpdateCameraTemperature() override;
};

class XiCFamily : public CameraFamily
{
  private:
    HANDLE *m_cameraHandle;

  public:
    explicit XiCFamily(HANDLE *handle) : CameraFamily(handle), m_cameraHandle(handle)
    {
    }

    void UpdateCameraTemperature() override;
};

class XiQFamily : public CameraFamily
{
  private:
    HANDLE *m_cameraHandle;

  public:
    explicit XiQFamily(HANDLE *handle) : CameraFamily(handle), m_cameraHandle(handle)
    {
    }

    void UpdateCameraTemperature() override;
};

using XiBFamily = XiCFamily;

using XiB64Family = XiCFamily;

using XiRAYFamily = XiCFamily;

using XiXFamily = XiCFamily;

class Camera
{
  protected:
    HANDLE *m_cameraHandle;

  public:
    virtual ~Camera() = default;

    Camera(std::unique_ptr<CameraFamily> *family, HANDLE *handle) : m_cameraFamily(family), m_cameraHandle(handle)
    {
    }

    std::shared_ptr<XiAPIWrapper> m_apiWrapper;

    std::unique_ptr<CameraFamily> *m_cameraFamily;

    virtual int InitializeCamera();

    virtual int InitializeCameraCommonParameters();

    void SetExposure(int exp) const;

    void SetExposureMs(int exp) const;

    int GetExposure() const;

    int GetExposureMs() const;

    void AutoExposure(bool on) const;
};

class SpectralCamera : public Camera
{
  public:
    SpectralCamera(std::unique_ptr<CameraFamily> *family, HANDLE *handle) : Camera(family, handle)
    {
    }

    int InitializeCamera() override;
};

class GrayCamera : public Camera
{
  public:
    GrayCamera(std::unique_ptr<CameraFamily> *family, HANDLE *handle) : Camera(family, handle)
    {
    }

    int InitializeCamera() override;
};

class RGBCamera : public Camera
{
  public:
    RGBCamera(std::unique_ptr<CameraFamily> *family, HANDLE *handle) : Camera(family, handle)
    {
    }

    int InitializeCamera() override;
};

#endif // XILENS_CAMERA_H