// *****************************************************************************
// ��Ȩ���У�C��2023~2099 �Ϻ����ɳ������������޹�˾
// ��������Ȩ��
// *****************************************************************************
// ���� : ���
// �汾 : 1.0
// ����˵��:
//          ������ӿ���,Ϊ�˺�ui ���ֿ����Ժ�Ҳ��Ҫ
// *****************************************************************************

#ifndef __CAMERABIND_H__
#define __CAMERABIND_H__ 1

#include <QObject>
#include <QPointer>
#include "Machine.h"
#include "CViewInterface.h"

// �ƹ�����
enum EN_LIGHT_INDEX
{
    Red,//��
    Green,
    Blue,
    Point
};

struct ST_LIGHT_VAL
{
    int redLightValue; 
    int greenLightValue;
    int blueLightValue;
    int pointLightValue;
};

//�ƶ���
struct ST_MOVE_AXIS
{
    bool isSwitch;
    std::string ModuleType;
    std::string AxisType;
    double pos;
};

// �����ȴ�ʱ��
const unsigned int g_unnSuspensionWaitingTime = 1000 * 60 * 10; //60��

class CameraBind: public QObject
{
    Q_OBJECT
public:
    CameraBind();
    ~CameraBind();

    /**���û��洰��
     */
    void SetImageWnd(QWidget* pImageWnd);

    void InitAllCamera();

    /**�ƶ���
     */
    void SetModuleMove(const std::string& strModuleType, const std::string& enAxisType, double pos, bool bMoveTo);
    void JModuleMove(std::string ModuleType, std::vector<ns_module::MODULE_COORD_MOVE> vecPos, bool bMoveTo);

    /**����
     */
    void JToHome();

    /**��ȡXY
     */
    CXYCalib* YGetCalibXY(int iCameraId);

    /**���õƹ�
     */
    void JSetRedLight(int iCameraId, EN_LIGHT_INDEX nLightIndex, int LightValue);

    /**��ȡ�ƹ�ֵ
     */
    ST_LIGHT_VAL JGetLight(int iCameraId);

    /**
     */
    long YGetAxisPosition(std::string ModuleType, std::string AxisType, double& pos);

    /**ִ�к���
     */
    long JRunButton(const ns_module::ST_BUTTON_FUN stInfo);

    //ֹͣ
    long JRunStop();

    //�Զ��̾�
    long JRunAutoBond();

    /**�˳�֪ͨ
     */
    long JViewExit();

    /**�ƶ������
     */
    long JCameraMove(int iCameraId, double x, double y);

signals:
    /**ͨ��ͼ����
    *        ������Ҫ������
    *@pImageBuffer ͼ�񻺳���BYTE
    *@nWidth       ��
    *@nHeight      ��
    */
    void SendImageDispSignal(int iCameraId, ImageInfo imageData);
private:

   /**����ص��������� 0��1��2��3��4
    */
   static long OnFrameCallbackFun0(int iCameraId, JVision::ImageInfo imageData);
   static long OnFrameCallbackFun1(int iCameraId, JVision::ImageInfo imageData);
   static long OnFrameCallbackFun2(int iCameraId, JVision::ImageInfo imageData);
   static long OnFrameCallbackFun3(int iCameraId, JVision::ImageInfo imageData);
   static long OnFrameCallbackFun4(int iCameraId, JVision::ImageInfo imageData);

    //static long OnFrameCallbackFun2(int iCameraId, ImageInfo imageData);
   void SendImage(int iCameraId, ImageInfo imageData);

public:
    /**���ͼ��ӿ�
    */
    ns_module::CViewInterface* m_pCViewInterface;

    /**��ǰ����б�
    */
    std::vector<CameraInfo> m_vecCamera;

    std::vector<CAxis*>     m_vecCAxis;
};

#endif  //__CAMERABIND_H__