Skip to content
Snippets Groups Projects

[ICATHALES-6] - Device do not start when driver not availible

2 files
+ 72
56
Compare changes
  • Side-by-side
  • Inline

Files

src/ContinuousAO.cpp 100644 → 100755
+ 71
56
@@ -167,6 +167,7 @@ void ContinuousAO::init_device()
ch5 = 0;
ch6 = 0;
ch7 = 0;
error_message = "";
// Initialise variables to default values
//--------------------------------------------
@@ -178,7 +179,7 @@ void ContinuousAO::init_device()
//- check memory allocation
if (ao == 0)
{
this->set_internal_state();
set_internal_state();
Tango::Except::throw_exception(
(const char*)("OUT_OF_MEMORY"),
(const char*)("out of memory error"),
@@ -197,8 +198,8 @@ void ContinuousAO::init_device()
ch7 = new double[bufferDepth];
if(ch0 == 0 || ch1 == 0 || ch2 == 0 || ch3 == 0 || ch4 == 0 || ch5 == 0 ||ch6 == 0 || ch7 == 0)
{
this->set_internal_state();
this->delete_device();
set_internal_state();
delete_device();
Tango::Except::throw_exception(
(const char*)("OUT_OF_MEMORY"),
(const char*)("out of memory error"),
@@ -221,10 +222,10 @@ void ContinuousAO::init_device()
(default_waveformA)[i] = ::sin((double)i * 2. * 3.14159 / (double) bufferDepth) * max_valA;
}
ACE_OS::memcpy(this->ch0, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(this->ch1, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(this->ch2, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(this->ch3, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(ch0, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(ch1, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(ch2, default_waveformA.base(), default_waveformA.size());
ACE_OS::memcpy(ch3, default_waveformA.base(), default_waveformA.size());
// default waveform for group A (channel 4 to 7)
asl::AOScaledData default_waveformB(bufferDepth);
@@ -243,10 +244,10 @@ void ContinuousAO::init_device()
{
default_waveformB[i] = -max_valB + 0.01;
}
ACE_OS::memcpy(this->ch4, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(this->ch5, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(this->ch6, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(this->ch7, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(ch4, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(ch5, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(ch6, default_waveformB.base(), default_waveformB.size());
ACE_OS::memcpy(ch7, default_waveformB.base(), default_waveformB.size());
//--------------------------channels config------------------------------------
asl::ActiveAOChannel ac;
@@ -538,26 +539,37 @@ void ContinuousAO::init_device()
config.set_output_rate(frequency);
DEBUG_STREAM<<"ContinuousAO::init_device : init acq"<<std::endl;
_ASL_TRY //_ACTION
(
ao->init(adl::DAQ2502, boardNum),
"init",
"ContinuousAO::init_device" //,
// this->set_internal_state()
);
//ao->configure(config);
DEBUG_STREAM<<"ContinuousAO::init_device : config acq"<<std::endl;
_ASL_TRY //_ACTION
(
ao->configure(config),
"configure",
"ContinuousAO::init_device" //,
//this->set_internal_state()
);
try{
_ASL_TRY //_ACTION
(
ao->init(adl::DAQ2502, boardNum),
"init",
"ContinuousAO::init_device",
set_internal_state()
);
DEBUG_STREAM<<"ContinuousAO::init_device : config acq"<<std::endl;
try{
_ASL_TRY //_ACTION
(
ao->configure(config),
"configure",
"ContinuousAO::init_device",
set_internal_state()
);
}
catch (...)
{
error_message = "Error while configuring driver";
}
}
catch (...)
{
error_message = "Error while init driver";
}
//ao->configure(config);
}
@@ -1056,7 +1068,7 @@ void ContinuousAO::get_device_property()
//-----------------------------------------------------------------------------
void ContinuousAO::always_executed_hook()
{
this->set_internal_state();
set_internal_state();
}
//+----------------------------------------------------------------------------
@@ -1075,7 +1087,7 @@ void ContinuousAO::read_attr_hardware(vector<long> &attr_list)
//---------------------------------
ao->lock_data();
this->err_ctr = ao->err_ctr;
err_ctr = ao->err_ctr;
ao->unlock_data();
@@ -1160,7 +1172,7 @@ void ContinuousAO::read_attr(Tango::Attribute &attr)
else if (attr_name == "useBoardFifo")
{
// the information about data loading on fifo in available only after Start command.
if(this->get_state() == Tango::RUNNING)
if(get_state() == Tango::RUNNING)
attr.set_value(&use_fifo);
else
attr.set_quality(Tango::ATTR_INVALID);
@@ -1232,12 +1244,12 @@ void ContinuousAO::start()
ao->start(),
"start",
"ContinuousAO::start",
this->set_internal_state()
set_internal_state()
);
// get if the output data have been loaded in the onboard FIFO.
// depends on the size of the buffer.
this->use_fifo = ao->use_board_fifo();
use_fifo = ao->use_board_fifo();
}
@@ -1260,7 +1272,7 @@ void ContinuousAO::stop()
ao->stop(),
"stop",
"ContinuousAO::stop",
this->set_internal_state()
set_internal_state()
);
}
@@ -1314,7 +1326,7 @@ void ContinuousAO::set_aoscaled_data(const Tango::DevVarDoubleStringArray *argin
ao->stop(),
"stop",
"ContinuousAO::set_aoscaled_data",
this->set_internal_state()
set_internal_state()
);
// get the configuration
@@ -1333,42 +1345,42 @@ void ContinuousAO::set_aoscaled_data(const Tango::DevVarDoubleStringArray *argin
case '0':
::memcpy(ch0, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch0, "Channel0Waveform");
save_waveform(ch0, "Channel0Waveform");
break;
case '1':
::memcpy(ch1, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch1, "Channel1Waveform");
save_waveform(ch1, "Channel1Waveform");
break;
case '2':
::memcpy(ch2, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch2, "Channel2Waveform");
save_waveform(ch2, "Channel2Waveform");
break;
case '3':
::memcpy(ch3, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch3, "Channel3Waveform");
save_waveform(ch3, "Channel3Waveform");
break;
case '4':
::memcpy(ch4, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch4, "Channel4Waveform");
save_waveform(ch4, "Channel4Waveform");
break;
case '5':
::memcpy(ch5, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch5, "Channel5Waveform");
save_waveform(ch5, "Channel5Waveform");
break;
case '6':
::memcpy(ch6, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch6, "Channel6Waveform");
save_waveform(ch6, "Channel6Waveform");
break;
case '7':
::memcpy(ch7, data.base(), data.size());
//save the waveform in the database
this->save_waveform(ch7, "Channel7Waveform");
save_waveform(ch7, "Channel7Waveform");
break;
default:
Tango::Except::throw_exception(
@@ -1385,7 +1397,7 @@ void ContinuousAO::set_aoscaled_data(const Tango::DevVarDoubleStringArray *argin
ao->configure(config),
"configure",
"ContinuousAO::set_aoscaled_data",
this->set_internal_state()
set_internal_state()
);
}
@@ -1398,30 +1410,33 @@ void ContinuousAO::set_internal_state(void)
{
if(ao == 0)
{
this->set_state(Tango::UNKNOWN);
this->set_status("The acquisition was not initialized properly");
set_state(Tango::UNKNOWN);
set_status("The acquisition was not initialized properly");
}
else
{
switch(ao->state())
{
case asl::ContinuousAO::STANDBY:
this->set_state(Tango::STANDBY);
this->set_status("The generation is stopped");
set_state(Tango::STANDBY);
set_status("The generation is stopped");
break;
case asl::ContinuousAO::RUNNING:
case asl::ContinuousAO::ABORTING:
this->set_state(Tango::RUNNING);
this->set_status("The generation is running");
set_state(Tango::RUNNING);
set_status("The generation is running");
break;
case asl::ContinuousAO::FAULT:
this->set_state(Tango::FAULT);
this->set_status("An error has occured");
set_state(Tango::FAULT);
if (error_message == "")
set_status("An error has occured");
else
set_status(error_message);
break;
case asl::ContinuousAO::UNKNOWN:
default:
this->set_state(Tango::UNKNOWN);
this->set_status("The generation is in an unknown state");
set_state(Tango::UNKNOWN);
set_status("The generation is in an unknown state");
break;
}
}
Loading