File 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