diff --git a/src/ContinuousAO.cpp b/src/ContinuousAO.cpp index 4148d051818043ae2365ebb54827908996a1e856..2bda9f121c6f2c3bd51db5abeee0cb7bc76480eb 100755 --- a/src/ContinuousAO.cpp +++ b/src/ContinuousAO.cpp @@ -167,7 +167,7 @@ void ContinuousAO::init_device() ch5 = 0; ch6 = 0; ch7 = 0; - error_message = ""; + m_error_message = "An error has occured"; // Initialise variables to default values //-------------------------------------------- @@ -179,12 +179,8 @@ void ContinuousAO::init_device() //- check memory allocation if (ao == 0) { - set_internal_state(); - Tango::Except::throw_exception( - (const char*)("OUT_OF_MEMORY"), - (const char*)("out of memory error"), - (const char*)("ContinuousAO::init_device") - ); + raise_error("ContinuousAO::init_device\nout of memory error while initializing ADLinkContinuousAO"); + return; } asl::ContinuousAOConfig config; @@ -198,13 +194,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) { - set_internal_state(); - delete_device(); - Tango::Except::throw_exception( - (const char*)("OUT_OF_MEMORY"), - (const char*)("out of memory error"), - (const char*)("ContinuousAO::init_device") - ); + raise_error("ContinuousAO::init_device\nout of memory error while initializing channel's datas"); + return; } @@ -540,33 +531,30 @@ void ContinuousAO::init_device() DEBUG_STREAM<<"ContinuousAO::init_device : init acq"<<std::endl; try{ - _ASL_TRY //_ACTION - ( + _ASL_TRY( ao->init(adl::DAQ2502, boardNum), "init", - "ContinuousAO::init_device", - set_internal_state() - ); + "ContinuousAO::init_device" + ); - - DEBUG_STREAM<<"ContinuousAO::init_device : config acq"<<std::endl; - try{ - _ASL_TRY //_ACTION - ( - ao->configure(config), - "configure", - "ContinuousAO::init_device", - set_internal_state() + DEBUG_STREAM<<"ContinuousAO::init_device : config acq"<<std::endl; + try{ + _ASL_TRY( + ao->configure(config), + "configure", + "ContinuousAO::init_device" ); - } - catch (...) - { - error_message = "Error while configuring driver"; - } + } + catch (...) + { + raise_error("ContinuousAO::init_device\nError while configuring driver"); + return; + } } catch (...) { - error_message = "Error while init driver"; + raise_error("ContinuousAO::init_device\nError while initializing the driver"); + return; } //ao->configure(config); @@ -1428,10 +1416,7 @@ void ContinuousAO::set_internal_state(void) break; case asl::ContinuousAO::FAULT: set_state(Tango::FAULT); - if (error_message == "") - set_status("An error has occured"); - else - set_status(error_message); + set_status(m_error_message); break; case asl::ContinuousAO::UNKNOWN: default: @@ -1472,4 +1457,10 @@ void ContinuousAO::save_waveform(double* waveform, string wfm_channel) "ContinuousAO::save_waveform", ); } + +void ContinuousAO::raise_error(std::string p_error_message) +{ + m_error_message = p_error_message; + set_state(Tango::FAULT); +} } // namespace diff --git a/src/ContinuousAO.h b/src/ContinuousAO.h index 71fd1954ab1fa022871ef1f6e82697dd97173f97..5829b23859cd5fc1ca7932ad1a2a51babfd60161 100755 --- a/src/ContinuousAO.h +++ b/src/ContinuousAO.h @@ -326,6 +326,7 @@ public : ADLinkContinuousAO* ao; // asl::ContinuousAOConfig* config; void set_internal_state(void); + void raise_error(std::string p_error_message); // save a channel waveform in the database void ContinuousAO::save_waveform(double* waveform, string wfm_channel); double* ch0; @@ -338,11 +339,7 @@ public : double* ch7; double err_ctr; short use_fifo; - std::string error_message; - - - - + std::string m_error_message; protected : // Add your own data members here