//////////////////////////////////////////////////////////////////////////
//ATP?¨¤?¨¨¡À??????¡§???¨¤
//////////////////////////////////////////////////////////////////////////
#pragma once
//#include "pch.h"
#include "ZZ_Types.h"
#include "ZZ_Math.h"
#include <QSerialPort>
#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();
    virtual ~ZZ_ATPControl_Serial_Qt();

public:
    //?¨¨???¡§????
    //int SetBaudRate(int iBaud);
    //???????¨¨¡À?
    int Initialize(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName);
    int Initialize(bool bIsUSBMode,ZZ_U8 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;

    //////////////////////////////////////////////////////////////////////////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 SendCommand(QByteArray qbCommand);
    int RecvData(QByteArray &qbData);
    int ParseData(QByteArray &qbData);
//private slots :
    //void ReadMessage();
};