Files
eUi/src/Core/back/triggerManager.cpp
T

130 lines
4.2 KiB
C++

#include <triggerManager.h>
#include <threadPoolManager.h>
#include <backStruct.h>
#include <cameraManager.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;
}