2021-11-24 17:38:18 +08:00
# include "AbstractFSController.h"
2021-12-06 17:50:39 +08:00
# include "ZZ_Math_HDRONLY.h"
2022-04-29 15:37:54 +08:00
# include <math.h>
2021-11-24 17:38:18 +08:00
CAbstractFSController : : CAbstractFSController ( QObject * parent /*= nullptr*/ )
{
2022-01-20 09:36:35 +08:00
iFlagInit = 0 ;
2021-11-26 17:32:50 +08:00
m_pFSCtrl = NULL ;
2021-11-24 17:38:18 +08:00
m_iThreadID = - 1 ;
2022-04-29 15:37:54 +08:00
2021-12-06 17:50:39 +08:00
m_vecDataFrameDark . clear ( ) ;
m_vecDataFrameSignal . clear ( ) ;
2022-04-29 15:37:54 +08:00
m_qstrCalFilePath = " /home/data/Cal " ;
m_vecNonLinearCalP . clear ( ) ;
2021-11-24 17:38:18 +08:00
}
CAbstractFSController : : ~ CAbstractFSController ( )
{
2021-11-26 17:32:50 +08:00
if ( m_pFSCtrl ! = 0 )
{
delete m_pFSCtrl ;
}
2021-11-24 17:38:18 +08:00
}
2021-11-26 17:32:50 +08:00
int CAbstractFSController : : SetRunParas ( int iThreadID , FSInfo fsInfo )
2021-11-24 17:38:18 +08:00
{
2022-01-20 09:36:35 +08:00
connect ( this , & CAbstractFSController : : SignalInit_Self , this , & CAbstractFSController : : InitializeFSControl ) ;
2021-11-24 17:38:18 +08:00
m_iThreadID = iThreadID ;
2021-11-26 17:32:50 +08:00
m_fsInfo = fsInfo ;
2021-11-24 17:38:18 +08:00
return 0 ;
}
int CAbstractFSController : : InitializeFSControl ( )
{
2021-11-26 17:32:50 +08:00
using namespace ZZ_MISCDEF : : IRIS ;
2022-04-29 15:37:54 +08:00
int iRes = 0 ;
2021-11-26 17:32:50 +08:00
if ( m_iThreadID = = - 1 /*|| m_iDeviceType == -1*/ )
2021-11-24 17:38:18 +08:00
{
qDebug ( ) < < " Params Err. Call SetRunParas first " ;
return 1 ;
}
2021-11-26 17:32:50 +08:00
switch ( m_fsInfo . ucDeviceModel )
2021-11-24 17:38:18 +08:00
{
case DeviceModel : : OSIFAlpha :
2021-12-02 18:07:29 +08:00
m_pFSCtrl = new OceanOptics_lib ;
2021-12-13 17:18:24 +08:00
if ( m_pFSCtrl - > Initialize ( false , m_fsInfo . strInterface , m_fsInfo . strSN ) ! = 0 )
2021-12-02 18:07:29 +08:00
{
qDebug ( ) < < " OSIFAlpha Not Opened " ;
return 2 ;
}
2022-04-29 15:37:54 +08:00
iRes = LoadQEProLinearCalibrationFile ( ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " LoadQEProLinearCalibrationFile Failed " < < iRes ;
//return 5;
}
2021-11-24 17:38:18 +08:00
break ;
case DeviceModel : : OSIFBeta :
2021-12-02 18:07:29 +08:00
m_pFSCtrl = new OceanOptics_lib ;
2021-12-13 17:18:24 +08:00
if ( m_pFSCtrl - > Initialize ( false , m_fsInfo . strInterface , m_fsInfo . strSN ) ! = 0 )
2021-12-06 17:50:39 +08:00
{
qDebug ( ) < < " OSIFBeta Not Opened " ;
return 2 ;
}
2022-04-29 15:37:54 +08:00
iRes = LoadQEProLinearCalibrationFile ( ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " LoadQEProLinearCalibrationFile Failed " < < iRes ;
//return 5;
}
2021-11-24 17:38:18 +08:00
break ;
case DeviceModel : : ISIF :
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt ;
2022-01-13 17:03:16 +08:00
//m_pFSCtrl->Initialize(false, m_fsInfo.strInterface, NULL);
2021-12-13 17:18:24 +08:00
if ( m_pFSCtrl - > Initialize ( false , m_fsInfo . strInterface , m_fsInfo . strSN ) ! = 0 )
2021-12-02 18:07:29 +08:00
{
qDebug ( ) < < " ISIF Not Opened " ;
return 3 ;
}
2021-11-24 17:38:18 +08:00
break ;
case DeviceModel : : IS1 :
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt ;
2022-01-13 17:03:16 +08:00
//m_pFSCtrl->Initialize(false, m_fsInfo.strInterface, NULL);
2021-12-13 17:18:24 +08:00
if ( m_pFSCtrl - > Initialize ( false , m_fsInfo . strInterface , m_fsInfo . strSN ) ! = 0 )
2021-12-02 18:07:29 +08:00
{
qDebug ( ) < < " IS1 Not Opened " ;
return 3 ;
}
2021-11-24 17:38:18 +08:00
break ;
case DeviceModel : : IS2 :
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt ;
2022-01-13 17:03:16 +08:00
//m_pFSCtrl->Initialize(false, m_fsInfo.strInterface, NULL);
2021-12-13 17:18:24 +08:00
if ( m_pFSCtrl - > Initialize ( false , m_fsInfo . strInterface , m_fsInfo . strSN ) ! = 0 )
2021-12-02 18:07:29 +08:00
{
qDebug ( ) < < " IS2 Not Opened " ;
return 3 ;
}
2021-11-24 17:38:18 +08:00
break ;
default :
break ;
}
2021-12-06 17:50:39 +08:00
2022-04-29 15:37:54 +08:00
iRes = m_pFSCtrl - > GetDeviceAttribute ( m_daDeviceAttr ) ;
2021-12-08 17:43:27 +08:00
if ( iRes ! = 0 )
2021-12-06 17:50:39 +08:00
{
2021-12-08 17:43:27 +08:00
qDebug ( ) < < " GetDeviceAttribute Failed " < < iRes ;
2021-12-06 17:50:39 +08:00
return 4 ;
}
2022-01-04 17:32:19 +08:00
iRes = m_pFSCtrl - > SetDeviceTemperature ( 0 ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " SetDeviceTemperature Failed " < < iRes ;
2022-02-28 14:49:46 +08:00
//return 5;
2022-01-04 17:32:19 +08:00
}
2022-01-20 09:36:35 +08:00
iFlagInit = 1 ;
return 0 ;
}
2021-12-06 17:50:39 +08:00
2022-01-20 09:36:35 +08:00
int CAbstractFSController : : InitializeFSControl_Self ( )
{
//InitializeFSControl();
emit SignalInit_Self ( ) ;
2021-11-24 17:38:18 +08:00
return 0 ;
}
2021-12-08 17:43:27 +08:00
int CAbstractFSController : : GetDeviceAttr ( DeviceAttribute & daAttr )
{
daAttr = m_daDeviceAttr ;
return 0 ;
}
2021-12-02 18:07:29 +08:00
int CAbstractFSController : : PerformAutoExposure ( )
2021-11-24 17:38:18 +08:00
{
2021-12-06 17:50:39 +08:00
qDebug ( ) < < " --------------------------Starting PerformAutoExposure " < < " Thread ID: " < < m_iThreadID ;
using namespace ZZ_MATH ;
float fPredictedExposureTime ;
int iDeviceDepth = ( int ) m_fsInfo . lDepth ;
2022-01-20 09:36:35 +08:00
qDebug ( ) < < " MAX---Min " < < m_fsInfo . fMaxFactor < < " --- " < < m_fsInfo . fMinFactor < < " Thread ID: " < < m_iThreadID ;
2021-12-23 14:42:52 +08:00
2021-12-06 17:50:39 +08:00
bool bFlagIsOverTrying = false ;
bool bFlagIsLowerMinExposureTime = false ;
bool bFlagIsOverMaxExposureTime = false ;
bool bFlagIsAutoExposureOK = false ;
bool bFlagIsAutoExposureFailed = false ;
bool bIsValueOverflow = false ;
bool bIsLastValueOverflow = false ;
int iExposureTime = 0 ;
float fTempExposureTime = 0 ;
double fLastExposureTime = 0.1 ;
int iRepeatCount = 0 ;
//int iRes = m_pFSCtrl->SetExposureTime(1000);//need change to load from files
int iRes = 0 ;
if ( iRes ! = 0 )
{
2022-01-20 09:36:35 +08:00
qDebug ( ) < < " Err:PerformAutoExposure Failed.Exit Code:1 " < < " Thread ID: " < < m_iThreadID ;
2021-12-06 17:50:39 +08:00
return 1 ;
}
while ( ! bFlagIsAutoExposureOK & & ! bFlagIsAutoExposureFailed )
{
DataFrame dfTemp ;
if ( iRepeatCount + + > 30 )
{
bFlagIsAutoExposureFailed = true ;
bFlagIsOverTrying = true ;
break ;
}
//m_pFSCtrl->SetExposureTime(5000);
m_pFSCtrl - > GetExposureTime ( iExposureTime ) ;
2022-01-20 09:36:35 +08:00
qDebug ( ) < < " Current ExpTime: " < < iExposureTime < < " Thread ID: " < < m_iThreadID ;
2021-12-06 17:50:39 +08:00
//m_pFSCtrl->SetExposureTime(2500);
//fExposureTime = (float)m_daDeviceAttr.iMinIntegrationTimeInMS;
fTempExposureTime = iExposureTime ;
2022-01-20 09:36:35 +08:00
2021-12-06 17:50:39 +08:00
iRes = m_pFSCtrl - > SingleShot ( dfTemp ) ;
//iRes = m_pFSCtrl->SingleShot(dfTemp);
if ( iRes ! = 0 )
{
2022-01-20 09:36:35 +08:00
qDebug ( ) < < " Err:PerformAutoExposure Failed.Exit Code:2 " < < " Thread ID: " < < m_iThreadID ;
2021-12-06 17:50:39 +08:00
return 2 ;
}
2021-12-08 17:43:27 +08:00
HeapSort ( dfTemp . lData , m_daDeviceAttr . iPixels ) ;
2021-12-06 17:50:39 +08:00
double dSum = 0 ;
2022-01-20 09:36:35 +08:00
int iCount = m_daDeviceAttr . iPixels / 200 ;
2021-12-06 17:50:39 +08:00
for ( int i = 0 ; i < iCount ; i + + )
{
2021-12-08 17:43:27 +08:00
dSum + = dfTemp . lData [ i ] ;
2021-12-06 17:50:39 +08:00
}
double dTemp = dSum / iCount ;
2022-02-28 18:05:52 +08:00
qDebug ( ) < < " Avg " < < dTemp < < " Thread ID: " < < m_iThreadID ;
2021-12-23 14:42:52 +08:00
2021-12-06 17:50:39 +08:00
if ( dTemp > = iDeviceDepth * 0.99 )
{
bIsValueOverflow = true ;
if ( ! bIsLastValueOverflow )
{
iExposureTime = ( float ) ( fLastExposureTime + iExposureTime ) / 2 ;
}
else
{
iExposureTime = iExposureTime / 2 ;
}
}
else if ( iDeviceDepth * m_fsInfo . fMaxFactor > = dTemp & & dTemp > = iDeviceDepth * m_fsInfo . fMinFactor )
{
2022-01-20 09:36:35 +08:00
qDebug ( ) < < " trace bFlagIsAutoExposureOK =1 " < < iExposureTime < < " Thread ID: " < < m_iThreadID ;
2021-12-06 17:50:39 +08:00
bFlagIsAutoExposureOK = 1 ;
}
else if ( dTemp > iDeviceDepth * m_fsInfo . fMaxFactor )
{
bIsValueOverflow = true ;
if ( ! bIsLastValueOverflow )
{
iExposureTime = ( float ) ( fLastExposureTime + iExposureTime ) / 2 ;
}
else
{
iExposureTime = iExposureTime * 3 / 4 ;
}
}
else if ( dTemp < iDeviceDepth * m_fsInfo . fMinFactor )
{
bIsValueOverflow = false ;
if ( bIsLastValueOverflow )
{
iExposureTime = ( float ) ( fLastExposureTime + iExposureTime ) / 2 ;
}
else
{
double dFactor ;
dFactor = dTemp / ( iDeviceDepth * m_fsInfo . fMaxFactor ) ;
iExposureTime = ( float ) ( iExposureTime / dFactor ) ;
}
2022-02-28 18:05:52 +08:00
2021-12-06 17:50:39 +08:00
}
bIsLastValueOverflow = bIsValueOverflow ;
fLastExposureTime = fTempExposureTime ;
2022-03-01 11:39:48 +08:00
2022-02-28 18:05:52 +08:00
if ( /*fExposureTime > 100 || */ iExposureTime < = m_daDeviceAttr . iMinIntegrationTimeInMS )
{
bFlagIsAutoExposureOK = false ;
bFlagIsAutoExposureFailed = true ;
bFlagIsLowerMinExposureTime = true ;
2022-03-01 11:39:48 +08:00
// qDebug() << "Warning:PerformAutoExposure lower than min integration time.Will be limited to " << m_daDeviceAttr.iMinIntegrationTimeInMS - 1 << "MS" << " Thread ID:" << m_iThreadID;
// iRes = m_pFSCtrl->SetExposureTime((int)iExposureTime);
// if (iRes != 0)
// {
// qDebug() << "Err:PerformAutoExposure Failed.Exit Code:4" << " Thread ID:" << m_iThreadID;
// return 3;
// }
// else
// {
// qDebug() << "Success:PerformAutoExposure. Value" << iExposureTime << " Thread ID:" << m_iThreadID;
// }
iRes = m_pFSCtrl - > SetExposureTime ( m_daDeviceAttr . iMinIntegrationTimeInMS ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " Err:PerformAutoExposure Failed.Exit Code:3 " < < " Thread ID: " < < m_iThreadID ;
return 3 ;
}
else
{
qDebug ( ) < < " Warning:PerformAutoExposure lower than min integration time.Will be limited to " < < m_daDeviceAttr . iMinIntegrationTimeInMS < < " MS " < < " Thread ID: " < < m_iThreadID ;
}
2022-02-28 18:05:52 +08:00
break ;
}
if ( iExposureTime > m_daDeviceAttr . iMaxIntegrationTimeInMS - 1 )
2021-12-06 17:50:39 +08:00
{
bFlagIsAutoExposureOK = false ;
bFlagIsAutoExposureFailed = true ;
bFlagIsOverMaxExposureTime = true ;
2022-02-28 18:05:52 +08:00
//float fPredictedExposureTime = m_daDeviceAttr.iMaxIntegrationTimeInMS-1;
//iRes = m_pFSCtrl->SetExposureTime(m_daDeviceAttr.iMaxIntegrationTimeInMS-1);
//if (iRes != 0)
//{
//qDebug() << "Err:PerformAutoExposure Failed.Exit Code:3" << " Thread ID:" << m_iThreadID;
//return 3;
//}
//else
//{
//qDebug() << "Warning:PerformAutoExposure exceed max integration time.Will be limited to 30sec";
//}
2022-03-01 11:39:48 +08:00
iRes = m_pFSCtrl - > SetExposureTime ( m_daDeviceAttr . iMaxIntegrationTimeInMS - 1 ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " Err:PerformAutoExposure Failed.Exit Code:3 " < < " Thread ID: " < < m_iThreadID ;
return 3 ;
}
else
{
qDebug ( ) < < " Warning:PerformAutoExposure exceed max integration time.Will be limited to " < < m_daDeviceAttr . iMaxIntegrationTimeInMS - 1 < < " MS " < < " Thread ID: " < < m_iThreadID ;
}
2021-12-06 17:50:39 +08:00
break ;
}
2022-03-01 11:39:48 +08:00
iRes = m_pFSCtrl - > SetExposureTime ( ( int ) iExposureTime ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " Err:PerformAutoExposure Failed.Exit Code:4 " < < " Thread ID: " < < m_iThreadID ;
return 3 ;
}
else
{
qDebug ( ) < < " Success:PerformAutoExposure. Value " < < iExposureTime < < " Thread ID: " < < m_iThreadID ;
}
2022-03-01 09:53:11 +08:00
}
2022-03-01 11:39:48 +08:00
2021-12-06 17:50:39 +08:00
fPredictedExposureTime = iExposureTime ;
qDebug ( ) < < " --------------------------Stop PerformAutoExposure " < < " Thread ID: " < < m_iThreadID ;
2021-12-02 18:07:29 +08:00
//emit SignalAcqFinished(m_iThreadID, 1);
2021-12-06 17:50:39 +08:00
2021-12-02 18:07:29 +08:00
return 0 ;
}
int CAbstractFSController : : TakeDarkFrame ( )
{
qDebug ( ) < < " Starting TakeDarkFrame " < < " Thread ID: " < < m_iThreadID ;
2021-12-06 17:50:39 +08:00
m_vecDataFrameDark . push_back ( TakeOneFrame ( ) ) ;
2021-12-02 18:07:29 +08:00
qDebug ( ) < < " Stop TakeDarkFrame " < < " Thread ID: " < < m_iThreadID ;
//emit SignalAcqFinished(m_iThreadID, 1);
return 0 ;
}
2021-12-06 17:50:39 +08:00
int CAbstractFSController : : TakeSignalFrame ( )
2021-12-02 18:07:29 +08:00
{
qDebug ( ) < < " Starting TakeSignal " < < " Thread ID: " < < m_iThreadID ;
2021-12-06 17:50:39 +08:00
m_vecDataFrameSignal . push_back ( TakeOneFrame ( ) ) ;
2021-12-02 18:07:29 +08:00
qDebug ( ) < < " Stop TakeSignal " < < " Thread ID: " < < m_iThreadID ;
//emit SignalAcqFinished(m_iThreadID, 1);
return 0 ;
}
2021-12-06 17:50:39 +08:00
DataFrame CAbstractFSController : : TakeOneFrame ( )
{
2022-03-01 09:53:11 +08:00
using namespace ZZ_MISCDEF : : IRIS ;
2022-01-20 09:36:35 +08:00
//int iExpTime = 0;
2021-12-06 17:50:39 +08:00
DataFrame dfTemp ;
2022-01-20 09:36:35 +08:00
// m_pFSCtrl->GetExposureTime(iExpTime);
// dfTemp.usExposureTimeInMS = iExpTime;
// m_pFSCtrl->GetDeviceTemperature(dfTemp.fTemperature);
2022-03-01 09:53:11 +08:00
if ( m_fsInfo . ucDeviceModel = = DeviceModel : : ISIF )
{
float fTemp ;
m_pFSCtrl - > GetDeviceTemperature ( fTemp ) ;
dfTemp . fTemperature = fTemp ;
}
else if ( m_fsInfo . ucDeviceModel = = DeviceModel : : IS1 )
{
dfTemp . fTemperature = 0 ;
}
2021-12-06 17:50:39 +08:00
int iRes = m_pFSCtrl - > SingleShot ( dfTemp ) ;
if ( iRes ! = 0 )
{
qDebug ( ) < < " Err. SingleShot " < < " Thread ID: " < < m_iThreadID ;
}
2022-04-29 15:37:54 +08:00
if ( m_fsInfo . ucDeviceModel = = DeviceModel : : OSIFAlpha | | m_fsInfo . ucDeviceModel = = DeviceModel : : OSIFBeta )
{
if ( m_vecNonLinearCalP . size ( ) ! = 8 )
{
qDebug ( ) < < " Err.Non Linear calibration parameters not fit.Skip... " < < " Thread ID: " < < m_iThreadID ;
return dfTemp ;
}
for ( int i = 0 ; i < m_daDeviceAttr . iPixels ; i + + )
{
dfTemp . lData [ i ] = dfTemp . lData [ i ] / ( m_vecNonLinearCalP [ 0 ] +
m_vecNonLinearCalP [ 1 ] * dfTemp . lData [ i ] +
m_vecNonLinearCalP [ 2 ] * pow ( dfTemp . lData [ i ] , 2 ) +
m_vecNonLinearCalP [ 3 ] * pow ( dfTemp . lData [ i ] , 3 ) +
m_vecNonLinearCalP [ 4 ] * pow ( dfTemp . lData [ i ] , 4 ) +
m_vecNonLinearCalP [ 5 ] * pow ( dfTemp . lData [ i ] , 5 ) +
m_vecNonLinearCalP [ 6 ] * pow ( dfTemp . lData [ i ] , 6 ) +
m_vecNonLinearCalP [ 7 ] * pow ( dfTemp . lData [ i ] , 7 )
) ;
}
}
2021-12-06 17:50:39 +08:00
return dfTemp ;
2022-01-20 09:36:35 +08:00
// DataFrame dfTemp;
// int iRes = m_pFSCtrl->SingleShot(dfTemp);
// if (iRes != 0)
// {
// qDebug() << "Err. SingleShot" << " Thread ID:" << m_iThreadID;
// }
//
// return dfTemp;
2021-12-06 17:50:39 +08:00
}
2021-12-02 18:07:29 +08:00
int CAbstractFSController : : SaveDataFile ( )
{
return 0 ;
}
2022-04-29 15:37:54 +08:00
int CAbstractFSController : : LoadQEProLinearCalibrationFile ( )
{
m_vecNonLinearCalP . clear ( ) ;
QDir qdirPath ( m_qstrCalFilePath ) ;
if ( ! qdirPath . exists ( ) )
{
qDebug ( ) < < " Non-Linear Calibration Folder not exist " < < " Thread ID: " < < m_iThreadID ;
return 1 ;
}
QString qstrFilePath ;
qstrFilePath = m_qstrCalFilePath + QString ( " / " ) + QString : : fromStdString ( m_fsInfo . strSN ) + QString ( " .NLC " ) ;
QFile qfCalFile ( qstrFilePath ) ;
bool bRes = qfCalFile . open ( QFile : : ReadOnly ) ;
if ( ! bRes )
{
qDebug ( ) < < " Non-Linear Calibration File open Failed " < < " Thread ID: " < < m_iThreadID ;
return 2 ;
}
while ( ! qfCalFile . atEnd ( ) )
{
QByteArray qbData = qfCalFile . readLine ( ) ;
qbData . remove ( qbData . size ( ) - 1 , 1 ) ;
m_vecNonLinearCalP . push_back ( qbData . toDouble ( ) ) ;
//qDebug() << qbData;
}
qfCalFile . close ( ) ;
qDebug ( ) < < " Non-Linear Calibration Params: " < < m_vecNonLinearCalP . size ( ) < < " Thread ID: " < < m_iThreadID ;
return 0 ;
}
2021-12-02 18:07:29 +08:00
int CAbstractFSController : : StartAcquisitionSignal ( )
{
//
qDebug ( ) < < " Starting acq Signal " < < " Thread ID: " < < m_iThreadID ;
2022-04-29 15:37:54 +08:00
2021-12-02 18:07:29 +08:00
// DataFrame struDF;
// int iii;
// m_pFSCtrl->SetExposureTime(10000000);
// m_pFSCtrl->GetExposureTime(iii);
// m_pFSCtrl->SingleShot(struDF);
2021-12-08 17:43:27 +08:00
2022-01-20 09:36:35 +08:00
PerformAutoExposure ( ) ;
2021-12-06 17:50:39 +08:00
TakeSignalFrame ( ) ;
2021-12-02 18:07:29 +08:00
qDebug ( ) < < " Stop acq Signal " < < " Thread ID: " < < m_iThreadID ;
emit SignalAcqFinished_Signal ( m_iThreadID , 1 ) ;
return 0 ;
}
int CAbstractFSController : : StartAcquisitionDark ( )
{
qDebug ( ) < < " Starting acq Dark " < < " Thread ID: " < < m_iThreadID ;
TakeDarkFrame ( ) ;
qDebug ( ) < < " Stop acq Dark " < < " Thread ID: " < < m_iThreadID ;
emit SignalAcqFinished_Dark ( m_iThreadID , 1 ) ;
2021-11-24 17:38:18 +08:00
return 0 ;
}
int CAbstractFSController : : StopAcquisition ( )
{
return 0 ;
}
2021-12-06 17:50:39 +08:00
int CAbstractFSController : : ClearBuffer ( )
{
m_vecDataFrameDark . clear ( ) ;
m_vecDataFrameSignal . clear ( ) ;
return 0 ;
}
2021-11-26 17:32:50 +08:00
2021-12-08 17:43:27 +08:00
int CAbstractFSController : : GetBuffer ( std : : vector < DataFrame > & pvecDataFrameDark , std : : vector < DataFrame > & pvecDataFrameSignal )
2021-12-06 17:50:39 +08:00
{
2021-12-08 17:43:27 +08:00
for ( size_t i = 0 ; i < m_vecDataFrameSignal . size ( ) ; i + + )
{
pvecDataFrameSignal . push_back ( m_vecDataFrameSignal [ i ] ) ;
pvecDataFrameDark . push_back ( m_vecDataFrameDark [ i ] ) ;
}
2021-12-06 17:50:39 +08:00
return 0 ;
}
2021-12-02 18:07:29 +08:00