diff --git a/src/RetrigAO.cpp b/src/RetrigAO.cpp index 04609ce382f8bcdc933ae0372a5319be4e2eb850..5d5a0dd652edb652d809309adb274c3e4da2bd9e 100755 --- a/src/RetrigAO.cpp +++ b/src/RetrigAO.cpp @@ -200,7 +200,7 @@ void RetrigAO::init_device() ch5 = 0; ch6 = 0; ch7 = 0; - _error_message = ""; + m_error_message = "An error has occured"; // Initialise variables to default values //-------------------------------------------- @@ -1563,6 +1563,12 @@ void RetrigAO::stop_with_zero_forcing() init_board(); } +void RetrigAO::raise_error(std::string p_error_message) +{ + m_error_message = p_error_message; + set_state(Tango::FAULT); +} + //+------------------------------------------------------------------ /** * method: RetrigAI::init_board @@ -1578,12 +1584,8 @@ void RetrigAO::init_board(void) //- 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*)("RetrigAO::init_device") - ); + raise_error("RetrigAO::init_board\nout of memory error while initializing ADLinkContinuousAO"); + return; } asl::ContinuousAOConfig _config; @@ -1597,13 +1599,8 @@ void RetrigAO::init_board(void) 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*)("RetrigAO::init_device") - ); + raise_error("RetrigAO::init_device\nout of memory error while initializing channel's datas"); + return; } @@ -2021,35 +2018,38 @@ void RetrigAO::init_board(void) DEBUG_STREAM<<"RetrigAO::init_device : init acq"<<std::endl; try{ - _ASL_TRY_ACTION - ( - ao->init(adl::DAQ2502, boardNum), - "init", - "RetrigAO::init_device", - set_internal_state() - ); - - config = _config; - /*DEBUG_STREAM<<"RetrigAO::init_device : config acq"<<std::endl; - try - { _ASL_TRY_ACTION - ( - ao->configure(_config), - "configure", - "RetrigAO::init_device", - set_internal_state() - ); - } - catch (...) - { - _error_message = "Error while configurating drivers"; - } - */ + ( + ao->init(adl::DAQ2502, boardNum), + "init", + "RetrigAO::init_device", + set_internal_state() + ); + + config = _config; + + /*DEBUG_STREAM<<"RetrigAO::init_device : config acq"<<std::endl; + try + { + _ASL_TRY_ACTION + ( + ao->configure(_config), + "configure", + "RetrigAO::init_device", + set_internal_state() + ); + } + catch (...) + { + raise_error("RetrigAO::init_device\nError while configurating drivers"); + return; + } + */ } catch (...) { - _error_message = "Error while initializing drivers"; + raise_error("RetrigAO::init_device\nError while initializing drivers"); + return; } } //+------------------------------------------------------------------ @@ -2245,10 +2245,7 @@ void RetrigAO::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: diff --git a/src/RetrigAO.h b/src/RetrigAO.h index 727cd8b1ff84d4c7846b54d2781f3426a129b9a9..ccbd460a9b0450d56cd16d6773fb8fb4db099c0e 100755 --- a/src/RetrigAO.h +++ b/src/RetrigAO.h @@ -539,6 +539,7 @@ protected : ADLinkContinuousAO* ao; void set_internal_state(void); void stop_with_zero_forcing(); + void raise_error(std::string p_error_message); double* ch0; double* ch1; double* ch2; @@ -549,7 +550,7 @@ protected : double* ch7; double err_ctr; short use_fifo; - std::string _error_message; + std::string m_error_message; //- Store the values into the property //- Properties stuff int FindIndexFromPropertyName(Tango::DbData& dev_prop, string property_name);