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