2021-11-26 17:32:50 +08:00
# include "MainDataGrabber.h"
CMainDataGrabber : : CMainDataGrabber ( QObject * parent /*= nullptr*/ )
{
2021-12-02 18:07:29 +08:00
m_piFlagCaptureThreadStatus_Signal = NULL ;
m_piFlagCaptureThreadStatus_Dark = NULL ;
2021-12-03 10:43:25 +08:00
2021-12-13 17:18:24 +08:00
//m_GrabTimer = new QTimer(this);
2021-12-03 10:43:25 +08:00
2024-10-30 17:00:12 +08:00
m_iFlagIsWorkingTime = 1 ;
2021-12-02 18:07:29 +08:00
m_iFlagIsCapturing = false ;
2021-12-03 10:43:25 +08:00
m_iFlagIsCapturing_Signal = false ;
m_iFlagIsCapturing_Dark = false ;
2022-01-04 17:32:19 +08:00
//qRegisterMetaType<DataFrame>("DataFrame");
//qRegisterMetaType<vector<vector<DataFrame>>>();
2021-11-26 17:32:50 +08:00
}
CMainDataGrabber : : ~ CMainDataGrabber ( )
{
if ( m_pControlThread . size ( ) ! = 0 )
{
for ( int i = 0 ; i < m_pControlThread . size ( ) ; i + + )
{
delete m_pControlThread [ i ] ;
}
}
m_pControlThread . clear ( ) ;
2021-12-02 18:07:29 +08:00
if ( m_piFlagCaptureThreadStatus_Signal ! = NULL )
{
delete m_piFlagCaptureThreadStatus_Signal ;
}
if ( m_piFlagCaptureThreadStatus_Dark ! = NULL )
{
delete m_piFlagCaptureThreadStatus_Dark ;
}
2021-12-13 17:18:24 +08:00
// if (m_GrabTimer!=NULL)
// {
// m_GrabTimer->stop();
// delete m_GrabTimer;
// }
2021-12-03 10:43:25 +08:00
}
void CMainDataGrabber : : Delay_MSec ( ZZ_U16 usMS )
{
QEventLoop qeLoop ;
QTimer : : singleShot ( usMS , & qeLoop , SLOT ( quit ( ) ) ) ;
qeLoop . exec ( ) ;
2021-11-26 17:32:50 +08:00
}
2021-11-24 17:38:18 +08:00
2021-12-08 17:43:27 +08:00
void CMainDataGrabber : : SubDataFrame ( DataFrame & dfLeft , DataFrame const dfRight , int iCount )
{
for ( int i = 0 ; i < iCount ; i + + )
{
dfLeft . lData [ i ] = dfLeft . lData [ i ] - dfRight . lData [ i ] ;
}
}
2021-12-14 14:52:29 +08:00
int CMainDataGrabber : : SetContext ( RunTimeGrabberParams struGrabberRTParams , DataFileProcessor & dfpSaver , Scheduler & sScheduler )
{
SetGrabberParams ( struGrabberRTParams ) ;
SetGrabberFileProcessor ( dfpSaver ) ;
SetTimer ( sScheduler ) ;
return 0 ;
}
2022-01-04 17:32:19 +08:00
int CMainDataGrabber : : SetContext ( RunTimeGrabberParams struGrabberRTParams , DataFileProcessor & dfpSaver , Scheduler & sScheduler , CMainDataUploader & mduUploader )
{
2022-01-13 17:03:16 +08:00
2022-01-04 17:32:19 +08:00
SetGrabberParams ( struGrabberRTParams ) ;
SetGrabberFileProcessor ( dfpSaver ) ;
SetTimer ( sScheduler ) ;
SetUploader ( mduUploader /*, struGrabberRTParams*/ ) ;
return 0 ;
}
2021-12-14 14:52:29 +08:00
void CMainDataGrabber : : Init_Normal ( )
{
InitThreadStatus ( ) ;
InitializeWorkers ( ) ;
StartWorkers ( ) ;
2022-01-20 09:36:35 +08:00
SetupMsgPipelines ( ) ;
2021-12-14 14:52:29 +08:00
}
2021-11-24 17:38:18 +08:00
int CMainDataGrabber : : SetGrabberParams ( RunTimeGrabberParams struGrabberRTParams )
{
m_struAcqTime = struGrabberRTParams . atsParams ;
2021-11-26 17:32:50 +08:00
m_struDeviceContext = struGrabberRTParams . fscParams ;
2021-12-02 18:07:29 +08:00
m_struAcqPosSetting = struGrabberRTParams . apsParams ;
m_struLinearShutterContext = struGrabberRTParams . lscParam ;
2021-11-26 17:32:50 +08:00
m_iTotalThreads = m_struDeviceContext . ucDeviceNumber ;
2022-01-04 17:32:19 +08:00
m_struRTGP = struGrabberRTParams ;
2021-11-26 17:32:50 +08:00
return 0 ;
}
2021-12-06 17:50:39 +08:00
int CMainDataGrabber : : SetGrabberFileProcessor ( DataFileProcessor & dfpSaver )
{
m_pdfpSaver = & dfpSaver ;
return 0 ;
}
2021-12-13 17:18:24 +08:00
int CMainDataGrabber : : SetTimer ( Scheduler & sScheduler )
{
m_psScheduler = & sScheduler ;
return 0 ;
}
2022-01-04 17:32:19 +08:00
int CMainDataGrabber : : SetUploader ( CMainDataUploader & mduUploader /*, RunTimeGrabberParams struGrabberRTParams*/ )
{
m_pmduUploader = & mduUploader ;
return 0 ;
}
2021-12-13 17:18:24 +08:00
int CMainDataGrabber : : InitLS ( )
{
2022-01-13 17:03:16 +08:00
//InitializeWorkers();
//SetupMsgPipelines_RunTime();
//StartWorkers();
2022-04-29 15:37:54 +08:00
if ( m_struLinearShutterContext . strInterface = = " GPIO " )
{
qDebug ( ) < < " Debugging GPIO Init Started " ;
2022-01-13 17:03:16 +08:00
2022-04-29 15:37:54 +08:00
m_vecDSS . clear ( ) ;
2021-12-13 17:18:24 +08:00
2022-04-29 15:37:54 +08:00
if ( m_struLinearShutterContext . ucProtocolType = = 100 )
{
DSStatus DSSOne ;
QString qstrChannel = QString : : number ( m_struLinearShutterContext . usCmdID , 10 ) ;
if ( qstrChannel . size ( ) ! = 2 )
{
qDebug ( ) < < " Dual Shutter Channel Parse Err. " ;
return - 1 ;
}
else
{
DSSOne . strChannelA = qstrChannel . toStdString ( ) [ 0 ] ;
DSSOne . strChannelB = qstrChannel . toStdString ( ) [ 1 ] ;
DSSOne . iChannelA = 1 ;
DSSOne . iChannelB = 1 ;
}
2026-04-07 10:28:53 +08:00
if ( m_struLinearShutterContext . usGPIOChannelAPin ! = " null " & & m_struLinearShutterContext . usGPIOChannelBPin ! = " null " ) {
DSSOne . strChannelA = m_struLinearShutterContext . usGPIOChannelAPin ;
DSSOne . strChannelB = m_struLinearShutterContext . usGPIOChannelBPin ;
}
qDebug ( ) < < " Debugging GPIO Init Finished. Channel A Pin: " < < QString : : fromStdString ( DSSOne . strChannelA ) < < " Channel B Pin: " < < QString : : fromStdString ( DSSOne . strChannelB ) ;
2022-04-29 15:37:54 +08:00
m_vecDSS . push_back ( DSSOne ) ;
}
}
else
{
PortInfo piTemp ;
piTemp . qstrFullPortName = QString : : fromStdString ( m_struLinearShutterContext . strInterface ) ;
m_ctrlLS . ILMES_InitializeComm ( piTemp , m_struLinearShutterContext . ucProtocolType , m_struLinearShutterContext . usCmdID ) ;
ControllerParams cpTemp ;
bool res = m_ctrlLS . ILMES_InitializeParams ( cpTemp ) ;
m_ctrlLS . ILMES_SetPosition ( m_struAcqPosSetting . iPosition , m_struAcqPosSetting . iTotalPosition ) ;
}
2021-12-13 17:18:24 +08:00
2022-02-28 10:43:26 +08:00
//m_ctrlLS.ILMES_MoveToPos(2);
2021-12-13 17:18:24 +08:00
return 0 ;
}
2021-11-26 17:32:50 +08:00
int CMainDataGrabber : : InitThreadStatus ( )
{
2021-12-02 18:07:29 +08:00
if ( m_piFlagCaptureThreadStatus_Signal ! = NULL )
{
delete m_piFlagCaptureThreadStatus_Signal ;
}
m_piFlagCaptureThreadStatus_Signal = new int [ m_iTotalThreads ] ;
for ( int i = 0 ; i < m_iTotalThreads ; i + + )
{
m_piFlagCaptureThreadStatus_Signal [ i ] = 0 ;
}
if ( m_piFlagCaptureThreadStatus_Dark ! = NULL )
2021-11-26 17:32:50 +08:00
{
2021-12-02 18:07:29 +08:00
delete m_piFlagCaptureThreadStatus_Dark ;
2021-11-26 17:32:50 +08:00
}
2021-12-02 18:07:29 +08:00
m_piFlagCaptureThreadStatus_Dark = new int [ m_iTotalThreads ] ;
2021-11-26 17:32:50 +08:00
for ( int i = 0 ; i < m_iTotalThreads ; i + + )
{
2021-12-02 18:07:29 +08:00
m_piFlagCaptureThreadStatus_Dark [ i ] = 0 ;
2021-11-26 17:32:50 +08:00
}
2021-11-24 17:38:18 +08:00
return 0 ;
}
2022-01-20 09:36:35 +08:00
int CMainDataGrabber : : ResetThreadStatus ( )
{
for ( int i = 0 ; i < m_iTotalThreads ; i + + )
{
m_piFlagCaptureThreadStatus_Signal [ i ] = 0 ;
m_piFlagCaptureThreadStatus_Dark [ i ] = 0 ;
}
return 0 ;
}
2021-11-24 17:38:18 +08:00
int CMainDataGrabber : : InitializeWorkers ( )
{
for ( ZZ_U8 i = 0 ; i < m_struDeviceContext . ucDeviceNumber ; i + + )
{
2021-12-02 18:07:29 +08:00
m_piFlagCaptureThreadStatus_Signal [ i ] = 0 ;
m_piFlagCaptureThreadStatus_Dark [ i ] = 0 ;
2021-11-26 17:32:50 +08:00
FSInfo fsInfo ;
2021-12-13 17:18:24 +08:00
fsInfo . strInterface = m_struDeviceContext . strInterface [ i ] ;
2021-11-26 17:32:50 +08:00
fsInfo . ucDeviceModel = m_struDeviceContext . ucDeviceModel [ i ] ;
fsInfo . strSN = m_struDeviceContext . strSN [ i ] ;
2021-12-06 17:50:39 +08:00
fsInfo . fMaxFactor = m_struDeviceContext . fMaxFactor [ i ] ;
fsInfo . fMinFactor = m_struDeviceContext . fMinFactor [ i ] ;
fsInfo . lDepth = m_struDeviceContext . lDepth [ i ] ;
2021-11-26 17:32:50 +08:00
CAbstractFSController * m_pWorkThread = new CAbstractFSController ;
m_pWorkThread - > SetRunParas ( i , fsInfo ) ;
2022-01-20 09:36:35 +08:00
// m_pWorkThread->InitializeFSControl();
//
// DeviceAttribute daAttrTemp;
// m_pWorkThread->GetDeviceAttr(daAttrTemp);
// m_struDeviceContext.usPixels[i] = (ZZ_U16)daAttrTemp.iPixels;
// for (ZZ_U16 j = 0; j < daAttrTemp.iPixels; j++)
// {
// m_struDeviceContext.fWavelength[i][j] = daAttrTemp.fWaveLengthInNM[j];
// }
m_pControlThread . push_back ( m_pWorkThread ) ;
2021-11-26 17:32:50 +08:00
}
2022-01-20 09:36:35 +08:00
// m_struRTGP.fscParams = m_struDeviceContext;
// m_pdfpSaver->SetDeviceInfo(m_struDeviceContext);
// m_pmduUploader->SetRTGP(m_struRTGP);
2021-11-26 17:32:50 +08:00
return 0 ;
}
int CMainDataGrabber : : StartWorkers ( )
{
2021-11-24 17:38:18 +08:00
2021-11-26 17:32:50 +08:00
for ( ZZ_U8 i = 0 ; i < m_struDeviceContext . ucDeviceNumber ; i + + )
{
QThread * pWorkThreadHolder = new QThread ( ) ;
m_pControlThread [ i ] - > moveToThread ( pWorkThreadHolder ) ;
pWorkThreadHolder - > start ( ) ;
2022-01-13 17:03:16 +08:00
2022-01-20 09:36:35 +08:00
m_pControlThread [ i ] - > InitializeFSControl_Self ( ) ;
/// <summary>
while ( ! m_pControlThread [ i ] - > iFlagInit )
{
Delay_MSec ( 1000 ) ;
}
/// </summary>
/// <returns></returns>
DeviceAttribute daAttrTemp ;
m_pControlThread [ i ] - > GetDeviceAttr ( daAttrTemp ) ;
m_struDeviceContext . usPixels [ i ] = ( ZZ_U16 ) daAttrTemp . iPixels ;
for ( ZZ_U16 j = 0 ; j < daAttrTemp . iPixels ; j + + )
{
m_struDeviceContext . fWavelength [ i ] [ j ] = daAttrTemp . fWaveLengthInNM [ j ] ;
}
2021-11-24 17:38:18 +08:00
}
2022-01-13 17:03:16 +08:00
2022-01-20 09:36:35 +08:00
m_struRTGP . fscParams = m_struDeviceContext ;
m_pdfpSaver - > SetDeviceInfo ( m_struDeviceContext ) ;
m_pmduUploader - > SetRTGP ( m_struRTGP ) ;
2021-11-26 17:32:50 +08:00
return 0 ;
}
int CMainDataGrabber : : SetupMsgPipelines ( )
{
//connect(this, &CMainDataGrabber::SignalStartGrabOnce, this, &CMainDataGrabber::StartGrab);
2022-01-13 17:03:16 +08:00
//connect(m_GrabTimer, &QTimer::timeout, this, &CMainDataGrabber::OnTimeCounter);
//FS
2021-11-26 17:32:50 +08:00
for ( ZZ_U8 i = 0 ; i < m_struDeviceContext . ucDeviceNumber ; i + + )
{
2021-12-02 18:07:29 +08:00
connect ( this , & CMainDataGrabber : : SignalStartGrabOnce_Signal , m_pControlThread [ i ] , & CAbstractFSController : : StartAcquisitionSignal ) ;
connect ( this , & CMainDataGrabber : : SignalStartGrabOnce_Dark , m_pControlThread [ i ] , & CAbstractFSController : : StartAcquisitionDark ) ;
connect ( m_pControlThread [ i ] , & CAbstractFSController : : SignalAcqFinished_Signal , this , & CMainDataGrabber : : HandleThreadEvent_Signal ) ;
connect ( m_pControlThread [ i ] , & CAbstractFSController : : SignalAcqFinished_Dark , this , & CMainDataGrabber : : HandleThreadEvent_Dark ) ;
2021-11-26 17:32:50 +08:00
}
2021-12-02 18:07:29 +08:00
connect ( this , & CMainDataGrabber : : SignalGrabOnceFinished , this , & CMainDataGrabber : : GrabOnceFinished ) ;
2021-12-13 17:18:24 +08:00
connect ( m_psScheduler , & Scheduler : : SignalGrabOnce , this , & CMainDataGrabber : : OnTimeCounter ) ;
2022-03-08 16:16:25 +08:00
connect ( m_psScheduler , & Scheduler : : SignalZeroHoldCurrent , this , & CMainDataGrabber : : OnZeroHoldCurrent ) ;
2021-12-02 18:07:29 +08:00
connect ( this , & CMainDataGrabber : : SignalStartGrab , this , & CMainDataGrabber : : StartGrabTimer ) ;
2021-12-03 10:43:25 +08:00
connect ( this , & CMainDataGrabber : : SignalGrabOnceFinished_Signal , this , & CMainDataGrabber : : GrabOnceFinished_Signal ) ;
2021-12-03 11:34:49 +08:00
connect ( this , & CMainDataGrabber : : SignalGrabOnceFinished_Dark , this , & CMainDataGrabber : : GrabOnceFinished_Dark ) ;
2021-12-14 14:52:29 +08:00
2022-01-13 17:03:16 +08:00
//net work
2022-01-04 17:32:19 +08:00
connect ( this , & CMainDataGrabber : : SignalPushOneDataFrame , m_pmduUploader , & CMainDataUploader : : SlotPushOneDataFrame ) ;
2022-01-13 17:03:16 +08:00
//shutter
connect ( this , & CMainDataGrabber : : SignalLSInit , this , & CMainDataGrabber : : InitLS ) ;
2021-11-26 17:32:50 +08:00
return 0 ;
}
2022-01-13 17:03:16 +08:00
int CMainDataGrabber : : SetupMsgPipelines_RunTime ( )
{
for ( ZZ_U8 i = 0 ; i < m_struDeviceContext . ucDeviceNumber ; i + + )
{
connect ( this , & CMainDataGrabber : : SignalStartGrabOnce_Signal , m_pControlThread [ i ] , & CAbstractFSController : : StartAcquisitionSignal ) ;
connect ( this , & CMainDataGrabber : : SignalStartGrabOnce_Dark , m_pControlThread [ i ] , & CAbstractFSController : : StartAcquisitionDark ) ;
connect ( m_pControlThread [ i ] , & CAbstractFSController : : SignalAcqFinished_Signal , this , & CMainDataGrabber : : HandleThreadEvent_Signal ) ;
connect ( m_pControlThread [ i ] , & CAbstractFSController : : SignalAcqFinished_Dark , this , & CMainDataGrabber : : HandleThreadEvent_Dark ) ;
}
return 0 ;
}
2021-12-02 18:07:29 +08:00
int CMainDataGrabber : : StartGrab ( )
{
emit SignalStartGrab ( ) ;
return 0 ;
}
2021-12-14 14:52:29 +08:00
void CMainDataGrabber : : Init_Self ( )
{
2022-02-18 17:21:09 +08:00
emit SignalLSInit ( ) ;
2021-12-14 14:52:29 +08:00
return ;
}
2021-12-02 18:07:29 +08:00
int CMainDataGrabber : : HandleThreadEvent_Signal ( int iThreadID , int iFlagStatus )
2021-11-26 17:32:50 +08:00
{
2021-12-02 18:07:29 +08:00
m_piFlagCaptureThreadStatus_Signal [ iThreadID ] = iFlagStatus ;
2021-11-26 17:32:50 +08:00
bool bFinished = true ;
for ( int i = 0 ; i < m_iTotalThreads ; i + + )
{
2021-12-02 18:07:29 +08:00
if ( m_piFlagCaptureThreadStatus_Signal [ i ] ! = 1 )
2021-11-26 17:32:50 +08:00
{
bFinished = false ;
break ;
}
}
if ( bFinished )
{
2021-12-03 10:43:25 +08:00
emit SignalGrabOnceFinished_Signal ( ) ;
2021-11-26 17:32:50 +08:00
}
return 0 ;
}
2021-12-02 18:07:29 +08:00
int CMainDataGrabber : : HandleThreadEvent_Dark ( int iThreadID , int iFlagStatus )
2021-11-26 17:32:50 +08:00
{
2021-12-02 18:07:29 +08:00
m_piFlagCaptureThreadStatus_Dark [ iThreadID ] = iFlagStatus ;
bool bFinished = true ;
for ( int i = 0 ; i < m_iTotalThreads ; i + + )
2021-11-26 17:32:50 +08:00
{
2021-12-02 18:07:29 +08:00
if ( m_piFlagCaptureThreadStatus_Dark [ i ] ! = 1 )
{
bFinished = false ;
break ;
}
}
if ( bFinished )
{
2021-12-03 10:43:25 +08:00
emit SignalGrabOnceFinished_Dark ( ) ;
2021-11-26 17:32:50 +08:00
}
return 0 ;
}
2021-12-03 10:43:25 +08:00
int CMainDataGrabber : : GrabOnceFinished_Signal ( )
{
m_iFlagIsCapturing_Signal = false ;
return 0 ;
}
int CMainDataGrabber : : GrabOnceFinished_Dark ( )
{
m_iFlagIsCapturing_Dark = false ;
return 0 ;
}
2021-12-14 14:52:29 +08:00
//int CMainDataGrabber::InitLS_Self(/*RunTimeGrabberParams struGrabberRTParams, DataFileProcessor &dfpSaver, Scheduler &sScheduler*/)
//{
// //SetGrabberFileProcessor(dfpSaver);
// //SetGrabberParams(struGrabberRTParams);
// //SetTimer(sScheduler);
// InitLS();
// return 0;
//}
2021-12-02 18:07:29 +08:00
int CMainDataGrabber : : StartGrabTimer ( )
{
//////////////////////////////////////////////////////////////////////////start
////check start time
// bool bStopWait = false;
// while (!bStopWait)
// {
// QTime qtTime = QTime::currentTime();
// if (m_struAcqTime.qtStartTime >= qtTime && qtTime<m_struAcqTime.qtStopTime)
// {
// bStopWait = true;
// }
// }
2021-12-03 11:34:49 +08:00
//start
2021-12-13 17:18:24 +08:00
//int iIntervalInMS =m_struAcqTime.qtInterval.hour()*3600*1000+ m_struAcqTime.qtInterval.minute()*60*1000+ m_struAcqTime.qtInterval.second()*1000;
//m_GrabTimer->start(3000);
2021-12-02 18:07:29 +08:00
//////////////////////////////////////////////////////////////////////////test
// m_iFlagIsCapturing = true;
// emit SignalStartGrabOnce();
// while (m_iFlagIsCapturing)
// {
// QThread::msleep(1000);
// }
//
// m_iFlagIsCapturing = true;
// InitThreadStatus();
// emit SignalStartGrabOnce();
// while (m_iFlagIsCapturing)
// {
// QThread::msleep(1000);
// }
// qDebug() << "Allgrab stopped" << " Thread ID:" <<2;
2021-12-03 11:34:49 +08:00
////final test code eat my ass
// m_iFlagIsCapturing = 1;
//
//
// for (int i=0;i<5;i++)
// {
// m_iFlagIsCapturing_Signal = 1;
// emit SignalStartGrabOnce_Signal();
// while (m_iFlagIsCapturing_Signal)
// {
// Delay_MSec(200);
// qDebug() << "msleep" << 200;
// }
//
// m_iFlagIsCapturing_Dark = 1;
// emit SignalStartGrabOnce_Dark();
// while (m_iFlagIsCapturing_Dark)
// {
// Delay_MSec(200);
// qDebug() << "msleep" << 200;
// }
//
// }
// qDebug() << "for quit";
//
2021-12-02 18:07:29 +08:00
return 0 ;
}
int CMainDataGrabber : : GrabOnceFinished ( )
2021-11-26 17:32:50 +08:00
{
2021-12-03 11:34:49 +08:00
m_iFlagIsCapturing = false ;
2021-12-03 10:43:25 +08:00
// QTimer t;
// t.start();
// while (1)
// {
// QThread::msleep(1);
// QCoreApplication::processEvents();
// }
2021-11-24 17:38:18 +08:00
return 0 ;
}
2021-12-03 11:34:49 +08:00
int CMainDataGrabber : : OnTimeCounter ( )
{
2024-10-30 17:00:12 +08:00
m_iFlagIsWorkingTime = 1 ;
2022-04-29 15:37:54 +08:00
bool bRes ;
QString qstrCMD_A , qstrCMD_B , qstrCMD_Temp ;
2021-12-06 17:50:39 +08:00
if ( m_iFlagIsCapturing )
{
2025-11-19 15:11:44 +08:00
// qDebug() << "Fatal Warning.Last capture not finished.New acquisition will not start";
2021-12-06 17:50:39 +08:00
return 1000 ;
}
m_iFlagIsCapturing = 1 ;
2021-12-13 17:18:24 +08:00
//return 0;
// m_struAcqPosSetting.iTotalPosition = 5;
2021-12-06 17:50:39 +08:00
//m_pdfpSaver->WriteDataFile();
for ( ZZ_U8 i = 0 ; i < m_struDeviceContext . ucDeviceNumber ; i + + )
{
m_pControlThread [ i ] - > ClearBuffer ( ) ;
}
2022-03-08 16:16:25 +08:00
2022-04-29 15:37:54 +08:00
if ( m_struLinearShutterContext . strInterface = = " GPIO " )
2022-03-08 16:16:25 +08:00
{
}
2022-04-29 15:37:54 +08:00
else
{
////hold current
bRes = m_ctrlLS . SetHoldCurrent ( 0.4f ) ;
if ( ! bRes )
{
qDebug ( ) < < " SetHoldCurrent 0.4 Failed " ;
}
Delay_MSec ( 1000 ) ;
////
}
2021-12-06 17:50:39 +08:00
for ( int i = 0 ; i < m_struAcqPosSetting . iTotalPosition - 1 ; i + + )
{
2022-01-20 09:36:35 +08:00
ResetThreadStatus ( ) ;
2022-04-29 15:37:54 +08:00
////move to start
if ( m_struLinearShutterContext . strInterface = = " GPIO " )
2022-02-17 14:19:31 +08:00
{
2022-04-29 15:37:54 +08:00
if ( m_struLinearShutterContext . ucProtocolType = = 100 )
{
2023-12-19 10:52:21 +08:00
if ( /*i==0*/ i % 2 = = 0 )
2022-04-29 15:37:54 +08:00
{
qstrCMD_Temp = QString : : fromStdString ( m_vecDSS [ 0 ] . strChannelA ) ;
qstrCMD_A = " gpio write " + qstrCMD_Temp + " 1 " ;
qstrCMD_Temp = QString : : fromStdString ( m_vecDSS [ 0 ] . strChannelB ) ;
qstrCMD_B = " gpio write " + qstrCMD_Temp + " 0 " ;
system ( qstrCMD_A . toLatin1 ( ) ) ;
system ( qstrCMD_B . toLatin1 ( ) ) ;
qDebug ( ) < < qstrCMD_A ;
qDebug ( ) < < qstrCMD_B ;
2025-11-19 15:11:44 +08:00
Delay_MSec ( 200 ) ;
2022-04-29 15:37:54 +08:00
}
2023-12-19 10:52:21 +08:00
else if ( /*i==1*/ i % 2 = = 1 )
2022-04-29 15:37:54 +08:00
{
qstrCMD_Temp = QString : : fromStdString ( m_vecDSS [ 0 ] . strChannelA ) ;
qstrCMD_A = " gpio write " + qstrCMD_Temp + " 0 " ;
qstrCMD_Temp = QString : : fromStdString ( m_vecDSS [ 0 ] . strChannelB ) ;
qstrCMD_B = " gpio write " + qstrCMD_Temp + " 1 " ;
system ( qstrCMD_A . toLatin1 ( ) ) ;
system ( qstrCMD_B . toLatin1 ( ) ) ;
qDebug ( ) < < qstrCMD_A ;
qDebug ( ) < < qstrCMD_B ;
2025-11-19 15:11:44 +08:00
Delay_MSec ( 200 ) ;
2022-04-29 15:37:54 +08:00
}
}
2022-02-17 14:19:31 +08:00
}
else
{
2025-11-19 15:11:44 +08:00
//线性马达
2022-04-29 15:37:54 +08:00
qDebug ( ) < < " Start ILMES_MoveToPos: " < < i + 1 ;
if ( i = = 0 )
{
m_ctrlLS . ILMES_MoveToPos ( i + 1 ) ;
}
else
{
m_ctrlLS . MoveTo ( m_struAcqPosSetting . iPosition [ 1 ] ) ;
}
m_ctrlLS . ILMES_MoveToPos ( i + 1 ) ;
qDebug ( ) < < " Stop ILMES_MoveToPos: " < < i + 1 ;
2022-02-17 14:19:31 +08:00
}
2022-04-29 15:37:54 +08:00
////move to end
2022-02-17 14:19:31 +08:00
// m_struAcqPosSetting.iPosition[i + 1];
2021-12-06 17:50:39 +08:00
m_iFlagIsCapturing_Signal = 1 ;
2025-11-04 17:19:32 +08:00
2025-11-19 15:11:44 +08:00
emit SignalStartGrabOnce_Signal ( i ) ;
2021-12-06 17:50:39 +08:00
while ( m_iFlagIsCapturing_Signal )
{
2025-11-19 15:11:44 +08:00
Delay_MSec ( 100 ) ;
2021-12-06 17:50:39 +08:00
}
////move to
2022-04-29 15:37:54 +08:00
if ( m_struLinearShutterContext . strInterface = = " GPIO " )
{
if ( m_struLinearShutterContext . ucProtocolType = = 100 )
{
qstrCMD_Temp = QString : : fromStdString ( m_vecDSS [ 0 ] . strChannelA ) ;
qstrCMD_A = " gpio write " + qstrCMD_Temp + " 0 " ;
qstrCMD_Temp = QString : : fromStdString ( m_vecDSS [ 0 ] . strChannelB ) ;
qstrCMD_B = " gpio write " + qstrCMD_Temp + " 0 " ;
system ( qstrCMD_A . toLatin1 ( ) ) ;
system ( qstrCMD_B . toLatin1 ( ) ) ;
qDebug ( ) < < qstrCMD_A ;
qDebug ( ) < < qstrCMD_B ;
2026-04-07 10:28:53 +08:00
Delay_MSec ( 200 ) ;
2022-04-29 15:37:54 +08:00
}
}
else
{
qDebug ( ) < < " Start ILMES_MoveToPos: " < < 0 ;
m_ctrlLS . ILMES_MoveToPos ( 0 ) ;
qDebug ( ) < < " Stop ILMES_MoveToPos: " < < 0 ;
}
2022-02-17 14:19:31 +08:00
//m_struAcqPosSetting.iPosition[0];
2021-12-06 17:50:39 +08:00
m_iFlagIsCapturing_Dark = 1 ;
2025-11-04 17:19:32 +08:00
// todo : 机载时是否有实时采集暗电流
2025-11-19 15:11:44 +08:00
emit SignalStartGrabOnce_Dark ( i ) ;
2021-12-06 17:50:39 +08:00
while ( m_iFlagIsCapturing_Dark )
{
2025-11-19 15:11:44 +08:00
Delay_MSec ( 100 ) ;
2021-12-06 17:50:39 +08:00
}
}
2022-04-29 15:37:54 +08:00
if ( m_struLinearShutterContext . strInterface = = " GPIO " )
2022-03-08 16:16:25 +08:00
{
}
2022-04-29 15:37:54 +08:00
else
{
////hold current
bRes = m_ctrlLS . SetHoldCurrent ( 0 ) ;
if ( ! bRes )
{
qDebug ( ) < < " SetHoldCurrent 0 Failed " ;
}
Delay_MSec ( 1000 ) ;
////
}
2021-12-08 17:43:27 +08:00
std : : vector < std : : vector < DataFrame > > vecData ;
2025-11-04 17:19:32 +08:00
bool savedarkfile = true ;
std : : vector < std : : vector < DataFrame > > vecDarkData ;
2021-12-08 17:43:27 +08:00
2021-12-06 17:50:39 +08:00
for ( ZZ_U8 i = 0 ; i < m_struDeviceContext . ucDeviceNumber ; i + + )
{
2021-12-08 17:43:27 +08:00
std : : vector < DataFrame > vecDark , vecSignal , vecResult ;
m_pControlThread [ i ] - > GetBuffer ( vecDark , vecSignal ) ;
for ( size_t j = 0 ; j < vecDark . size ( ) ; j + + )
{
SubDataFrame ( vecSignal [ j ] , vecDark [ j ] , m_struDeviceContext . usPixels [ i ] ) ;
2025-11-19 15:11:44 +08:00
vecDark [ j ] . bIsValid = vecSignal [ j ] . bIsValid ;
2021-12-08 17:43:27 +08:00
}
vecData . push_back ( vecSignal ) ;
2025-11-04 17:19:32 +08:00
if ( savedarkfile ) {
vecDarkData . push_back ( vecDark ) ;
}
2022-01-20 09:36:35 +08:00
qDebug ( ) < < " ucDeviceNumber " < < i < < " Data Size " < < vecSignal . size ( ) ;
//vecData[i].push_back();
2021-12-06 17:50:39 +08:00
}
2022-01-04 17:32:19 +08:00
2024-10-30 17:00:12 +08:00
if ( m_iFlagIsWorkingTime )
{
//emit SignalPushOneDataFrame(vecData);
m_pmduUploader - > SetData ( vecData ) ;
emit SignalPushOneDataFrame ( ) ;
m_pdfpSaver - > SetData ( vecData ) ;
2025-11-04 17:19:32 +08:00
if ( savedarkfile ) {
m_pdfpSaver - > SetDarkData ( vecDarkData ) ;
}
2024-10-30 17:00:12 +08:00
qDebug ( ) < < " Thread Data Server: WriteDataFile Called " ;
m_pdfpSaver - > WriteDataFile ( ) ;
2025-11-04 17:19:32 +08:00
if ( savedarkfile ) {
m_pdfpSaver - > WriteDarkDataFile ( ) ;
}
2024-10-30 17:00:12 +08:00
}
2025-11-19 15:11:44 +08:00
system ( " gpio write 13 1 " ) ;
Delay_MSec ( 100 ) ;
system ( " gpio write 13 0 " ) ;
2021-12-14 14:52:29 +08:00
m_iFlagIsCapturing = 0 ;
2021-12-13 17:18:24 +08:00
2021-12-06 17:50:39 +08:00
// qDebug() << "-------------------------------------------busy" << QTime::currentTime().toString();
// QThread::msleep(5000);
// return 0;
// if (m_iFlagIsCapturing)
// {
//
// }
// m_iFlagIsCapturing = 1;
2021-12-03 11:34:49 +08:00
//qDebug() << "-------------------------------------------return";
//return 1;
2021-12-06 17:50:39 +08:00
// for (int i = 0; i < 5; i++)
// {
// m_iFlagIsCapturing_Signal = 1;
// emit SignalStartGrabOnce_Signal();
// while (m_iFlagIsCapturing_Signal)
// {
// //Delay_MSec(1000);
// QThread::msleep(100);
// QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
// //qDebug() << "msleep" << 1000;
// }
//
// m_iFlagIsCapturing_Dark = 1;
// emit SignalStartGrabOnce_Dark();
// while (m_iFlagIsCapturing_Dark)
// {
// Delay_MSec(1000);
// QThread::msleep(100);
// QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
// //qDebug() << "msleep" << 1000;
// }
//
// }
// qDebug() << "for quit";
//
//
// emit SignalGrabOnceFinished();
2021-12-03 11:34:49 +08:00
return 0 ;
}
2021-12-02 18:07:29 +08:00
2022-03-08 16:16:25 +08:00
int CMainDataGrabber : : OnZeroHoldCurrent ( )
{
2024-10-30 17:00:12 +08:00
///
m_iFlagIsWorkingTime = 0 ;
///
2022-03-08 16:16:25 +08:00
bool bRes = m_ctrlLS . SetHoldCurrent ( 0 ) ;
if ( ! bRes )
{
qDebug ( ) < < " OnZeroHoldCurrent Failed " ;
}
return 0 ;
}