131 lines
4.3 KiB
C++
131 lines
4.3 KiB
C++
#include <triggerManager.h>
|
|
#include <threadPoolManager.h>
|
|
#include <backStruct.h>
|
|
#include <cameraManager.h>
|
|
#include <uiModule/uiModule_switchProduct.h>
|
|
#include <appCore.hpp>
|
|
#include <detProcess.hpp>
|
|
#include <lightSource.hpp>
|
|
#include <async.h>
|
|
#define debugTesting 0
|
|
void triggerManager::initialization(detProcess* _detProcessIn)
|
|
{
|
|
_detProcess = _detProcessIn;
|
|
dManager = &_detProcessIn->_detDataManager;
|
|
_cameraManager = &_detProcessIn->_cameraManager;
|
|
_threadManager = &_detProcessIn->_threadManager;
|
|
//_lightSourceManager = &_detProcessIn->_lightSourceManager;
|
|
|
|
startPos = _core._appConfig._triggerStruct.startPos;
|
|
triggerFileName = QString::fromStdString(_core._appConfig._triggerStruct.moduleName);
|
|
IpAndPort = QString::fromStdString(_core._appConfig._triggerStruct.initStr);
|
|
readAllCmd = QByteArray::fromStdString(_core._appConfig._triggerStruct.readAllCmd);
|
|
triggerFileName = QString::fromStdString(_core._appConfig._triggerStruct.moduleName);
|
|
sleepTime = _core._appConfig._triggerStruct.sleepTime;
|
|
readNum = _core._appConfig._triggerStruct.readNum;
|
|
writeType = _core._appConfig._triggerStruct.writeType;
|
|
|
|
}
|
|
void triggerManager::run()
|
|
{
|
|
if(connectHost() == false)
|
|
return;
|
|
QThread::msleep(3000);
|
|
int cnt = 0;
|
|
QString heartbeatCmd = QString::fromStdString(_core._appConfig._triggerStruct.heartCmd);
|
|
while (runFlag)
|
|
{
|
|
reciveCommond();
|
|
QThread::msleep(10);
|
|
//心跳
|
|
cnt++;
|
|
if (cnt > 30)
|
|
{
|
|
sendFinsMsg(heartbeatCmd);
|
|
cnt = 0;
|
|
// qDebug() << "heartbeat";
|
|
}
|
|
|
|
}
|
|
}
|
|
bool triggerManager::connectHost()
|
|
{
|
|
if (init == true)
|
|
return true;
|
|
status = NotInit;
|
|
m_lib = new QLibrary(triggerFileName);
|
|
libLoadedflag = m_lib->load();
|
|
if (!m_lib->isLoaded())
|
|
{
|
|
emit _core._qtFunc.sendErrorToMainwindow(dllNotFound);
|
|
emit _core._qtFunc.sendInitString("找不到" + triggerFileName);
|
|
return false;
|
|
}
|
|
if (libLoadedflag)
|
|
{
|
|
CreateFunction createFun = (CreateFunction)m_lib->resolve("create");
|
|
ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory");
|
|
bool initFailure = false;
|
|
if (createFun && releaseFun)
|
|
{
|
|
trigger = createFun();
|
|
destory_finstcp = releaseFun;
|
|
QByteArray initByte =
|
|
QByteArray::fromStdString
|
|
("sleeptime_"+std::to_string(sleepTime)
|
|
+ "_readnum_" + std::to_string(readNum)
|
|
+ "_writetype_" + writeType);
|
|
trigger->reciveData(vec_mat, QByteArray(IpAndPort.toUtf8()));
|
|
emit _core._qtFunc.sendInitString(triggerFileName + "连接到" + IpAndPort);
|
|
initFailure = trigger->initParas(initByte);
|
|
}
|
|
|
|
if (initFailure == false)
|
|
{
|
|
emit _core._qtFunc.sendErrorToMainwindow(triggerInitFailure);
|
|
delete m_lib;
|
|
m_lib = nullptr;
|
|
emit _core._qtFunc.sendInitString(triggerFileName + "初始化失败");
|
|
status = InitFailure;
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
status = InitOK;
|
|
init = true;
|
|
emit _core._qtFunc.sendInitString(triggerFileName + "成功");
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
void triggerManager::reciveCommond()
|
|
{
|
|
//auto start = std::chrono::high_resolution_clock::now();
|
|
if (!sendFinsMsg(readAllCmd))
|
|
qCritical() << "[TCP] " << " finstcp_ptr reciveData error!";
|
|
QByteArray readByte;
|
|
if (!reciveFinsMsg(readByte))
|
|
qCritical() << "[TCP] " << " finstcp_ptr sendData error!";
|
|
tLocker.reFreshLocker(readByte);//经过检查后再触发
|
|
decodeCameraCMD(readByte);
|
|
}
|
|
|
|
void triggerManager::decodeCameraCMD(QByteArray byte)
|
|
{
|
|
if (byte.isEmpty())
|
|
{
|
|
qCritical() << "ERROR:cant read data from Fins,无法从fins读取数据";
|
|
return;
|
|
}
|
|
checkCallbackAndTrigger(byte);
|
|
}
|
|
int triggerManager::getValue(int dmPos, QByteArray byte)
|
|
{
|
|
int triggerPos = (dmPos - startPos) * 2;
|
|
if (byte.size() < triggerPos)
|
|
return false;
|
|
int val1 = byte.at(triggerPos) * 256;
|
|
int val2 = static_cast<unsigned char>(byte.at(triggerPos + 1));
|
|
return val1 + val2;
|
|
} |