#include #include #include #include #include #include #include #include #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(byte.at(triggerPos + 1)); return val1 + val2; }