#pragma once

#include <QObject>
/******************************************************
* 文件名   : SensorBase.cpp
* 类名     : 设备基类
* 作用     :
* 作者     : xin
* 邮箱     : renlixin@iris-rs.cn
* 日期     : 2021-1-15
********************************************************
*                                                      *
*                           _ooOoo_                    *
*                          o8888888o                   *
*                          88" . "88                   *
*                          (| -_- |)                   *
*                          O\  =  /O                   *
*                       ____/`---'\____                *
*                     .'  \\|     |//  `.              *
*                    /  \\|||  :  |||//  \             *
*                   /  _||||| -:- |||||-  \            *
*                   |   | \\\  -  /// |   |            *
*                   | \_|  ''\---/''  |   |            *
*                   \  .-\__  `-`  ___/-. /            *
*                 ___`. .'  /--.--\  `. . __           *
*              ."" '<  `.___\_<|>_/___.'  >'"".        *
*             | | :  `- \`.;`\ _ /`;.`/ - ` : | |      *
*             \  \ `-.   \_ __\ /__ _/   .-` /  /      *
*        ======`-.____`-.___\_____/___.-`____.-'====== *
*                           `=---='                    *
*        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *
*                 佛祖保佑       长发永存              *
*                                                      *
********************************************************/
///一组数据 可以delete
enum emDataType
{
	DNVALUE=1,
	REFVALUE=2,
	DARKNESS=3
};
struct STROnePlot
{
	long BandNum;
	float *Plot;
	bool isInit;
	float temp;
	float shutter;
	QStringList wavelenthlist;
	long maxDNvalue;
	bool hasDarkCorrect;
	emDataType DataType;
	STROnePlot() {
		BandNum = 0;
		isInit = false;     
		hasDarkCorrect = false;
		Plot = nullptr;
		DataType = DNVALUE;
	}
	~STROnePlot() {
		if (!isInit)
		{
			delete[] Plot;
			isInit = false;
		}

	}

};
struct STRSensorInfo
{
	QString SensorName;
	long maxValue;
	long BandNum;
	QString WavelenthStr;
	QStringList wavelenthlist;
	//double *wavelenth;
	bool isSensorInit;
	QString serialnumber;

};

class SensorBase : public QObject
{
	Q_OBJECT

public:
	 SensorBase();
	virtual ~SensorBase();
	//************************************
	// Method:    初始化传感器
	// FullName:  SensorBase::initSensor
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	//************************************
	virtual bool initSensor(int id=0)=0;
	//************************************
	// Method:    Settingshuttertime 设置积分时间
	// FullName:  SensorBase::Settingshuttertime
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: int msc
	//************************************
	virtual void Settingshuttertime(float msc)=0;
	//************************************
	// Method:    SettingTemprature 设置温度
	// FullName:  SensorBase::SettingTemprature
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: float temp
	//************************************
	virtual void SettingTemprature(float temp)=0;
	virtual float GettingTempratrue() = 0;
	virtual STRSensorInfo GetSensorInfo()=0;
	virtual void SettingShutterOpen(bool isopen)=0;
	virtual void SettingSwitchShutter(bool isright)=0;
	virtual void GetOnePlot(STROnePlot &OnePlot,bool Dark=false)=0;
	virtual void CloseSensor()=0;

	virtual void GetOneDark(STROnePlot &darkplot) = 0;
	


	QString SensorType;
	int Sensorid;
	STRSensorInfo SensorInfo;
	STROnePlot DarkNess;

};
