Skip to content
Snippets Groups Projects
Commit 08dd1fba authored by Sonia Minolli's avatar Sonia Minolli
Browse files

Add config optimization at start time for contiuous analog acquisition (TANGODEVIC-1652)

parent ba9065d5
No related branches found
No related tags found
No related merge requests found
...@@ -162,6 +162,11 @@ protected: ...@@ -162,6 +162,11 @@ protected:
*/ */
asl::ContinuousAIConfig ai_config_; asl::ContinuousAIConfig ai_config_;
/**
* Configuration optimization flag.
*/
bool first_config_;
/** /**
* Buffer index (use to identify "current" buffer). * Buffer index (use to identify "current" buffer).
*/ */
......
...@@ -103,7 +103,8 @@ ADContinuousAIBoard::ADContinuousAIBoard (unsigned short _type, ...@@ -103,7 +103,8 @@ ADContinuousAIBoard::ADContinuousAIBoard (unsigned short _type,
has_been_started_at_least_once_ (false), has_been_started_at_least_once_ (false),
last_sample_index_in_last_daq_buffer_ (0), last_sample_index_in_last_daq_buffer_ (0),
stop_pos_ (0), stop_pos_ (0),
stop_count_ (0) stop_count_ (0),
first_config_(true)
{ {
//- std::cout << "ADContinuousAIBoard::ADContinuousAIBoard <-" << std::endl; //- std::cout << "ADContinuousAIBoard::ADContinuousAIBoard <-" << std::endl;
//- std::cout << "ADContinuousAIBoard::ADContinuousAIBoard ->" << std::endl; //- std::cout << "ADContinuousAIBoard::ADContinuousAIBoard ->" << std::endl;
...@@ -126,6 +127,14 @@ ADContinuousAIBoard::~ADContinuousAIBoard () ...@@ -126,6 +127,14 @@ ADContinuousAIBoard::~ADContinuousAIBoard ()
void ADContinuousAIBoard::configure_continuous_ai (const asl::ContinuousAIConfig& _ai_config) void ADContinuousAIBoard::configure_continuous_ai (const asl::ContinuousAIConfig& _ai_config)
throw (asl::DAQException) throw (asl::DAQException)
{ {
// configuration optimization:
asl::ContinuousAIConfig prev_config;
if (!first_config_)
{
// store previous config if not first time function is called
prev_config = this->ai_config_;
}
//- store config locally //- store config locally
this->ai_config_ = _ai_config; this->ai_config_ = _ai_config;
...@@ -147,9 +156,36 @@ void ADContinuousAIBoard::configure_continuous_ai (const asl::ContinuousAIConfig ...@@ -147,9 +156,36 @@ void ADContinuousAIBoard::configure_continuous_ai (const asl::ContinuousAIConfig
"ADContinuousAIBoard::configure_continuous_ai"); "ADContinuousAIBoard::configure_continuous_ai");
} }
const asl::ActiveAIChannels& prev_ac = prev_config.get_active_channels();
for (unsigned int c = 0; c < ac.size(); c++) for (unsigned int c = 0; c < ac.size(); c++)
{ {
int err = ::D2K_AI_CH_Config(this->idid_, ac[c].id, ac[c].range | ac[c].grd_ref); int err = 0;
bool do_config = true;
// if not first time function is called, check if config has changed
if (!first_config_)
{
if ((prev_ac[c].id == ac[c].id) &&
(prev_ac[c].range == ac[c].range) &&
(prev_ac[c].grd_ref == ac[c].grd_ref))
{
// config equals, don't call D2K_AI_CH_Config function
do_config = false;
}
else
{
do_config = true;
}
}
else
{
do_config = true;
}
if (do_config)
{
err = ::D2K_AI_CH_Config(this->idid_, ac[c].id, ac[c].range | ac[c].grd_ref);
}
if (err < 0) if (err < 0)
{ {
...@@ -159,6 +195,8 @@ void ADContinuousAIBoard::configure_continuous_ai (const asl::ContinuousAIConfig ...@@ -159,6 +195,8 @@ void ADContinuousAIBoard::configure_continuous_ai (const asl::ContinuousAIConfig
err); err);
} }
} }
first_config_ = false;
//- analog trigger config -------------------------------------------------- //- analog trigger config --------------------------------------------------
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment