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

Trigger mode writing in error (TANGODEVIC-571)

parent 384d0b0f
Branches
Tags
No related merge requests found
...@@ -142,6 +142,9 @@ void Spectrometer::delete_device() ...@@ -142,6 +142,9 @@ void Spectrometer::delete_device()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void Spectrometer::init_device() void Spectrometer::init_device()
{ {
set_state(Tango::INIT);
set_status("Init in progress...");
//- initialize the inner appender (first thing to do) //- initialize the inner appender (first thing to do)
try try
{ {
...@@ -150,8 +153,8 @@ void Spectrometer::init_device() ...@@ -150,8 +153,8 @@ void Spectrometer::init_device()
catch( Tango::DevFailed& df ) catch( Tango::DevFailed& df )
{ {
ERROR_STREAM << df << std::endl; ERROR_STREAM << df << std::endl;
set_state(Tango::INIT); set_state(Tango::FAULT);
set_status( "initialization failed - could not instanciate the InnerAppender"); set_status("Initialization failed - could not instanciate the InnerAppender!");
return; return;
} }
...@@ -178,21 +181,20 @@ void Spectrometer::init_device() ...@@ -178,21 +181,20 @@ void Spectrometer::init_device()
catch (Tango::DevFailed & df) catch (Tango::DevFailed & df)
{ {
ERROR_STREAM << df << std::endl; ERROR_STREAM << df << std::endl;
set_status ("initialization failed - <get_device_property> failed [see device log for details]"); set_status("Initialization failed - <get_device_property> failed [see device log for details]");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
catch (...) catch (...)
{ {
ERROR_STREAM << "initialization failed - unknown <get_device_property> error" << std::endl; ERROR_STREAM << "initialization failed - unknown <get_device_property> error" << std::endl;
set_status ("initialization failed [unknown <get_device_property> error]"); set_status("Initialization failed [unknown <get_device_property> error]");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
attr_maxBufferDepth_write = yat4tango::PropertyHelper::get_memorized_attribute<Tango::DevULong>(this, "MaxBufferDepth", 100); attr_maxBufferDepth_write = yat4tango::PropertyHelper::get_memorized_attribute<Tango::DevULong>(this, "MaxBufferDepth", 100);
m_trigger_mode = yat4tango::PropertyHelper::get_memorized_attribute<unsigned short>(this, "TriggerMode", 0); m_trigger_mode = triggerMode;
attr_triggerMode_write = m_trigger_mode;
#ifndef NO_DRIVER #ifndef NO_DRIVER
int l_nbSpectro = 0; int l_nbSpectro = 0;
...@@ -222,28 +224,28 @@ void Spectrometer::init_device() ...@@ -222,28 +224,28 @@ void Spectrometer::init_device()
{ {
ERROR_STREAM << "spectrometer index out of range" << std::endl; ERROR_STREAM << "spectrometer index out of range" << std::endl;
set_state(Tango::FAULT); set_state(Tango::FAULT);
set_status("initialization failed [see device log for details]"); set_status("Initialization failed [see device log for details]");
return; return;
} }
//- initialize trigger mode //- initialize trigger mode
try try
{ {
DEBUG_STREAM << "Set current trigger mode to: " << m_trigger_mode << std::endl;
m_wrapper.setExternalTriggerMode(spectrometerIndex, m_trigger_mode); m_wrapper.setExternalTriggerMode(spectrometerIndex, m_trigger_mode);
set_status("The spectrometer is ready");
DEBUG_STREAM << "Device successfully initialized" << std::endl; DEBUG_STREAM << "Device successfully initialized" << std::endl;
} }
catch (Tango::DevFailed & df) catch (Tango::DevFailed & df)
{ {
ERROR_STREAM << df << std::endl; ERROR_STREAM << df << std::endl;
set_status ("initialization failed [see device log for details]"); set_status("Initialization failed [see device log for details]");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
catch (...) catch (...)
{ {
ERROR_STREAM << "initialization failed - could not set trigger mode on specified spectrometer index" << std::endl; ERROR_STREAM << "initialization failed - could not set trigger mode on specified spectrometer index" << std::endl;
set_status ("initialization failed [see device log for details]"); set_status("Initialization failed [see device log for details]");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
...@@ -275,25 +277,26 @@ void Spectrometer::init_device() ...@@ -275,25 +277,26 @@ void Spectrometer::init_device()
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
ERROR_STREAM << "initialization failed - SpectrometerTAsk allocation failed" << std::endl; ERROR_STREAM << "initialization failed - SpectrometerTAsk allocation failed" << std::endl;
set_status ("initialization failed - SpectrometerTask allocation failed"); set_status("Initialization failed - SpectrometerTask allocation failed");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
catch (Tango::DevFailed & df) catch (Tango::DevFailed & df)
{ {
ERROR_STREAM << df << std::endl; ERROR_STREAM << df << std::endl;
set_status ("initialization failed - SpectrometerTask allocation failed [see device log for details]"); set_status("Initialization failed - SpectrometerTask allocation failed [see device log for details]");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
catch (...) catch (...)
{ {
ERROR_STREAM << "initialization failed - unknown error" << std::endl; ERROR_STREAM << "initialization failed - unknown error" << std::endl;
set_status ("initialization failed [unknown error]"); set_status("Initialization failed [unknown error]");
set_state(Tango::FAULT); set_state(Tango::FAULT);
return; return;
} }
set_status("The spectrometer is ready");
set_state(Tango::STANDBY); set_state(Tango::STANDBY);
} }
...@@ -470,9 +473,7 @@ void Spectrometer::read_maxBufferDepth(Tango::Attribute &attr) ...@@ -470,9 +473,7 @@ void Spectrometer::read_maxBufferDepth(Tango::Attribute &attr)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void Spectrometer::read_triggerMode(Tango::Attribute &attr) void Spectrometer::read_triggerMode(Tango::Attribute &attr)
{ {
Tango::DevUShort* dp = new Tango::DevUShort; attr.set_value(&m_trigger_mode);
*dp = m_trigger_mode;
attr.set_value( dp, 1, 0, true );
} }
//+---------------------------------------------------------------------------- //+----------------------------------------------------------------------------
...@@ -486,8 +487,29 @@ void Spectrometer::write_triggerMode(Tango::WAttribute &attr) ...@@ -486,8 +487,29 @@ void Spectrometer::write_triggerMode(Tango::WAttribute &attr)
{ {
DEBUG_STREAM << "Spectrometer::write_triggerMode(Tango::WAttribute &attr) entering... "<< endl; DEBUG_STREAM << "Spectrometer::write_triggerMode(Tango::WAttribute &attr) entering... "<< endl;
attr.get_write_value(attr_triggerMode_write); Tango::DevState st = get_state();
m_trigger_mode = attr_triggerMode_write; if ((st == Tango::FAULT) ||
(st == Tango::INIT) ||
(st == Tango::RUNNING) )
{
THROW_DEVFAILED(
_CPTC("BAD_STATE"),
_CPTC("Action not allowed in this state - Device must be <STANDBY>"),
_CPTC("Spectrometer::write_triggerMode"));
}
unsigned short mode;
attr.get_write_value(mode);
if ((mode > 4) || (mode < 0))
{
THROW_DEVFAILED(
_CPTC("DATA_OUT_OF_RANGE"),
_CPTC("The trigger mode must be set between 0 and 4!"),
_CPTC("Spectrometer::write_triggerMode"));
}
DEBUG_STREAM << "write trigger mode: " << mode << endl;
m_trigger_mode = mode;
#ifndef NO_DRIVER #ifndef NO_DRIVER
m_wrapper.setExternalTriggerMode(spectrometerIndex, m_trigger_mode); m_wrapper.setExternalTriggerMode(spectrometerIndex, m_trigger_mode);
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment