From 9c93e66a054291d52a5ca22a3d67749faa04b35e Mon Sep 17 00:00:00 2001 From: zhangzhuo Date: Mon, 8 Nov 2021 16:59:50 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=8E=A7=E5=88=B6=E5=9F=BA=E7=B1=BB=EF=BC=8C=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8iSIF=E5=92=8CIS1=E7=9A=84=E6=8E=A7=E5=88=B6=E7=B1=BB?= =?UTF-8?q?=E5=B0=86=E6=B4=BE=E7=94=9F=E8=87=AA=E5=9F=BA=E7=B1=BB=EF=BC=9B?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E5=B9=B6=E6=B5=8B=E8=AF=95=E4=BA=86Qthread?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=8A=9F=E8=83=BD=EF=BC=9B=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BA=86QMutex=E7=9A=84=E4=B8=80=E4=BA=9B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 27 +++++++++---- source/Settings/SystemConfigger.cpp | 46 +++++++++++------------ source/Thread/ATPAbstractController.cpp | 31 +++++++++++++++ source/Thread/ATPAbstractController.h | 29 ++++++++++++++ source/Thread/ThreadDataGrabber.cpp | 50 +++++++++++++++++++++++++ source/Thread/ThreadDataGrabber.h | 30 +++++++++++++++ source/Thread/ThreadIS1Controller.cpp | 23 ++++++++++++ source/Thread/ThreadIS1Controller.h | 13 +++++++ source/Thread/ThreadISIFController.h | 9 ++++- source/Thread/ThreadiSIFController.cpp | 25 +++++++++++++ source/pch.h | 4 +- 11 files changed, 254 insertions(+), 33 deletions(-) create mode 100644 source/Thread/ATPAbstractController.cpp create mode 100644 source/Thread/ATPAbstractController.h diff --git a/main.cpp b/main.cpp index 60ed99f..d619f1c 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,7 @@ #include "pch.h" #include "ATPControl_Serial_QT.h" #include "Logger.h" +#include "ThreadDataGrabber.h" using namespace std; #pragma once @@ -14,13 +15,25 @@ int main(int argc, char *argv[]) qDebug() << qstrTest; cout << "This is a test message"; //////////////////////////////////////////////////////////////////////////test - ZZ_ATPControl_Serial_Qt m_ctrlATP; - QByteArray qbTest; - m_ctrlATP.ATPInitialize(7); - m_ctrlATP.GetDeviceAttribute(); - m_ctrlATP.SetExposureTime(m_ctrlATP.m_adaDeviceAttr.iMinIntegrationTime); - - m_ctrlATP.RecvData(qbTest); + ZZ_DataGrabberThread m_test; + //m_test.GrabOnce(); + QThread* m_pqDataGrabberThreadHolder; + + m_pqDataGrabberThreadHolder = new QThread(); + m_test.moveToThread(m_pqDataGrabberThreadHolder); + m_pqDataGrabberThreadHolder->start(); + + m_test.TestGrab(); + + QThread::msleep(5000); + + m_test.StopTestGrab(); +// ZZ_ATPControl_Serial_Qt m_ctrlATP; +// QByteArray qbTest; +// m_ctrlATP.ATPInitialize(7); +// m_ctrlATP.GetDeviceAttribute(); +// m_ctrlATP.SetExposureTime(m_ctrlATP.m_adaDeviceAttr.iMinIntegrationTime); +// m_ctrlATP.RecvData(qbTest); ////////////////////////////////////////////////////////////////////////// return a.exec(); } diff --git a/source/Settings/SystemConfigger.cpp b/source/Settings/SystemConfigger.cpp index 4147a52..88b667b 100644 --- a/source/Settings/SystemConfigger.cpp +++ b/source/Settings/SystemConfigger.cpp @@ -1,25 +1,25 @@ #include "SystemConfigger.h" -ZZ_SysConfigger::ZZ_SysConfigger(QObject *parent /*= nullptr*/) -{ - m_qstrFilePath = QCoreApplication::applicationDirPath()+ "/Settings/DeviceSettings.ini"; -} - -ZZ_SysConfigger::~ZZ_SysConfigger() -{ -} - -int ZZ_SysConfigger::LoadSettings_IS1() -{ - return 0; -} - -int ZZ_SysConfigger::LoadSettings_iSIF() -{ - return 0; -} - -int ZZ_SysConfigger::LoadSettings_System() -{ - return 0; -} + ZZ_SysConfigger::ZZ_SysConfigger(QObject *parent /*= nullptr*/) + { + m_qstrFilePath = QCoreApplication::applicationDirPath()+ "/Settings/DeviceSettings.ini"; + } + + ZZ_SysConfigger::~ZZ_SysConfigger() + { + } + + int ZZ_SysConfigger::LoadSettings_IS1() + { + return 0; + } + + int ZZ_SysConfigger::LoadSettings_iSIF() + { + return 0; + } + + int ZZ_SysConfigger::LoadSettings_System() + { + return 0; + } diff --git a/source/Thread/ATPAbstractController.cpp b/source/Thread/ATPAbstractController.cpp new file mode 100644 index 0000000..8e68bab --- /dev/null +++ b/source/Thread/ATPAbstractController.cpp @@ -0,0 +1,31 @@ +#include "ATPAbstractController.h" + +ZZ_ATPAbsCtrlThread::ZZ_ATPAbsCtrlThread(QObject* parent /*= nullptr*/) +{ + +} + +ZZ_ATPAbsCtrlThread::~ZZ_ATPAbsCtrlThread() +{ + +} + +int ZZ_ATPAbsCtrlThread::StartTestAcquisition() +{ + m_bFlagIsCollecting = true; + while (m_bFlagIsCollecting) + { + QMutexLocker locker(&m_Mutex); + QThread::msleep(1000); + qDebug() << "ThreadATPAbsController busy"; + } + qDebug() << "ThreadATPAbsController quit"; + return 0; +} + +int ZZ_ATPAbsCtrlThread::StopTestAcquisition() +{ + //QMutexLocker locker(&m_Mutex); + m_bFlagIsCollecting = false; + return 0; +} diff --git a/source/Thread/ATPAbstractController.h b/source/Thread/ATPAbstractController.h new file mode 100644 index 0000000..328728e --- /dev/null +++ b/source/Thread/ATPAbstractController.h @@ -0,0 +1,29 @@ +#pragma once +#include "pch.h" +#include "ATPControl_Serial_QT.h" +#include + + +class ZZ_ATPAbsCtrlThread :public QObject +{ + Q_OBJECT + +public: + +public: + std::atomic m_bFlagIsCollecting; + QMutex m_Mutex; + +public: + ZZ_ATPAbsCtrlThread(QObject* parent = nullptr); + virtual ~ZZ_ATPAbsCtrlThread(); +private: + ZZ_ATPControl_Serial_Qt m_iSIFctrl; + +public slots: + virtual int StartTestAcquisition(); + int StopTestAcquisition(); +signals: + void AcqStarted(); + void AcqFinished(); +}; \ No newline at end of file diff --git a/source/Thread/ThreadDataGrabber.cpp b/source/Thread/ThreadDataGrabber.cpp index e69de29..8353234 100644 --- a/source/Thread/ThreadDataGrabber.cpp +++ b/source/Thread/ThreadDataGrabber.cpp @@ -0,0 +1,50 @@ +#include "ThreadDataGrabber.h" + +ZZ_DataGrabberThread::ZZ_DataGrabberThread(QObject* parent /*= nullptr*/) +{ + SetupSignals(); + StartGrabberThread(); +} + +ZZ_DataGrabberThread::~ZZ_DataGrabberThread() +{ + +} + +int ZZ_DataGrabberThread::SetupSignals() +{ + connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StartTestAcquisition); + connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StartTestAcquisition); + + bool bres = connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection); + bres = connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection); + + return 0; +} + +int ZZ_DataGrabberThread::StartGrabberThread() +{ + m_pqISIFThreadHolder = new QThread(); + m_tcISIFCtrlThread.moveToThread(m_pqISIFThreadHolder); + m_pqISIFThreadHolder->start(); + + m_pqIS1ThreadHolder = new QThread(); + m_tcIS1CtrlThread.moveToThread(m_pqIS1ThreadHolder); + m_pqIS1ThreadHolder->start(); + //m_stCameraServiceThread.SetController(this); + return 0; +} + +int ZZ_DataGrabberThread::TestGrab() +{ + emit SignalStartGrabOnce(); + return 0; +} + +int ZZ_DataGrabberThread::StopTestGrab() +{ + emit SignalStopGrab(); + //m_tcISIFCtrlThread.StopTestAcquisition(); + //m_tcIS1CtrlThread.StopTestAcquisition(); + return 0; +} diff --git a/source/Thread/ThreadDataGrabber.h b/source/Thread/ThreadDataGrabber.h index 6f70f09..0c102a5 100644 --- a/source/Thread/ThreadDataGrabber.h +++ b/source/Thread/ThreadDataGrabber.h @@ -1 +1,31 @@ #pragma once +#include"pch.h" +#include "ThreadIS1Controller.h" +#include "ThreadiSIFController.h" + +class ZZ_DataGrabberThread :public QObject +{ + Q_OBJECT +public: + ZZ_DataGrabberThread(QObject* parent = nullptr); + ~ZZ_DataGrabberThread(); + +public: +private: + ZZ_iSIFControlThread m_tcISIFCtrlThread; + ZZ_IS1ControlThread m_tcIS1CtrlThread; + QThread* m_pqISIFThreadHolder; + QThread* m_pqIS1ThreadHolder; + +public: + int SetupSignals(); + int StartGrabberThread(); +private: + +public slots: + int TestGrab(); + int StopTestGrab(); +signals: + void SignalStartGrabOnce(); + void SignalStopGrab(); +}; diff --git a/source/Thread/ThreadIS1Controller.cpp b/source/Thread/ThreadIS1Controller.cpp index e69de29..98eba91 100644 --- a/source/Thread/ThreadIS1Controller.cpp +++ b/source/Thread/ThreadIS1Controller.cpp @@ -0,0 +1,23 @@ +#include "ThreadIS1Controller.h" + +ZZ_IS1ControlThread::ZZ_IS1ControlThread(QObject* parent /*= nullptr*/) +{ + +} + +ZZ_IS1ControlThread::~ZZ_IS1ControlThread() +{ +} + +int ZZ_IS1ControlThread::StartTestAcquisition() +{ + m_bFlagIsCollecting = true; + while (m_bFlagIsCollecting) + { + //QMutexLocker locker(&m_Mutex); + QThread::msleep(1000); + qDebug() << "ThreadIS1Controller busy"; + } + qDebug() << "ThreadIS1Controller quit"; + return 0; +} diff --git a/source/Thread/ThreadIS1Controller.h b/source/Thread/ThreadIS1Controller.h index 6f70f09..fa46bf9 100644 --- a/source/Thread/ThreadIS1Controller.h +++ b/source/Thread/ThreadIS1Controller.h @@ -1 +1,14 @@ #pragma once +#include "ATPAbstractController.h" + +class ZZ_IS1ControlThread :public ZZ_ATPAbsCtrlThread +{ + Q_OBJECT +public: + ZZ_IS1ControlThread(QObject* parent = nullptr); + ~ZZ_IS1ControlThread(); +private: +public slots: + int StartTestAcquisition(); +signals: +}; \ No newline at end of file diff --git a/source/Thread/ThreadISIFController.h b/source/Thread/ThreadISIFController.h index 1a2c93c..37ff6d4 100644 --- a/source/Thread/ThreadISIFController.h +++ b/source/Thread/ThreadISIFController.h @@ -1,12 +1,17 @@ #pragma once -#include "pch.h" +#include "ATPAbstractController.h" -class ZZ_iSIFControlThread :public QObject +class ZZ_iSIFControlThread :public ZZ_ATPAbsCtrlThread { Q_OBJECT +public: + +private: public: ZZ_iSIFControlThread(QObject* parent = nullptr); ~ZZ_iSIFControlThread(); +public slots: + int StartTestAcquisition(); }; \ No newline at end of file diff --git a/source/Thread/ThreadiSIFController.cpp b/source/Thread/ThreadiSIFController.cpp index e69de29..31bca6c 100644 --- a/source/Thread/ThreadiSIFController.cpp +++ b/source/Thread/ThreadiSIFController.cpp @@ -0,0 +1,25 @@ +#include "ThreadiSIFController.h" + +ZZ_iSIFControlThread::ZZ_iSIFControlThread(QObject* parent /*= nullptr*/) +{ + +} + +ZZ_iSIFControlThread::~ZZ_iSIFControlThread() +{ + +} + +int ZZ_iSIFControlThread::StartTestAcquisition() +{ + m_bFlagIsCollecting = true; + while (m_bFlagIsCollecting) + { + //QMutexLocker locker(&m_Mutex); + QThread::msleep(1000); + qDebug() << "ThreadiSIFController busy"; + } + qDebug() << "ThreadiSIFController quit"; + return 0; +} + diff --git a/source/pch.h b/source/pch.h index dce1b38..8022a56 100644 --- a/source/pch.h +++ b/source/pch.h @@ -7,4 +7,6 @@ #include #include #include -#include \ No newline at end of file +#include +#include +#include \ No newline at end of file From b9bece4de9e9f5853cf4825c3788f2ca57de7ada Mon Sep 17 00:00:00 2001 From: zhangzhuo Date: Tue, 9 Nov 2021 17:45:04 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E7=AE=80=E5=8D=95=E4=BA=86=E8=A7=A3?= =?UTF-8?q?=E4=BA=86QJson=E5=92=8CQNetworkAccessManager=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95=E3=80=82=20?= =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BA=86=E4=BD=BF=E7=94=A8QWaitCondition?= =?UTF-8?q?=EF=BC=8CQMutex=E5=90=8C=E6=AD=A5=E7=BA=BF=E7=A8=8B=E3=80=82?= =?UTF-8?q?=E6=9C=AA=E8=83=BD=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=87=86=E5=A4=87?= =?UTF-8?q?=E6=94=B9=E7=94=A8=E7=8A=B6=E6=80=81=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 5 +-- source/ATP/ATPControl_Serial_QT.cpp | 14 ++++++-- source/ATP/ATPControl_Serial_QT.h | 2 +- source/Thread/ATPAbstractController.cpp | 11 +++++- source/Thread/ATPAbstractController.h | 10 +++--- source/Thread/ThreadDataGrabber.cpp | 46 +++++++++++++++++++++---- source/Thread/ThreadDataGrabber.h | 8 ++++- source/Thread/ThreadIS1Controller.cpp | 22 ++++++++---- source/Thread/ThreadiSIFController.cpp | 21 +++++++---- source/pch.h | 9 ++++- 10 files changed, 114 insertions(+), 34 deletions(-) diff --git a/main.cpp b/main.cpp index d619f1c..95784a5 100644 --- a/main.cpp +++ b/main.cpp @@ -23,11 +23,12 @@ int main(int argc, char *argv[]) m_test.moveToThread(m_pqDataGrabberThreadHolder); m_pqDataGrabberThreadHolder->start(); + m_test.TestGrab(); - QThread::msleep(5000); + //QThread::msleep(5000); - m_test.StopTestGrab(); + //m_test.StopTestGrab(); // ZZ_ATPControl_Serial_Qt m_ctrlATP; // QByteArray qbTest; // m_ctrlATP.ATPInitialize(7); diff --git a/source/ATP/ATPControl_Serial_QT.cpp b/source/ATP/ATPControl_Serial_QT.cpp index ff6ecc1..11f6552 100644 --- a/source/ATP/ATPControl_Serial_QT.cpp +++ b/source/ATP/ATPControl_Serial_QT.cpp @@ -447,9 +447,12 @@ int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fM return 0; } -int ZZ_ATPControl_Serial_Qt::SetExtShutter(int iShutterA, int iShutterB) + + +int ZZ_ATPControl_Serial_Qt::SetExtShutter(int iShutterUP0, int iShutterDOWN1, int iShutterDOWN2, int iShutterDOWN3) { - return 0; + qDebug() << "stub code not implemented"; + return -1; } int ZZ_ATPControl_Serial_Qt::SetExposureTime(int iExposureTimeInMS) @@ -527,6 +530,13 @@ int ZZ_ATPControl_Serial_Qt::SingleShot(int &iPixels) return 0; } +int ZZ_ATPControl_Serial_Qt::SingleShotDark(ATPDataFrame &dfData) +{ + SetExtShutter(0,0,0,0); + SingleShot(dfData); + return 0; +} + //void ZZ_ATPControl_Serial_Qt::ReadMessage() //{ // QByteArray qbTemp, qbTemp1; diff --git a/source/ATP/ATPControl_Serial_QT.h b/source/ATP/ATPControl_Serial_QT.h index de34574..a558667 100644 --- a/source/ATP/ATPControl_Serial_QT.h +++ b/source/ATP/ATPControl_Serial_QT.h @@ -49,7 +49,7 @@ private: ATPDeviceAttribute m_adaDeviceAttr; //////////////////////////////////////////////////////////////////////////shutter control stub code s - int SetExtShutter(int iShutterA, int iShutterB); //0:close 1:open + int SetExtShutter(int iShutterUP0, int iShutterDOWN1,int iShutterDOWN2,int iShutterDOWN3); //0:close 1:open //////////////////////////////////////////////////////////////////////////shutter control stub code e int SendCommand(QByteArray qbCommand); int RecvData(QByteArray &qbData); diff --git a/source/Thread/ATPAbstractController.cpp b/source/Thread/ATPAbstractController.cpp index 8e68bab..25a1654 100644 --- a/source/Thread/ATPAbstractController.cpp +++ b/source/Thread/ATPAbstractController.cpp @@ -10,16 +10,25 @@ ZZ_ATPAbsCtrlThread::~ZZ_ATPAbsCtrlThread() } +void ZZ_ATPAbsCtrlThread::SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex) +{ + m_pwcFinish = pFinish; + m_pMutex = pMutex; +} + int ZZ_ATPAbsCtrlThread::StartTestAcquisition() { m_bFlagIsCollecting = true; while (m_bFlagIsCollecting) { - QMutexLocker locker(&m_Mutex); + //QMutexLocker locker(&m_Mutex); QThread::msleep(1000); qDebug() << "ThreadATPAbsController busy"; } qDebug() << "ThreadATPAbsController quit"; + + m_pwcFinish->wakeAll(); + emit SignalAcqFinished(0,1); return 0; } diff --git a/source/Thread/ATPAbstractController.h b/source/Thread/ATPAbstractController.h index 328728e..1d17ff4 100644 --- a/source/Thread/ATPAbstractController.h +++ b/source/Thread/ATPAbstractController.h @@ -12,18 +12,18 @@ public: public: std::atomic m_bFlagIsCollecting; - QMutex m_Mutex; - + QMutex *m_pMutex; + QWaitCondition *m_pwcFinish; public: ZZ_ATPAbsCtrlThread(QObject* parent = nullptr); virtual ~ZZ_ATPAbsCtrlThread(); private: ZZ_ATPControl_Serial_Qt m_iSIFctrl; - public slots: + virtual void SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex); virtual int StartTestAcquisition(); int StopTestAcquisition(); signals: - void AcqStarted(); - void AcqFinished(); + void SignalAcqStarted(); + void SignalAcqFinished(int iThreadID,int iFlagStatus); }; \ No newline at end of file diff --git a/source/Thread/ThreadDataGrabber.cpp b/source/Thread/ThreadDataGrabber.cpp index 8353234..a8cf620 100644 --- a/source/Thread/ThreadDataGrabber.cpp +++ b/source/Thread/ThreadDataGrabber.cpp @@ -2,6 +2,7 @@ ZZ_DataGrabberThread::ZZ_DataGrabberThread(QObject* parent /*= nullptr*/) { + m_bFlagIsCollecting = false; SetupSignals(); StartGrabberThread(); } @@ -16,9 +17,11 @@ int ZZ_DataGrabberThread::SetupSignals() connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StartTestAcquisition); connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StartTestAcquisition); - bool bres = connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection); - bres = connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection); + connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection); + connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection); + //m_tcISIFCtrlThread.SetWaitCondition(&m_wcWaitISIF,&m_mTestMutex); + //m_tcIS1CtrlThread.SetWaitCondition(&m_wcWaitIS1, &m_mTestMutex); return 0; } @@ -37,14 +40,43 @@ int ZZ_DataGrabberThread::StartGrabberThread() int ZZ_DataGrabberThread::TestGrab() { - emit SignalStartGrabOnce(); + m_bFlagIsCollecting = true; + while (m_bFlagIsCollecting) + { + + emit SignalStartGrabOnce(); + //m_mTestMutex.lock(); + //m_wcWaitISIF.wait(&m_mTestMutex); + //m_mTestMutex.lock(); + //m_wcWaitIS1.wait(&m_mTestMutex); + //m_mTestMutex.unlock(); + } + return 0; } -int ZZ_DataGrabberThread::StopTestGrab() +int ZZ_DataGrabberThread::TestStopGrab() { - emit SignalStopGrab(); - //m_tcISIFCtrlThread.StopTestAcquisition(); - //m_tcIS1CtrlThread.StopTestAcquisition(); + //emit SignalStopGrab(); + m_tcISIFCtrlThread.StopTestAcquisition(); + m_tcIS1CtrlThread.StopTestAcquisition(); + return 0; } + +int ZZ_DataGrabberThread::handleThreadEvent(int x, int value) +{ + ProcessingThreadAactive[x] = value; + + // Check if threads are finished + for (int i = 0; i < numThreads; i++) + { + bool finished = true; + if (ProcessingThreadAactive[i] == true) + { + finished = false; + // Do end actions here + break; + } + } +} diff --git a/source/Thread/ThreadDataGrabber.h b/source/Thread/ThreadDataGrabber.h index 0c102a5..4a64fea 100644 --- a/source/Thread/ThreadDataGrabber.h +++ b/source/Thread/ThreadDataGrabber.h @@ -11,12 +11,16 @@ public: ~ZZ_DataGrabberThread(); public: + QWaitCondition m_wcWaitISIF,m_wcWaitIS1; + QMutex m_mTestMutex; private: ZZ_iSIFControlThread m_tcISIFCtrlThread; ZZ_IS1ControlThread m_tcIS1CtrlThread; QThread* m_pqISIFThreadHolder; QThread* m_pqIS1ThreadHolder; + std::atomic m_bFlagIsCollecting; + public: int SetupSignals(); int StartGrabberThread(); @@ -24,8 +28,10 @@ private: public slots: int TestGrab(); - int StopTestGrab(); + int TestStopGrab(); + int handleThreadEvent(int x, int value); signals: void SignalStartGrabOnce(); void SignalStopGrab(); + }; diff --git a/source/Thread/ThreadIS1Controller.cpp b/source/Thread/ThreadIS1Controller.cpp index 98eba91..42b2dfb 100644 --- a/source/Thread/ThreadIS1Controller.cpp +++ b/source/Thread/ThreadIS1Controller.cpp @@ -11,13 +11,21 @@ ZZ_IS1ControlThread::~ZZ_IS1ControlThread() int ZZ_IS1ControlThread::StartTestAcquisition() { - m_bFlagIsCollecting = true; - while (m_bFlagIsCollecting) - { - //QMutexLocker locker(&m_Mutex); - QThread::msleep(1000); - qDebug() << "ThreadIS1Controller busy"; - } +// m_bFlagIsCollecting = true; +// while (m_bFlagIsCollecting) +// { +// //QMutexLocker locker(&m_Mutex); +// QThread::msleep(1000); +// qDebug() << "ThreadIS1Controller busy"; +// } +// qDebug() << "ThreadIS1Controller quit"; + + qDebug() << "ThreadIS1Controller busy"; + QThread::msleep(1000); qDebug() << "ThreadIS1Controller quit"; + + //m_pwcFinish->wakeAll(); + emit SignalAcqFinished(1,1); + return 0; } diff --git a/source/Thread/ThreadiSIFController.cpp b/source/Thread/ThreadiSIFController.cpp index 31bca6c..d003fc8 100644 --- a/source/Thread/ThreadiSIFController.cpp +++ b/source/Thread/ThreadiSIFController.cpp @@ -12,14 +12,21 @@ ZZ_iSIFControlThread::~ZZ_iSIFControlThread() int ZZ_iSIFControlThread::StartTestAcquisition() { - m_bFlagIsCollecting = true; - while (m_bFlagIsCollecting) - { - //QMutexLocker locker(&m_Mutex); - QThread::msleep(1000); - qDebug() << "ThreadiSIFController busy"; - } +// m_bFlagIsCollecting = true; +// while (m_bFlagIsCollecting) +// { +// //QMutexLocker locker(&m_Mutex); +// QThread::msleep(1000); +// qDebug() << "ThreadiSIFController busy"; +// } +// qDebug() << "ThreadiSIFController quit"; + + qDebug() << "ThreadiSIFController busy"; + QThread::msleep(2000); qDebug() << "ThreadiSIFController quit"; + + //m_pwcFinish->wakeAll(); + emit SignalAcqFinished(0,1); return 0; } diff --git a/source/pch.h b/source/pch.h index 8022a56..46a25eb 100644 --- a/source/pch.h +++ b/source/pch.h @@ -9,4 +9,11 @@ #include #include #include -#include \ No newline at end of file +#include +#include +////////////////////////////json +#include +#include +#include +#include +#include From fdffb86c96cf60c77ac8096fb3786495cf6aa410 Mon Sep 17 00:00:00 2001 From: zhangzhuo Date: Thu, 18 Nov 2021 17:42:14 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E4=BF=A1=E6=81=AF=E6=96=87=E4=BB=B6=E7=9A=84=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=AF=BB=E5=86=99?= =?UTF-8?q?JSON=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=82=E8=BA=AB=E4=BD=93=E5=8E=9F=E5=9B=A0=E8=BF=99?= =?UTF-8?q?=E4=B8=A4=E5=A4=A9=E6=95=88=E7=8E=87=E4=B8=8D=E9=AB=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 8 +- source/ATP/ATPControl_Serial_QT.h | 16 ++++ source/ATP/ZZ_Types.h | 87 ++++++++++++++++++- source/Settings/SystemConfigger.cpp | 110 +++++++++++++++++++++++- source/Settings/SystemConfigger.h | 32 +++++-- source/Thread/ATPAbstractController.cpp | 14 +-- source/Thread/ATPAbstractController.h | 9 +- source/Thread/ThreadDataGrabber.cpp | 58 ++++++++++--- source/Thread/ThreadDataGrabber.h | 17 ++-- source/pch.h | 2 + 10 files changed, 312 insertions(+), 41 deletions(-) diff --git a/main.cpp b/main.cpp index 95784a5..e6d327a 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,7 @@ #include "ATPControl_Serial_QT.h" #include "Logger.h" #include "ThreadDataGrabber.h" +#include "SystemConfigger.h" using namespace std; #pragma once @@ -14,6 +15,11 @@ int main(int argc, char *argv[]) QString qstrTest="This is a test message 2"; qDebug() << qstrTest; cout << "This is a test message"; + //////////////////////////////////////////////////////////////////////////configger + ZZ_SysConfigger test; + test.Initialize(); + test.LoadSettingsFromFile_System(); + test.LoadSettings_Test(); //////////////////////////////////////////////////////////////////////////test ZZ_DataGrabberThread m_test; //m_test.GrabOnce(); @@ -24,7 +30,7 @@ int main(int argc, char *argv[]) m_pqDataGrabberThreadHolder->start(); - m_test.TestGrab(); + m_test.TestGrabOnce(); //QThread::msleep(5000); diff --git a/source/ATP/ATPControl_Serial_QT.h b/source/ATP/ATPControl_Serial_QT.h index a558667..9a77150 100644 --- a/source/ATP/ATPControl_Serial_QT.h +++ b/source/ATP/ATPControl_Serial_QT.h @@ -1,3 +1,6 @@ +////////////////////////////////////////////////////////////////////////// +//ATP类设备串口通信类 +////////////////////////////////////////////////////////////////////////// #pragma once #include "pch.h" #include "ZZ_Types.h" @@ -14,25 +17,38 @@ public: virtual ~ZZ_ATPControl_Serial_Qt(); public: + //设置波特率 int SetBaudRate(int iBaud); + + //初始化设备 int ATPInitialize( ZZ_U8 ucPortNumber); + //关闭设备 int ATPClose(); + + //单次测试采集 用以确认设备像素数 int SingleShot(int &iPixels); + //单次数据采集 int SingleShot(ATPDataFrame &dfData); + //单次暗背景采集 int SingleShotDark(ATPDataFrame &dfData); int SingleShotDeducted(ATPDataFrame &dfData); + //设置曝光时间 int SetExposureTime(int iExposureTimeInMS); + //获取曝光时间设置 int GetExposureTime(int &iExposureTimeInMS); //int GetWaveLength(float *pfWaveLength); + //获取设备信息 int GetDeviceInfo(); + //获取设备特征数据 int GetDeviceAttribute(); int GetDeviceListInfo(); //use type name to enum int GetDeviceTemperature(float &fTemperature); + //自动曝光 int PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float &fPredictedExposureTime); #ifdef _DEBUG diff --git a/source/ATP/ZZ_Types.h b/source/ATP/ZZ_Types.h index 00a3007..c6a5aaf 100644 --- a/source/ATP/ZZ_Types.h +++ b/source/ATP/ZZ_Types.h @@ -1,3 +1,6 @@ +////////////////////////////////////////////////////////////////////////// +//类型说明文件 +////////////////////////////////////////////////////////////////////////// #pragma once #include "pch.h" @@ -7,7 +10,7 @@ namespace ZZ_MISCDEF typedef unsigned short int ZZ_U16; typedef unsigned long int ZZ_U32; - + //ATP指令转译 namespace ATP { const int MAX_SPECTRUM_SIZE = 4096; @@ -46,6 +49,7 @@ namespace ZZ_MISCDEF ATP6500 }; + //数据帧描述 typedef struct tagATPDataFrame { unsigned short usExposureTime; @@ -54,12 +58,14 @@ namespace ZZ_MISCDEF double dTimes = 0; }ATPDataFrame; + //设备信息描述 typedef struct tagATPDeviceInfo { std::string strPN; std::string strSN; }ATPDeviceInfo; + //设备特征描述 typedef struct tagATPDeviceAttribute { int iPixels; @@ -74,24 +80,101 @@ namespace ZZ_MISCDEF } + //运行参数 + namespace ZZ_RUNPARAMS + { + typedef struct tagAcquisitionTimeSettings + { + QTime qtStartTime; + QTime qtStopTime; + QTime qtInterval; + }AcqTimeSettings; + + typedef struct tagATPCalibrationSettings + { + //Up0 Down1,2,3 + QString qsISIF_CalibrationFilePath[4]; + QString qsIS1_CalibrationFilePath[4]; + + }ATPCalibrationSettings; + + + } + + //系统数据文件结构 namespace ZZ_DATAFILE { typedef struct tagEnvironmentalContext { + QString qstrUTCDateTime; + QString qstrLocation; + QString qstrGPS_longtitude; + QString qstrGPS_Latitude; + QString qstrGPS_Altitude; + QString qstrGPS_North; + QString qstrCaseTemperature; + QString qstrCaseHumidity; + }EContext; + + typedef struct tagManmadeEnviromentalContext + { + QString qstrOriFileName; + QString qstrInstallationTime; + QString qstrISIFCalibrationTime; + QString qstrIS1CalibrationTime; + QString qstrNameOfMaintenanceStaff; + QString qstrPhoneNumberOfMaintenanceStaff; + QString qstrDownloadUserID; + QString qstrDownlaodAddress; + QString qstrHTTPServer; + }MEContext; - }EnvironmentalContext; typedef struct tagIS1Information { + QString qstrSN_ATP; + QString qstrSN_IRIS; + QString qstrCalFile_U0; + QString qstrCalFile_D1; + QString qstrCalFile_D2; + QString qstrCalFile_D3; + int iPixelCount; + + int iExposureTimeInMS_U0; + int iExposureTimeInMS_D1; + int iExposureTimeInMS_D2; + int iExposureTimeInMS_D3; + + float fTemperature_U0; + float fTemperature_D1; + float fTemperature_D2; + float fTemperature_D3; }IS1Info; typedef struct tagISIFInformation { + QString qstrSN_ATP; + QString qstrSN_IRIS; + QString qstrCalFile_U0; + QString qstrCalFile_D1; + QString qstrCalFile_D2; + QString qstrCalFile_D3; + int iPixelCount; + + int iExposureTimeInMS_U0; + int iExposureTimeInMS_D1; + int iExposureTimeInMS_D2; + int iExposureTimeInMS_D3; + + float fTemperature_U0; + float fTemperature_D1; + float fTemperature_D2; + float fTemperature_D3; }ISIFInfo; typedef struct tagATPDataHeader diff --git a/source/Settings/SystemConfigger.cpp b/source/Settings/SystemConfigger.cpp index 88b667b..97c731f 100644 --- a/source/Settings/SystemConfigger.cpp +++ b/source/Settings/SystemConfigger.cpp @@ -2,24 +2,126 @@ ZZ_SysConfigger::ZZ_SysConfigger(QObject *parent /*= nullptr*/) { - m_qstrFilePath = QCoreApplication::applicationDirPath()+ "/Settings/DeviceSettings.ini"; +#ifdef _DEBUG + m_qstrFilePath = QCoreApplication::applicationDirPath() + "home/data/Settings/DeviceSettings.ini"; + m_qstrJSONConfigFilePath = QCoreApplication::applicationDirPath() + "/home/data/Settings/config.json"; +#else + m_qstrJSONConfigFilePath = ("/home/data/Setting/config.json"); +#endif // DEBUG } ZZ_SysConfigger::~ZZ_SysConfigger() { + if (qfConfig.isOpen()) + { + qfConfig.close(); + } } - int ZZ_SysConfigger::LoadSettings_IS1() + int ZZ_SysConfigger::Initialize() + { + qfConfig.setFileName(m_qstrJSONConfigFilePath); + bool bRes = qfConfig.open(QIODevice::ReadOnly); + if (!bRes) + { + qDebug() << "QFile open config file Err."; + return 1; + } + + m_qbaJData = qfConfig.readAll(); + m_qjdJDoc= QJsonDocument::fromJson(m_qbaJData, &m_qjpeJErr); + if (m_qjpeJErr.error != QJsonParseError::NoError) + { + qDebug() << m_qjpeJErr.errorString(); + return 2; + } + m_qjoJObj = m_qjdJDoc.object(); + return 0; + } + + int ZZ_SysConfigger::LoadSettingsFromFile_IS1() { return 0; } - int ZZ_SysConfigger::LoadSettings_iSIF() + int ZZ_SysConfigger::LoadSettingsFromFile_iSIF() { return 0; } - int ZZ_SysConfigger::LoadSettings_System() + int ZZ_SysConfigger::LoadSettingsFromFile_System() { + // QString qstr = m_qjoJObj.value("IntervalTime").toString(); + m_struAcqTime.qtStartTime=QTime::fromString(m_qjoJObj.value("BeginTime").toString(), "hh:mm"); + if (!m_struAcqTime.qtStartTime.isValid()) + { + qDebug() << "Invalid BeginTime"; + return 1; + } + + m_struAcqTime.qtInterval = QTime::fromString(m_qjoJObj.value("IntervalTime").toString(), "mm"); + if (!m_struAcqTime.qtInterval.isValid()) + { + qDebug() << "Invalid BeginTime"; + return 1; + } + + m_struAcqTime.qtStopTime = QTime::fromString(m_qjoJObj.value("EndTime").toString(), "hh:mm"); + if (!m_struAcqTime.qtStopTime.isValid()) + { + qDebug() << "Invalid BeginTime"; + return 1; + } + return 0; } + + int ZZ_SysConfigger::LoadSettingsFromFile_MISC() + { + m_struEC.qstrLocation = m_qjoJObj.value("Location").toString(); + m_struEC.qstrGPS_Altitude = m_qjoJObj.value("GPS_Altitude").toString(); + m_struEC.qstrGPS_Latitude = m_qjoJObj.value("GPS_Latitude").toString(); + m_struEC.qstrGPS_longtitude = m_qjoJObj.value("GPS_Longtitude").toString(); + m_struEC.qstrGPS_North = m_qjoJObj.value("GPS_North").toString(); + + m_struMEC.qstrInstallationTime = m_qjoJObj.value("InstallationTime").toString(); + m_struMEC.qstrISIFCalibrationTime = m_qjoJObj.value("ISIFCalibrationTime").toString(); + m_struMEC.qstrIS1CalibrationTime = m_qjoJObj.value("IS1CalibrationTime").toString(); + m_struMEC.qstrNameOfMaintenanceStaff = m_qjoJObj.value("NameOfMaintenanceStaff").toString(); + m_struMEC.qstrPhoneNumberOfMaintenanceStaff = m_qjoJObj.value("PhoneNumberOfMaintenanceStaff").toString(); + m_struMEC.qstrDownloadUserID = m_qjoJObj.value("DownloadUserID").toString(); + m_struMEC.qstrDownlaodAddress = m_qjoJObj.value("DownlaodAddress").toString(); + + m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString(); + m_struIS1Info.qstrCalFile_D1 = m_qjoJObj.value("IS1DownCalFile1").toString(); + m_struIS1Info.qstrCalFile_D2 = m_qjoJObj.value("IS1DownCalFile2").toString(); + m_struIS1Info.qstrCalFile_D3 = m_qjoJObj.value("IS1DownCalFile3").toString(); + + m_struISIFInfo.qstrCalFile_U0 = m_qjoJObj.value("SIFUpCalFile").toString(); + m_struISIFInfo.qstrCalFile_D1 = m_qjoJObj.value("SIFDownCalFile1").toString(); + m_struISIFInfo.qstrCalFile_D2 = m_qjoJObj.value("SIFDownCalFile2").toString(); + m_struISIFInfo.qstrCalFile_D3 = m_qjoJObj.value("SIFDownCalFile3").toString(); + + return 0; + } + + int ZZ_SysConfigger::LoadSettings_Test() + { + QFile qfTest(m_qstrJSONConfigFilePath); + + qfTest.open(QFile::ReadOnly); + + QByteArray qbJData = qfTest.readAll(); + + QJsonParseError jerr; + QJsonDocument jdoc(QJsonDocument::fromJson(qbJData, &jerr)); + if (jerr.error!= QJsonParseError::NoError) + { + qDebug() << jerr.errorString(); + } + + QJsonObject rootobj = jdoc.object(); + QStringList key = rootobj.keys(); + QString qtest1 = rootobj.value(rootobj.keys().at(15)).toString(); + return 0; + } diff --git a/source/Settings/SystemConfigger.h b/source/Settings/SystemConfigger.h index bf7b9c1..6124b13 100644 --- a/source/Settings/SystemConfigger.h +++ b/source/Settings/SystemConfigger.h @@ -1,7 +1,8 @@ #pragma once #include "pch.h" - - +#include "ZZ_Types.h" +using namespace ZZ_MISCDEF::ZZ_RUNPARAMS; +using namespace ZZ_MISCDEF::ZZ_DATAFILE; class ZZ_SysConfigger :public QObject @@ -12,10 +13,31 @@ public: ZZ_SysConfigger(QObject *parent = nullptr); virtual ~ZZ_SysConfigger(); public: - int LoadSettings_IS1(); - int LoadSettings_iSIF(); - int LoadSettings_System(); + int Initialize(); + int LoadSettingsFromFile_IS1(); + int LoadSettingsFromFile_iSIF(); + int LoadSettingsFromFile_System(); + int LoadSettingsFromFile_MISC(); + + int LoadSettings_Test(); + +public: + AcqTimeSettings m_struAcqTime; + EContext m_struEC; + MEContext m_struMEC; + IS1Info m_struIS1Info; + ISIFInfo m_struISIFInfo; private: QString m_qstrFilePath; + QString m_qstrJSONConfigFilePath; + QFile qfConfig; + + QByteArray m_qbaJData; + QJsonParseError m_qjpeJErr; + QJsonObject m_qjoJObj; + QJsonDocument m_qjdJDoc; + + + }; \ No newline at end of file diff --git a/source/Thread/ATPAbstractController.cpp b/source/Thread/ATPAbstractController.cpp index 25a1654..dae5190 100644 --- a/source/Thread/ATPAbstractController.cpp +++ b/source/Thread/ATPAbstractController.cpp @@ -9,12 +9,12 @@ ZZ_ATPAbsCtrlThread::~ZZ_ATPAbsCtrlThread() { } - -void ZZ_ATPAbsCtrlThread::SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex) -{ - m_pwcFinish = pFinish; - m_pMutex = pMutex; -} +// +// void ZZ_ATPAbsCtrlThread::SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex) +// { +// m_pwcFinish = pFinish; +// m_pMutex = pMutex; +// } int ZZ_ATPAbsCtrlThread::StartTestAcquisition() { @@ -27,7 +27,7 @@ int ZZ_ATPAbsCtrlThread::StartTestAcquisition() } qDebug() << "ThreadATPAbsController quit"; - m_pwcFinish->wakeAll(); + //m_pwcFinish->wakeAll(); emit SignalAcqFinished(0,1); return 0; } diff --git a/source/Thread/ATPAbstractController.h b/source/Thread/ATPAbstractController.h index 1d17ff4..4930a70 100644 --- a/source/Thread/ATPAbstractController.h +++ b/source/Thread/ATPAbstractController.h @@ -1,3 +1,6 @@ +////////////////////////////////////////////////////////////////////////// +//ATP设备基类 +////////////////////////////////////////////////////////////////////////// #pragma once #include "pch.h" #include "ATPControl_Serial_QT.h" @@ -12,15 +15,15 @@ public: public: std::atomic m_bFlagIsCollecting; - QMutex *m_pMutex; - QWaitCondition *m_pwcFinish; + //QMutex *m_pMutex; + //QWaitCondition *m_pwcFinish; public: ZZ_ATPAbsCtrlThread(QObject* parent = nullptr); virtual ~ZZ_ATPAbsCtrlThread(); private: ZZ_ATPControl_Serial_Qt m_iSIFctrl; public slots: - virtual void SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex); + //virtual void SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex); virtual int StartTestAcquisition(); int StopTestAcquisition(); signals: diff --git a/source/Thread/ThreadDataGrabber.cpp b/source/Thread/ThreadDataGrabber.cpp index a8cf620..1e8c0f9 100644 --- a/source/Thread/ThreadDataGrabber.cpp +++ b/source/Thread/ThreadDataGrabber.cpp @@ -3,13 +3,19 @@ ZZ_DataGrabberThread::ZZ_DataGrabberThread(QObject* parent /*= nullptr*/) { m_bFlagIsCollecting = false; + InitThreadStatus(); SetupSignals(); StartGrabberThread(); + + //m_iTotalThreads = 2; } ZZ_DataGrabberThread::~ZZ_DataGrabberThread() { - + if (m_piFlagCaptureThreadStatus!=NULL) + { + delete m_piFlagCaptureThreadStatus; + } } int ZZ_DataGrabberThread::SetupSignals() @@ -17,9 +23,13 @@ int ZZ_DataGrabberThread::SetupSignals() connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StartTestAcquisition); connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StartTestAcquisition); - connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection); - connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection); + //connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection); + //connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection); + connect(&m_tcISIFCtrlThread, &ZZ_iSIFControlThread::SignalAcqFinished, this, &ZZ_DataGrabberThread::HandleThreadEvent); + connect(&m_tcIS1CtrlThread, &ZZ_IS1ControlThread::SignalAcqFinished, this, &ZZ_DataGrabberThread::HandleThreadEvent); + + connect(this, &ZZ_DataGrabberThread::SignalGrabOnceFinished, this, &ZZ_DataGrabberThread::TestGrabOnce); //m_tcISIFCtrlThread.SetWaitCondition(&m_wcWaitISIF,&m_mTestMutex); //m_tcIS1CtrlThread.SetWaitCondition(&m_wcWaitIS1, &m_mTestMutex); return 0; @@ -38,6 +48,16 @@ int ZZ_DataGrabberThread::StartGrabberThread() return 0; } +int ZZ_DataGrabberThread::InitThreadStatus() +{ + m_piFlagCaptureThreadStatus = new int[m_iTotalThreads]; + for (int i=0;i< m_iTotalThreads;i++) + { + m_piFlagCaptureThreadStatus[i] = 0; + } + return 0; +} + int ZZ_DataGrabberThread::TestGrab() { m_bFlagIsCollecting = true; @@ -55,6 +75,12 @@ int ZZ_DataGrabberThread::TestGrab() return 0; } +int ZZ_DataGrabberThread::TestGrabOnce() +{ + emit SignalStartGrabOnce(); + return 0; +} + int ZZ_DataGrabberThread::TestStopGrab() { //emit SignalStopGrab(); @@ -64,19 +90,23 @@ int ZZ_DataGrabberThread::TestStopGrab() return 0; } -int ZZ_DataGrabberThread::handleThreadEvent(int x, int value) +int ZZ_DataGrabberThread::HandleThreadEvent(int iThreadID, int iFlagStatus) { - ProcessingThreadAactive[x] = value; + m_piFlagCaptureThreadStatus[iThreadID] = iFlagStatus; - // Check if threads are finished - for (int i = 0; i < numThreads; i++) + bool bFinished = true; + for (int i = 0; i < m_iTotalThreads; i++) + { + if (m_piFlagCaptureThreadStatus[i] != 1) { - bool finished = true; - if (ProcessingThreadAactive[i] == true) - { - finished = false; - // Do end actions here - break; - } + bFinished = false; + break; } + } + + if (bFinished) + { + emit SignalGrabOnceFinished(); + } + return 0; } diff --git a/source/Thread/ThreadDataGrabber.h b/source/Thread/ThreadDataGrabber.h index 4a64fea..52c5126 100644 --- a/source/Thread/ThreadDataGrabber.h +++ b/source/Thread/ThreadDataGrabber.h @@ -1,3 +1,6 @@ +////////////////////////////////////////////////////////////////////////// +//主采集控制线程 +////////////////////////////////////////////////////////////////////////// #pragma once #include"pch.h" #include "ThreadIS1Controller.h" @@ -11,8 +14,8 @@ public: ~ZZ_DataGrabberThread(); public: - QWaitCondition m_wcWaitISIF,m_wcWaitIS1; - QMutex m_mTestMutex; + //QWaitCondition m_wcWaitISIF,m_wcWaitIS1; + //QMutex m_mTestMutex; private: ZZ_iSIFControlThread m_tcISIFCtrlThread; ZZ_IS1ControlThread m_tcIS1CtrlThread; @@ -20,18 +23,22 @@ private: QThread* m_pqIS1ThreadHolder; std::atomic m_bFlagIsCollecting; + std::atomic m_bFlagIsCollectingFinished; + int *m_piFlagCaptureThreadStatus; + const int m_iTotalThreads = 2; public: int SetupSignals(); int StartGrabberThread(); private: - + int InitThreadStatus(); public slots: int TestGrab(); + int TestGrabOnce(); int TestStopGrab(); - int handleThreadEvent(int x, int value); + int HandleThreadEvent(int iThreadID, int iFlagStatus); signals: void SignalStartGrabOnce(); void SignalStopGrab(); - + void SignalGrabOnceFinished(); }; diff --git a/source/pch.h b/source/pch.h index 46a25eb..32f6d26 100644 --- a/source/pch.h +++ b/source/pch.h @@ -17,3 +17,5 @@ #include #include #include +////////////////////////////time +#include From 6452b3a514ce2a8de0995b7b65ed05fc35a3c3c7 Mon Sep 17 00:00:00 2001 From: zhangzhuo Date: Fri, 19 Nov 2021 15:39:31 +0800 Subject: [PATCH 4/6] test --- main.cpp | 2 +- source/ATP/ZZ_Types.h | 2 +- source/Settings/SystemConfigger.cpp | 24 +++++++++++++----------- source/Thread/ThreadDataGrabber.cpp | 20 ++++++++++++++++++++ source/Thread/ThreadDataGrabber.h | 11 +++++++++-- source/pch.h | 3 ++- 6 files changed, 46 insertions(+), 16 deletions(-) diff --git a/main.cpp b/main.cpp index e6d327a..cc74c72 100644 --- a/main.cpp +++ b/main.cpp @@ -30,7 +30,7 @@ int main(int argc, char *argv[]) m_pqDataGrabberThreadHolder->start(); - m_test.TestGrabOnce(); + m_test.StartGrab(); //QThread::msleep(5000); diff --git a/source/ATP/ZZ_Types.h b/source/ATP/ZZ_Types.h index c6a5aaf..1651293 100644 --- a/source/ATP/ZZ_Types.h +++ b/source/ATP/ZZ_Types.h @@ -108,7 +108,7 @@ namespace ZZ_MISCDEF { QString qstrUTCDateTime; QString qstrLocation; - QString qstrGPS_longtitude; + QString qstrGPS_Longtitude; QString qstrGPS_Latitude; QString qstrGPS_Altitude; QString qstrGPS_North; diff --git a/source/Settings/SystemConfigger.cpp b/source/Settings/SystemConfigger.cpp index 97c731f..b12d211 100644 --- a/source/Settings/SystemConfigger.cpp +++ b/source/Settings/SystemConfigger.cpp @@ -41,12 +41,22 @@ int ZZ_SysConfigger::LoadSettingsFromFile_IS1() { + m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString(); + m_struIS1Info.qstrCalFile_D1 = m_qjoJObj.value("IS1DownCalFile1").toString(); + m_struIS1Info.qstrCalFile_D2 = m_qjoJObj.value("IS1DownCalFile2").toString(); + m_struIS1Info.qstrCalFile_D3 = m_qjoJObj.value("IS1DownCalFile3").toString(); + + return 0; } int ZZ_SysConfigger::LoadSettingsFromFile_iSIF() { - return 0; + m_struISIFInfo.qstrCalFile_U0 = m_qjoJObj.value("SIFUpCalFile").toString(); + m_struISIFInfo.qstrCalFile_D1 = m_qjoJObj.value("SIFDownCalFile1").toString(); + m_struISIFInfo.qstrCalFile_D2 = m_qjoJObj.value("SIFDownCalFile2").toString(); + m_struISIFInfo.qstrCalFile_D3 = m_qjoJObj.value("SIFDownCalFile3").toString(); + return 0; } int ZZ_SysConfigger::LoadSettingsFromFile_System() @@ -81,7 +91,7 @@ m_struEC.qstrLocation = m_qjoJObj.value("Location").toString(); m_struEC.qstrGPS_Altitude = m_qjoJObj.value("GPS_Altitude").toString(); m_struEC.qstrGPS_Latitude = m_qjoJObj.value("GPS_Latitude").toString(); - m_struEC.qstrGPS_longtitude = m_qjoJObj.value("GPS_Longtitude").toString(); + m_struEC.qstrGPS_Longtitude = m_qjoJObj.value("GPS_Longtitude").toString(); m_struEC.qstrGPS_North = m_qjoJObj.value("GPS_North").toString(); m_struMEC.qstrInstallationTime = m_qjoJObj.value("InstallationTime").toString(); @@ -92,15 +102,7 @@ m_struMEC.qstrDownloadUserID = m_qjoJObj.value("DownloadUserID").toString(); m_struMEC.qstrDownlaodAddress = m_qjoJObj.value("DownlaodAddress").toString(); - m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString(); - m_struIS1Info.qstrCalFile_D1 = m_qjoJObj.value("IS1DownCalFile1").toString(); - m_struIS1Info.qstrCalFile_D2 = m_qjoJObj.value("IS1DownCalFile2").toString(); - m_struIS1Info.qstrCalFile_D3 = m_qjoJObj.value("IS1DownCalFile3").toString(); - - m_struISIFInfo.qstrCalFile_U0 = m_qjoJObj.value("SIFUpCalFile").toString(); - m_struISIFInfo.qstrCalFile_D1 = m_qjoJObj.value("SIFDownCalFile1").toString(); - m_struISIFInfo.qstrCalFile_D2 = m_qjoJObj.value("SIFDownCalFile2").toString(); - m_struISIFInfo.qstrCalFile_D3 = m_qjoJObj.value("SIFDownCalFile3").toString(); + return 0; } diff --git a/source/Thread/ThreadDataGrabber.cpp b/source/Thread/ThreadDataGrabber.cpp index 1e8c0f9..30c20f7 100644 --- a/source/Thread/ThreadDataGrabber.cpp +++ b/source/Thread/ThreadDataGrabber.cpp @@ -2,6 +2,7 @@ ZZ_DataGrabberThread::ZZ_DataGrabberThread(QObject* parent /*= nullptr*/) { + m_GrabTimer = new QTimer(this); m_bFlagIsCollecting = false; InitThreadStatus(); SetupSignals(); @@ -18,8 +19,15 @@ ZZ_DataGrabberThread::~ZZ_DataGrabberThread() } } +void ZZ_DataGrabberThread::SetGrabTimer(AcqTimeSettings struAcqTime) +{ + m_struAcqTime = struAcqTime; +} + int ZZ_DataGrabberThread::SetupSignals() { + connect(m_GrabTimer, &QTimer::timeout, this, &ZZ_DataGrabberThread::OnTimeCounter); + connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StartTestAcquisition); connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StartTestAcquisition); @@ -35,6 +43,12 @@ int ZZ_DataGrabberThread::SetupSignals() return 0; } +int ZZ_DataGrabberThread::StartGrab() +{ + m_GrabTimer->start(1000); + return 0; +} + int ZZ_DataGrabberThread::StartGrabberThread() { m_pqISIFThreadHolder = new QThread(); @@ -110,3 +124,9 @@ int ZZ_DataGrabberThread::HandleThreadEvent(int iThreadID, int iFlagStatus) } return 0; } + +int ZZ_DataGrabberThread::OnTimeCounter() +{ + qDebug() << "OnTimeCounter"; + return 0; +} diff --git a/source/Thread/ThreadDataGrabber.h b/source/Thread/ThreadDataGrabber.h index 52c5126..0c0fd64 100644 --- a/source/Thread/ThreadDataGrabber.h +++ b/source/Thread/ThreadDataGrabber.h @@ -5,7 +5,7 @@ #include"pch.h" #include "ThreadIS1Controller.h" #include "ThreadiSIFController.h" - +using namespace ZZ_MISCDEF::ZZ_RUNPARAMS; class ZZ_DataGrabberThread :public QObject { Q_OBJECT @@ -27,11 +27,18 @@ private: int *m_piFlagCaptureThreadStatus; const int m_iTotalThreads = 2; + QTimer *m_GrabTimer; + AcqTimeSettings m_struAcqTime; public: + void SetGrabTimer(AcqTimeSettings struAcqTime); + int SetupSignals(); - int StartGrabberThread(); + int StartGrab(); + private: + int OnTimeCounter(); int InitThreadStatus(); + int StartGrabberThread(); public slots: int TestGrab(); int TestGrabOnce(); diff --git a/source/pch.h b/source/pch.h index 32f6d26..892a364 100644 --- a/source/pch.h +++ b/source/pch.h @@ -1,7 +1,6 @@ #pragma once #include #include -#include #include #include #include @@ -18,4 +17,6 @@ #include #include ////////////////////////////time +#include #include +#include From 59b8e15c8e7fdf6b6c1848424450726a33a9bde0 Mon Sep 17 00:00:00 2001 From: zhangzhuo Date: Fri, 19 Nov 2021 15:43:34 +0800 Subject: [PATCH 5/6] 333333 --- source/Thread/ThreadISIFController.h | 1 + source/Thread/ThreadiSIFController.cpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/source/Thread/ThreadISIFController.h b/source/Thread/ThreadISIFController.h index 37ff6d4..d90946e 100644 --- a/source/Thread/ThreadISIFController.h +++ b/source/Thread/ThreadISIFController.h @@ -14,4 +14,5 @@ public: ~ZZ_iSIFControlThread(); public slots: int StartTestAcquisition(); + int test(); }; \ No newline at end of file diff --git a/source/Thread/ThreadiSIFController.cpp b/source/Thread/ThreadiSIFController.cpp index d003fc8..9ce3085 100644 --- a/source/Thread/ThreadiSIFController.cpp +++ b/source/Thread/ThreadiSIFController.cpp @@ -10,6 +10,11 @@ ZZ_iSIFControlThread::~ZZ_iSIFControlThread() } +int ZZ_iSIFControlThread::test() +{ + return 0; +} + int ZZ_iSIFControlThread::StartTestAcquisition() { // m_bFlagIsCollecting = true; From 33c422fcac5f6e3e44c8fe84657aed4c90ff66e3 Mon Sep 17 00:00:00 2001 From: zhangzhuo Date: Fri, 19 Nov 2021 16:00:10 +0800 Subject: [PATCH 6/6] fasdfasdf --- .gitignore | 1 + source/Thread/ThreadISIFController.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6f373e1..e4a122b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /build /.vs +/build_d diff --git a/source/Thread/ThreadISIFController.h b/source/Thread/ThreadISIFController.h index d90946e..3b9be39 100644 --- a/source/Thread/ThreadISIFController.h +++ b/source/Thread/ThreadISIFController.h @@ -14,5 +14,5 @@ public: ~ZZ_iSIFControlThread(); public slots: int StartTestAcquisition(); - int test(); + int test();// }; \ No newline at end of file