Skip to content
Snippets Groups Projects

[CTRLRFC-1594] Apply memorized dynamic attributes at init

1 file
+ 139
103
Compare changes
  • Side-by-side
  • Inline
+ 139
103
@@ -88,6 +88,7 @@ namespace SingleShotAO_ns
_CPTC("SingleShotAO::check_manager")); \
} while (0)
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::SingleShotAO(string &s)
@@ -115,6 +116,8 @@ SingleShotAO::SingleShotAO(Tango::DeviceClass *cl,const char *s,const char *d)
{
init_device();
}
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::delete_device()
@@ -164,6 +167,7 @@ void SingleShotAO::delete_device()
yat4tango::InnerAppender::release(this);
}
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::init_device()
@@ -197,8 +201,8 @@ void SingleShotAO::init_device()
critical_properties_missing = false;
isInitOk = false;
m_frequency = 0.0;
m_dyn_attr_manager = NULL;
m_state = Tango::INIT;
m_dyn_attr_manager = NULL;
m_state = Tango::INIT;
// Initialise variables to default values
//--------------------------------------------
@@ -265,7 +269,7 @@ void SingleShotAO::init_device()
return;
}
// initialize channel number according to board type
// initialize channel number according to board type
m_nb_chan = 0;
if (boardType == k6208_BOARD_TYPE)
{
@@ -333,7 +337,7 @@ void SingleShotAO::init_device()
return;
}
// create dynamic attribute manager
// create dynamic attribute manager
try
{
m_dyn_attr_manager = new yat4tango::DynamicAttributeManager(this);
@@ -354,140 +358,152 @@ void SingleShotAO::init_device()
}
// add dynamic attributes: channel, speed & initial for each channel
std::vector<yat4tango::DynamicAttributeInfo> l_dynAttrList;
std::vector<yat4tango::DynamicAttributeInfo> l_dynAttrList;
for (unsigned int l_cpt = 0; l_cpt < m_nb_chan; l_cpt++)
{
yat::OSStream oss;
oss << l_cpt;
// Channel value
yat4tango::DynamicAttributeInfo dai;
dai.dev = this;
dai.tai.name = kCHANNEL + oss.str();
dai.tai.label = kCHANNEL + oss.str();
// ╔═══════════════╗
// ║ Channel value ║
// ╚═══════════════╝
yat4tango::DynamicAttributeInfo dai_channel;
dai_channel.dev = this;
dai_channel.tai.name = kCHANNEL + oss.str();
dai_channel.tai.label = kCHANNEL + oss.str();
//- describe the dyn attr we want...
dai.tai.data_type = Tango::DEV_DOUBLE;
dai.tai.data_format = Tango::SCALAR;
dai.tai.writable = Tango::READ_WRITE; // soso
dai.tai.disp_level = Tango::OPERATOR;
dai.tai.unit = "V";
dai.tai.standard_unit = "V";
dai.tai.display_unit = "V";
dai.tai.max_value = "10.0";
dai.tai.min_value = "-10.0";
dai.tai.description = "Output value for channel " + oss.str() + " (in measurementUnit).";
dai.tai.format = "%1.1f";
dai.memorized = true;
dai.cdb = false;
dai_channel.tai.data_type = Tango::DEV_DOUBLE;
dai_channel.tai.data_format = Tango::SCALAR;
dai_channel.tai.writable = Tango::READ_WRITE; // soso
dai_channel.tai.disp_level = Tango::OPERATOR;
dai_channel.tai.unit = "V";
dai_channel.tai.standard_unit = "V";
dai_channel.tai.display_unit = "V";
dai_channel.tai.max_value = "10.0";
dai_channel.tai.min_value = "-10.0";
dai_channel.tai.description = "Output value for channel " + oss.str() + " (in measurementUnit).";
dai_channel.tai.format = "%1.1f";
dai_channel.memorized = true;
dai_channel.cdb = false;
//- read callback
dai.rcb = yat4tango::DynamicAttributeReadCallback::instanciate(const_cast<SingleShotAO&>(*this),
dai_channel.rcb = yat4tango::DynamicAttributeReadCallback::instanciate(const_cast<SingleShotAO&>(*this),
&SingleShotAO::read_channel);
//- write callback
dai.wcb = yat4tango::DynamicAttributeWriteCallback::instanciate(const_cast<SingleShotAO&>(*this),
dai_channel.wcb = yat4tango::DynamicAttributeWriteCallback::instanciate(const_cast<SingleShotAO&>(*this),
&SingleShotAO::write_channel);
l_dynAttrList.push_back(dai);
l_dynAttrList.push_back(dai_channel);
// Speed value
yat4tango::DynamicAttributeInfo dai_2;
dai_2.dev = this;
dai_2.tai.name = kSPEED + oss.str();
dai_2.tai.label = kSPEED + oss.str();
// ╔═══════════════╗
// ║ Speed value ║
// ╚═══════════════╝
yat4tango::DynamicAttributeInfo dai_speed;
dai_speed.dev = this;
dai_speed.tai.name = kSPEED + oss.str();
dai_speed.tai.label = kSPEED + oss.str();
//- describe the dyn attr we want...
dai_2.tai.data_type = Tango::DEV_DOUBLE;
dai_2.tai.data_format = Tango::SCALAR;
dai_2.tai.writable = Tango::READ_WRITE;
dai_2.tai.disp_level = Tango::OPERATOR;
dai_2.tai.unit = "V/s";
dai_2.tai.standard_unit = "V/s";
dai_2.tai.display_unit = "V/s";
dai_2.tai.description = "Speed for ramp generation, in V/s. If speed is NULL, no ramp generated but direct write on channel output " + oss.str() + " (in measurementUnit).";
dai_2.tai.format = "%1.1f";
//- cleanup tango db option: cleanup tango db when removing this dyn. attr. (i.e. erase its properties fom db)
// to be activated with tango 8 :
dai_2.memorized = true;
dai_2.cdb = false;
dai_speed.tai.data_type = Tango::DEV_DOUBLE;
dai_speed.tai.data_format = Tango::SCALAR;
dai_speed.tai.writable = Tango::READ_WRITE;
dai_speed.tai.disp_level = Tango::OPERATOR;
dai_speed.tai.unit = "V/s";
dai_speed.tai.standard_unit = "V/s";
dai_speed.tai.display_unit = "V/s";
dai_speed.tai.description = "Speed for ramp generation, in V/s. If speed is NULL, no ramp generated but direct write on channel output " + oss.str() + " (in measurementUnit).";
dai_speed.tai.format = "%1.1f";
//- cleanup tango db option: cleanup tango db when removing this dyn. attr. (i.e. erase its properties from db)
dai_speed.memorized = true;
dai_speed.cdb = false;
//- read callback
dai_2.rcb = yat4tango::DynamicAttributeReadCallback::instanciate(const_cast<SingleShotAO&>(*this),
dai_speed.rcb = yat4tango::DynamicAttributeReadCallback::instanciate(const_cast<SingleShotAO&>(*this),
&SingleShotAO::read_speed);
//- write callback
dai_2.wcb = yat4tango::DynamicAttributeWriteCallback::instanciate(const_cast<SingleShotAO&>(*this),
dai_speed.wcb = yat4tango::DynamicAttributeWriteCallback::instanciate(const_cast<SingleShotAO&>(*this),
&SingleShotAO::write_speed);
l_dynAttrList.push_back(dai_2);
l_dynAttrList.push_back(dai_speed);
// Initial value
yat4tango::DynamicAttributeInfo dai_3;
dai_3.dev = this;
dai_3.tai.name = kINITIAL + oss.str();
dai_3.tai.label = kINITIAL + oss.str();
// ╔═══════════════╗
// ║ Initial value ║
// ╚═══════════════╝
yat4tango::DynamicAttributeInfo dai_initial;
dai_initial.dev = this;
dai_initial.tai.name = kINITIAL + oss.str();
dai_initial.tai.label = kINITIAL + oss.str();
//- describe the dyn attr we want...
dai_3.tai.data_type = Tango::DEV_DOUBLE;
dai_3.tai.data_format = Tango::SCALAR;
dai_3.tai.writable = Tango::READ_WRITE;
dai_3.tai.disp_level = Tango::OPERATOR;
dai_3.tai.unit = "V";
dai_3.tai.standard_unit = "V";
dai_3.tai.display_unit = "V";
dai_3.tai.description = "Initial value for ramp function, in V. Defaults to last written value in channel attribute " + oss.str() + ".";
dai_3.tai.format = "%1.2f";
//- cleanup tango db option: cleanup tango db when removing this dyn. attr. (i.e. erase its properties fom db)
// to be activated with tango 8 :
dai_3.memorized = true;
dai_3.cdb = false;
dai_initial.tai.data_type = Tango::DEV_DOUBLE;
dai_initial.tai.data_format = Tango::SCALAR;
dai_initial.tai.writable = Tango::READ_WRITE;
dai_initial.tai.disp_level = Tango::OPERATOR;
dai_initial.tai.unit = "V";
dai_initial.tai.standard_unit = "V";
dai_initial.tai.display_unit = "V";
dai_initial.tai.description = "Initial value for ramp function, in V. Defaults to last written value in channel attribute " + oss.str() + ".";
dai_initial.tai.format = "%1.2f";
//- cleanup tango db option: cleanup tango db when removing this dyn. attr. (i.e. erase its properties from db)
dai_initial.memorized = true;
dai_initial.cdb = false;
//- read callback
dai_3.rcb = yat4tango::DynamicAttributeReadCallback::instanciate(const_cast<SingleShotAO&>(*this),
dai_initial.rcb = yat4tango::DynamicAttributeReadCallback::instanciate(const_cast<SingleShotAO&>(*this),
&SingleShotAO::read_initial);
//- write callback
dai_3.wcb = yat4tango::DynamicAttributeWriteCallback::instanciate(const_cast<SingleShotAO&>(*this),
dai_initial.wcb = yat4tango::DynamicAttributeWriteCallback::instanciate(const_cast<SingleShotAO&>(*this),
&SingleShotAO::write_initial);
l_dynAttrList.push_back(dai_3);
l_dynAttrList.push_back(dai_initial);
}
this->m_dyn_attr_manager->add_attributes(l_dynAttrList);
this->m_dyn_attr_manager->add_attributes(l_dynAttrList);
// Get memorized values from database
for (unsigned int l_cpt = 0; l_cpt < m_nb_chan; l_cpt++)
{
// Get memorized values from database
for (unsigned int l_cpt = 0; l_cpt < m_nb_chan; l_cpt++)
{
yat::OSStream oss;
oss << l_cpt;
// speed value
try
{
std::string attr_name = kSPEED + oss.str();
std::string name = "__" + attr_name;
// To be activated with Tango 8
//double l_val = yat4tango::PropertyHelper::get_memorized_attribute<double>(this,name);
double l_val = get_memorized_attribute<double>(name);
m_manager->set_speed(l_cpt, l_val);
}
catch (...)
{
//nothing to do
}
// speed value
try
{
std::string attr_name = kSPEED + oss.str();
std::string name = "__" + attr_name;
double l_val = yat4tango::PropertyHelper::get_memorized_attribute<double>(this, name);
m_manager->set_speed(l_cpt, l_val);
}
catch (...)
{
// nothing to do
}
// initial value
try
{
std::string attr_name = kINITIAL + oss.str();
std::string name = "__" + attr_name;
// To be activated with Tango 8
//double l_val = yat4tango::PropertyHelper::get_memorized_attribute<double>(this,name);
double l_val = get_memorized_attribute<double>(name);
m_manager->set_initial(l_cpt, l_val);
}
catch (...)
{
//nothing to do
}
}
try
{
std::string attr_name = kINITIAL + oss.str();
std::string name = "__" + attr_name;
// To be activated with Tango 8
//double l_val = yat4tango::PropertyHelper::get_memorized_attribute<double>(this,name);
double l_val = get_memorized_attribute<double>(name);
m_manager->set_initial(l_cpt, l_val);
}
catch (...)
{
//nothing to do
}
}
//- GO for task
try
@@ -615,6 +631,8 @@ void SingleShotAO::get_device_property()
}
}
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::always_executed_hook()
@@ -624,8 +642,10 @@ void SingleShotAO::get_device_property()
//-----------------------------------------------------------------------------
void SingleShotAO::always_executed_hook()
{
// nothing to do
}
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::read_attr_hardware
@@ -638,6 +658,8 @@ void SingleShotAO::read_attr_hardware(vector<long> &attr_list)
//DEBUG_STREAM << "SingleShotAO::read_attr_hardware(vector<long> &attr_list) entering... "<< endl;
// Add your own code here
}
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::read_frequency
@@ -651,6 +673,7 @@ void SingleShotAO::read_frequency(Tango::Attribute &attr)
attr.set_value(&m_frequency);
}
//+----------------------------------------------------------------------------
//
// method : SingleShotAO::write_frequency
@@ -673,6 +696,7 @@ void SingleShotAO::write_frequency(Tango::WAttribute &attr)
yat4tango::PropertyHelper::set_memorized_attribute(this, "frequency", m_frequency);
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::dev_state
@@ -694,6 +718,7 @@ Tango::DevState SingleShotAO::dev_state()
return m_state;
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::dev_status
@@ -721,6 +746,8 @@ Tango::ConstDevString SingleShotAO::dev_status()
s = oss.str();
return s.c_str();
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::read_channel
@@ -744,6 +771,8 @@ void SingleShotAO::read_channel(yat4tango::DynamicAttributeReadCallbackData & cb
double l_val = m_manager->get_channel(l_idx);
cbd.tga->set_value(&l_val);
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::write_channel
@@ -784,6 +813,8 @@ void SingleShotAO::write_channel(yat4tango::DynamicAttributeWriteCallbackData &
_CPTC("SingleShotAO::write_channel"));
}
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::read_speed
@@ -807,6 +838,8 @@ void SingleShotAO::read_speed(yat4tango::DynamicAttributeReadCallbackData & cbd)
double l_val = m_manager->get_speed(l_idx);
cbd.tga->set_value(&l_val);
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::write_speed
@@ -858,6 +891,7 @@ void SingleShotAO::write_speed(yat4tango::DynamicAttributeWriteCallbackData & cb
store_value_as_property(l_val, name);
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::read_initial
@@ -882,6 +916,7 @@ void SingleShotAO::read_initial(yat4tango::DynamicAttributeReadCallbackData & cb
cbd.tga->set_value(&l_val);
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::write_initial
@@ -929,6 +964,7 @@ void SingleShotAO::write_initial(yat4tango::DynamicAttributeWriteCallbackData &
store_value_as_property(l_val, name);
}
//+------------------------------------------------------------------
/**
* method: SingleShotAO::abort
Loading