//////////////////////////////////////////////////////////////////////////
//ATP类设备串口通信类
//////////////////////////////////////////////////////////////////////////
#pragma once
//#include "pch.h"
#include "ZZ_Types.h"
#include "ZZ_Math.h"
#include <QSerialPort>
#include <QtEndian>
#include <QDebug>
#include "IrisFiberSpectrometerBase.h"

using namespace ZZ_MISCDEF;
using namespace ZZ_MISCDEF::ATP;
using namespace ZZ_MISCDEF::IRIS::FS;

class ZZ_ATPControl_Serial_Qt :public CIrisFSBase
{
Q_OBJECT
public:
    ZZ_ATPControl_Serial_Qt(QObject* parent = nullptr);
    virtual ~ZZ_ATPControl_Serial_Qt();

public:
    //do not call
    //int ReInit();
    //设置波特率
    //int SetBaudRate(int iBaud);
    //初始化设备
    int Initialize(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName);

    //关闭设备
    void Close();

    //单次测试采集 用以确认设备像素数
    int SingleShot(int& iPixels);

    //单次数据采集
    int SingleShot(DataFrame& dfData);

    //单次暗背景采集
    //int SingleShotDark(ATPDataFrame &dfData);

    //int SingleShotDeducted(ATPDataFrame &dfData);
    //设置曝光时间
    int SetExposureTime(int iExposureTimeInMS);

    //获取曝光时间设置
    int GetExposureTime(int& iExposureTimeInMS);

    //int GetWaveLength(float *pfWaveLength);

    //获取设备信息
    int GetDeviceInfo(DeviceInfo& Info);

    //获取设备特征数据
    int GetDeviceAttribute(DeviceAttribute& Attr);

    //int GetDeviceListInfo(); //use type name to enum

    //设置温度
    int SetDeviceTemperature(float fTemperature);

    //获取温度
    int GetDeviceTemperature(float& fTemperature);

    //自动曝光
    int PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float& fPredictedExposureTime);

#ifdef _DEBUG
    public:
#else //
private:
#endif
    //port
    int m_iBaudRate;
    QSerialPort* m_pSerialPort;

    //ATP
    DeviceInfo m_diDeviceInfo;
    DeviceAttribute m_daDeviceAttr;

    //Attr
    int m_iExposureTime;
    //////////////////////////////////////////////////////////////////////////shutter control stub code s
    //int SetExtShutter(int iShutterUP0, int iShutterDOWN1,int iShutterDOWN2,int iShutterDOWN3); //0:close  1:open
    //////////////////////////////////////////////////////////////////////////shutter control stub code e
    int GetExposureTime_Init();
    int SendCommand(QByteArray qbCommand);
    int RecvData(QByteArray &qbData);
    int RecvData_ShortLag(QByteArray &qbData);
    int ParseData(QByteArray &qbData);
public slots:
    int Init_Self();
signals:
    void SignalInit_Self();
    //private slots :
    //void ReadMessage();
};