You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
14 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/******************************************************************************
Copyright(C):2015~2018 hzleaper
FileName:iCoreCtrl.h
Author:zhikun wu
Email:zk.wu@hzleaper.com
Tools:vs2010 pc on company
Created:2015/03/23
History:23:3:2015 15:35
*******************************************************************************/
#ifndef __I_CORE_CTRL_H
#define __I_CORE_CTRL_H
//#include "icamera.h"
#include "baseStruct.h"
#include <QtCore/QString>
#include <QtGui/QImage>
//the parameter for the CoreCtrl module
typedef struct tagCORE_CTRL_IN_PARAM
{
class IGuiCallback* pGuiCb;
TP_GLOBAL_DATA* pGlobalData;
TP_CORE_SETTING* pCoreSetting;
}CORE_CTRL_IN_PARAM;
/**/
class IAlgorithmResult
{
public:
IAlgorithmResult(){}
virtual ~IAlgorithmResult(){}
virtual QVariantMap ToVariantMap() = 0;
};
//interface for gui
class ICoreCtrl
{
public:
ICoreCtrl() {}
virtual ~ICoreCtrl() {}
virtual QList<QString> ICameraKeys() = 0;
virtual QList<QString> ICameraKeysOrderByIds() = 0;
virtual bool ICameraOption(const QString& strSerial, TP_CAMERA_OPTION& camOpt) = 0;
virtual bool ICameraOptionByKey(const QString& strSerial, TP_CAMERA_OPTION& camOpt) = 0;
virtual QList<QString> IEnumAvailableCameras(emTpDeviceType camType) = 0;
virtual void ISetTriggerMode(emTpDeviceTriggerMode triggerMode, long nFrameRate) = 0;
virtual emTpDeviceTriggerMode IGetTriggerMode() = 0;
virtual void IManualTrigger(emTpTriggerDirection direct) = 0;
virtual void ISnapImage(const QStringList& camKeys) = 0;
virtual void ISendSoftTrigger(const QStringList& camKeys) = 0;
virtual void IDrawImage(const QString& sKey, QPainter& painter, QRect& rt) = 0;
virtual QImage IShowImage(const QString& sWinId, int& nFrameNum, QString& szExShow) = 0;
virtual QMap<QString, QString> IGetCamShowNames() = 0;
virtual IAlgorithmOption* IGetAlgorithmOption(int nAlgorithm) = 0;
virtual void IDataToComm(IImageObject::DATA_TO_COMM_HEAD& head, char* pData, int nLen) = 0;
virtual bool ISetCameraOption(const QString& strSerial, const TP_CAMERA_OPTION& camOpt) = 0;
virtual bool IReopenCameraes() = 0;
virtual void ISetVirtualImages(const QString& camera, const QStringList& szImages) = 0;
virtual QImage IOriginImage(const QString& sShowId) = 0;
virtual void ISetCameraProperty(const QString& camera, TP_CAMERA_PROPERTY& property) = 0;
virtual void ISetAlgorithmShared(const QString& key, const QVariant& value) = 0;
virtual void IWriteIo(const TP_IO_OUT_CONTROL& state) = 0;
virtual void ISetResult(const QString& key, QVariant& val) = 0;
//operate camera
virtual bool ICreateCamera(const QString& strSerial, int nType) = 0;
virtual bool IOpenCamera(const QString& strSerial) = 0;
virtual bool ICloseCamera(const QString& strSerial) = 0;
virtual bool IStartCamera(const QString& strSerial) = 0;
virtual bool IStopCamera(const QString& strSerial) = 0;
virtual bool IDeleteCamera(const QString& strSerial) = 0;
virtual bool IAddCamera(const QString& strName, const TP_CAMERA_OPTION& camOpt, bool bNew, bool bAutoRun = false) = 0;
virtual void IEnableComm(const QString& strName, bool bEnable = true) = 0;
//operate comm
virtual QList<QString> ICommKeys() = 0;
virtual bool ICommOptionByKey(const QString& strName, TP_COMM_SETTING_NODE& commOpt) = 0;
virtual bool IOpenComm(const QString& strName) = 0;
virtual bool ICloseComm(const QString& strName) = 0;
virtual bool IAddComm(const QString& strName, const TP_COMM_SETTING_NODE& commOpt, bool bNew) = 0;
virtual bool IDelComm(const QString& strName) = 0;
//operate camera window
virtual QList<QString> ICamWinKeys() = 0;
virtual bool ICamWinOptionByKey(const QString& strKey, TP_CAMERA_WIN& camwinOpt) = 0;
virtual bool IAddCamWin(const QString& strKey, const TP_CAMERA_WIN& camwinOpt, bool bNew) = 0;
virtual bool IDelCamWin(const QString& strKey) = 0;
//更新json配置文件
virtual bool updateCommJson(const QString& sJsonPath) = 0;
virtual bool updateCamJson(const QString& sJsonPath) = 0;
virtual bool ICamsStartPush() = 0;
virtual bool ICamsPausePush() = 0;
public://private: //use private when the old main is discarded;
virtual int IInitCore(class IDetectorEngine* pDE = NULL) = 0;
virtual void IFreeCore() = 0;
virtual void IStartImageProcess() = 0;
virtual void IEndImageProcess() = 0;
friend class QTpMain;
};
//callback interface from gui
class IGuiCallback
{
public:
IGuiCallback() {}
virtual ~IGuiCallback() {}
virtual void IOnReady() {}
virtual void IUpdateShow(const QString& skey) = 0;
virtual void INewCameraImage(const QVariantMap& vMap) = 0;
virtual void IAddWindows(const QString& sWinName, const QString& sShowId) {};
// virtual void IUpdateCamShow(const QString& uniqueName) {}
// virtual void IUpdateAlgShow(const QString& uniqueName, int index) {}
virtual void ISendDataToUI(emTpUiDataType dataType, const QString& camKey, void* pData) {}//弃用用IVariantMapToUI()替代
virtual void ICameraTrigger(bool bStartOrStop) = 0;//弃用用ICommInterval()替代
virtual void IDrawDefectToScene(const QString& szWinName, IImageObject::emTpDefectType defectType, QByteArray& data) = 0;
virtual void ISafeDataToUI(emTpUiDataType dataType, const QString& camKey, const QByteArray& data) = 0;
virtual void IWarning(int nWarningCode, void* data, int nDataLen) = 0;
virtual void ICommInterval(const char* szCom, int nCmd, BYTE* pData, int nDataLen) = 0;
virtual void IAlgorithmResult(const QVariantMap& varMap) = 0;
virtual void IVariantMapToUI(emTpUiDataType dataType, const QString& camKey, const QVariantMap& vMap) = 0;
virtual QVariant IGetVariantById(int id) = 0;
virtual void IIoStatesChanged(int nOldState, int nNewState) = 0;
virtual void ICommAchieved(const char* szCom, int nCmd, BYTE* pData, int nDataLen) = 0;
virtual WORD IGetWorkState() = 0;//心跳包中发送的用来控制是否触发的值返回0不触发返回1触发
//callback functions using by overlapped directly...
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define TP_SIGNALS \
Q_SIGNALS:\
void sgAddWindows(const QString sWinName, const QString sShowId); \
void sgUpdateShow(const QString skey); \
void sgNewCameraImage(const QVariantMap& vMap); \
void sgSendDataToUI(emTpUiDataType dataType, const QString camKey, void* pData); \
void sgCameraTrigger(bool bStartOrStop); \
void sgDrawDefectToScene(const QString szWinName, IImageObject::emTpDefectType defectType, QByteArray data); \
void sgSafeDataToUI(emTpUiDataType dataType, const QString camKey, const QByteArray data); \
void sgWarning(int nWarningCode, const QByteArray data); \
void sgCommIntervale(const QString szCom, int nCmd, const QByteArray data); \
void sgAlgorithmResult(const QVariantMap varMap); \
void sgVariantMapToUI(emTpUiDataType dataType, const QString camKey, const QVariantMap vMap); \
void sgIoStatesChanged(int nOldState, int nNewState); \
void sgCommAchieved(const QString szCom, int nCmd, const QByteArray data);\
#define TP_SLOTS \
public Q_SLOTS: \
virtual void UpdateShow(const QString skey); \
virtual void NewCameraImage(const QVariantMap& vMap); \
virtual void AddWindows(const QString sWinName, const QString sShowId); \
virtual void SendDataToUI(emTpUiDataType dataType, const QString camKey, void* pData); \
virtual void CameraTrigger(bool bStartOrStop); \
virtual void DrawDefectToScene(const QString szWinName, IImageObject::emTpDefectType defectType, QByteArray data); \
virtual void SafeDataToUI(emTpUiDataType dataType, const QString camKey, const QByteArray data); \
virtual void Warning(int nWarningCode, const QByteArray data); \
virtual void CommIntervale(const QString szCom, int nCmd, const QByteArray data); \
virtual void AlgorithmResult(const QVariantMap varMap); \
virtual void VariantMapToUI(emTpUiDataType dataType, const QString camKey, const QVariantMap vMap); \
virtual void IoStatesChanged(int nOldState, int nNewState); \
virtual void CommAchieved(const QString szCom, int nCmd, const QByteArray data);\
#define TP_CONSTRUCTOR \
connectSignals();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define TP_CALLBACKS_H \
virtual void IAddWindows(const QString& sWinName, const QString& sShowId); \
virtual void IUpdateShow(const QString& skey); \
virtual void INewCameraImage(const QVariantMap& vMap); \
virtual void ISendDataToUI(emTpUiDataType dataType, const QString& camKey, void* pData); \
virtual void ICameraTrigger(bool bStartOrStop); \
virtual void IDrawDefectToScene(const QString& szWinName, IImageObject::emTpDefectType defectType, QByteArray& data); \
virtual void ISafeDataToUI(emTpUiDataType dataType, const QString& camKey, const QByteArray& data); \
virtual void IWarning(int nWarningCode, void* data, int nDataLen); \
virtual void ICommInterval(const char* szCom, int nCmd, BYTE* pData, int nDataLen); \
virtual void IAlgorithmResult(const QVariantMap& varMap); \
virtual void IVariantMapToUI(emTpUiDataType dataType, const QString& camKey, const QVariantMap& vMap); \
virtual QVariant IGetVariantById(int id); \
virtual void IIoStatesChanged(int nOldState, int nNewState); \
virtual void ICommAchieved(const char* szCom, int nCmd, BYTE* pData, int nDataLen); \
virtual WORD IGetWorkState(); \
void connectSignals();
///
#define TP_CALLBACKS_CPP(cName) \
void cName##::IUpdateShow(const QString& skey) { \
emit sgUpdateShow(skey); \
} \
void cName##::INewCameraImage(const QVariantMap& vMap) { \
emit sgNewCameraImage(vMap); \
} \
void cName##::IAddWindows(const QString& sWinName, const QString& sShowId) { \
emit sgAddWindows(sWinName, sShowId); \
} \
void cName##::ISendDataToUI(emTpUiDataType dataType, const QString& camKey, void* pData) { \
emit sgSendDataToUI(dataType, camKey, pData); \
} \
void cName##::ICameraTrigger(bool bStartOrStop) { \
emit sgCameraTrigger(bStartOrStop); \
} \
void cName##::IDrawDefectToScene(const QString& szWinName, IImageObject::emTpDefectType defectType, QByteArray& data) { \
emit sgDrawDefectToScene(szWinName, defectType, data); \
} \
void cName##::ISafeDataToUI(emTpUiDataType dataType, const QString& camKey, const QByteArray& data) { \
emit sgSafeDataToUI(dataType, camKey, data); \
} \
void cName##::IWarning(int nWarningCode, void* data, int nDataLen) { \
emit sgWarning(nWarningCode, QByteArray((char*)data, nDataLen)); \
}\
void cName##::ICommInterval(const char* szCom, int nCmd, BYTE* pData, int nDataLen) { \
emit sgCommIntervale(QString(szCom), nCmd, QByteArray((char*)pData, nDataLen)); \
} \
void cName##::IAlgorithmResult(const QVariantMap& varMap) { \
emit sgAlgorithmResult(varMap); \
} \
void cName##::IVariantMapToUI(emTpUiDataType dataType, const QString& camKey, const QVariantMap& vMap) { \
emit sgVariantMapToUI(dataType, camKey, vMap); \
} \
void cName##::IIoStatesChanged(int nOldState, int nNewState) { \
emit sgIoStatesChanged(nOldState, nNewState); \
} \
void cName##::ICommAchieved(const char* szCom, int nCmd, BYTE* pData, int nDataLen) { \
emit sgCommAchieved(QString(szCom), nCmd, QByteArray((char*)pData, nDataLen)); \
} \
QVariant cName##::IGetVariantById(int id) { return QVariant(); } \
WORD cName##::IGetWorkState() { return 0; } \
void cName##::connectSignals() { \
QMetaObject::Connection error = connect(this, SIGNAL(sgAddWindows(const QString, const QString)) \
, this, SLOT(AddWindows(const QString, const QString))); \
error = connect(this, SIGNAL(sgUpdateShow(const QString)), this, SLOT(UpdateShow(const QString))); \
error = connect(this, SIGNAL(sgNewCameraImage(const QVariantMap)), this, SLOT(NewCameraImage(const QVariantMap))); \
qRegisterMetaType<emTpUiDataType>("emTpUiDataType"); \
error = connect(this, SIGNAL(sgSendDataToUI(emTpUiDataType, const QString, void*)) \
, this, SLOT(SendDataToUI(emTpUiDataType, const QString, void*))); \
error = connect(this, SIGNAL(sgCameraTrigger(bool)), this, SLOT(CameraTrigger(bool))); \
qRegisterMetaType<IImageObject::emTpDefectType>("IImageObject::emTpDefectType"); \
error = connect(this, SIGNAL(sgDrawDefectToScene(const QString, IImageObject::emTpDefectType, QByteArray)) \
, this, SLOT(DrawDefectToScene(const QString, IImageObject::emTpDefectType, QByteArray))); \
error = connect(this, SIGNAL(sgSafeDataToUI(emTpUiDataType, const QString, const QByteArray)) \
, this, SLOT(SafeDataToUI(emTpUiDataType, const QString, const QByteArray))); \
error = connect(this, SIGNAL(sgWarning(int, const QByteArray)), this, SLOT(Warning(int, const QByteArray))); \
error = connect(this, SIGNAL(sgCommIntervale(const QString, int, const QByteArray)) \
, this, SLOT(CommIntervale(const QString, int, const QByteArray))); \
error = connect(this, SIGNAL(sgAlgorithmResult(const QVariantMap)),this, SLOT(AlgorithmResult(const QVariantMap))); \
error = connect(this, SIGNAL(sgVariantMapToUI(emTpUiDataType, const QString, const QVariantMap)) \
, this, SLOT(VariantMapToUI(emTpUiDataType, const QString, const QVariantMap)));\
error = connect(this, SIGNAL(sgIoStatesChanged(int, int)), this, SLOT(IoStatesChanged(int, int))); \
error = connect(this, SIGNAL(sgCommAchieved(const QString, int, const QByteArray)) \
, this, SLOT(CommAchieved(const QString, int, const QByteArray))); \
} \
#endif