-
Giacomo Strangolino authoredbf7d7f4f
catdbcacheu.cpp 3.85 KiB
#include "catdbcacheu.h"
#include <cudata.h>
CaTDBCacheU::CaTDBCacheU()
{
}
Tango::DeviceProxy *CaTDBCacheU::m_get_dev(const std::string &nam) {
error.clear();
Tango::DeviceProxy *dev = nullptr;
try {
dev = new Tango::DeviceProxy(nam.c_str());
}
catch(const Tango::DevFailed& e) {
dev = nullptr;
error = std::string("device ") + nam + " connection error: " + tg_strerror(e);
}
return dev;
}
int CaTDBCacheU::m_att_conf_change_subscribe(Tango::DeviceProxy *dev, const std::string&devna, const string &attna, Tango::CallBack* cb) {
int evid = -1;
error.clear();
try {
evid = dev->subscribe_event(attna, Tango::ATTR_CONF_EVENT, cb, true);
}
catch(const Tango::DevFailed& e) {
error = "device " + devna + " subscribe error: " + tg_strerror(e);
}
return evid;
}
std::string CaTDBCacheU::m_dev_get_name(Tango::DeviceProxy *dev) {
std::string n;
error.clear();
try {
n = dev->name();
}
catch(const Tango::DevFailed& e) {
error = "dev->name failed: " + tg_strerror(e);
}
return n;
}
std::string CaTDBCacheU::m_mkattsrc(const string &dev, const string &att) const {
return dev + "/" + att;
}
void CaTDBCacheU::m_fill_from_attconf(const Tango::AttributeInfoEx *ai, CuData &dat)
{
dat["type"] = "property";
dat["df"] = ai->data_format;
dat["dfs"] = format_to_str(ai->data_format); /* as string */
dat["dt"] = ai->data_type;
dat["description"] = ai->description;
ai->display_unit != std::string("No display unit") ? dat["display_unit"] = ai->display_unit : dat["display_unit"] = "";
dat["format"] = ai->format;
dat["label"] = ai->label;
dat["max_alarm"] = ai->max_alarm;
dat["max_dim_x"] = ai->max_dim_x;
dat["max_dim_y"] = ai->max_dim_y;
dat["max"] = ai->max_value;
dat["min"] = ai->min_value;
dat["min_alarm"] = ai->min_alarm;
dat["name"] = ai->name;
dat["standard_unit"] = ai->standard_unit;
dat["unit"] = ai->unit;
dat["writable"] = ai->writable;
dat["writable_attr_name"] = ai->writable_attr_name;
dat["disp_level"] = ai->disp_level;
dat["root_attr_name"] = ai->root_attr_name; // Root attribute name (in case of forwarded attribute)
Tango::AttributeAlarmInfo aai = ai->alarms;
dat["delta_t"] = aai.delta_t;
dat["delta_val"] = aai.delta_val;
dat["max_alarm"] = aai.max_alarm;
dat["min_alarm"] = aai.min_alarm;
dat["max_warning"] = aai.max_warning;
dat["min_warning"] = aai.min_warning;
Tango::AttributeEventInfo ei = ai->events;
dat["archive_abs_change"] = ei.arch_event.archive_abs_change;
dat["archive_period"] = ei.arch_event.archive_period;
dat["archive_rel_change"] = ei.arch_event.archive_rel_change;
dat["abs_change"] = ei.ch_event.abs_change;
dat["rel_change"] = ei.ch_event.rel_change;
dat["periodic_period"] = ei.per_event.period;
// dim_x property contains the actual number of x elements
long int dimx = dat["value"].getSize(); // if !contains value, empty variant, 0 dimx
if(dimx > 0)
dat["dim_x"] = dimx;
}
string CaTDBCacheU::format_to_str(Tango::AttrDataFormat f) const {
switch(f) {
case Tango::SCALAR:
return "scalar";
case Tango::SPECTRUM:
return "vector";
case Tango::IMAGE:
return "matrix";
default:
return "data format unknown";
}
}
std::string CaTDBCacheU::tg_strerror(const Tango::DevErrorList &errors)
{
std::string msg;
for(int i = errors.length() - 1; i >= 0; i--)
{
msg += errors[i].origin;
msg += "\n";
msg += errors[i].desc;
msg += "\n";
msg += errors[i].reason;
msg += "\n\n";
}
return msg;
}
std::string CaTDBCacheU::tg_strerror(const Tango::DevFailed &e) const
{
std::string msg;
if(e.errors.length() > 0)
msg = tg_strerror(e.errors);
return msg;
}