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

/******************************************************************************
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