14 #include <epicsString.h>
15 #include "asynPortDriver.h"
39 return asynParamInt32;
41 return asynParamInt32Array;
43 return asynParamInt32;
45 return asynParamInt8Array;
47 return asynParamFloat64;
49 return asynParamFloat32Array;
51 return asynParamInt32;
55 static void addTechParam(asynPortDriver* driver,
techniqueMap_t& the_map,
const std::string& technique,
int addr,
const std::string& label,
56 ParamType type,
const std::string& param,
const std::string& desc,
int nelem = 1)
59 std::string asyn_param = technique +
"_" + param;
60 if (driver->createParam(addr, asyn_param.c_str(),
ECLabToASYNType(type), &par_id) != asynSuccess || par_id == -1)
62 std::cerr <<
"Error Adding asyn parameter " << asyn_param <<
" addr " << addr << std::endl;
65 std::vector<technique_t>& ta = the_map[par_id];
66 if ( ta.size() < (addr + 1) )
75 std::cerr <<
"Adding asyn parameter \"" << asyn_param <<
"\" addr " << addr <<
" for technique \"" << technique <<
"\" label \"" << label <<
"\"" << std::endl;
80 driver->setIntegerParam(addr,
id, value);
81 std::vector<technique_t>& ta =
g_map[id];
84 if (t.
value.size() == 0)
90 BL_DefineBoolParameter(t.
label.c_str(), (value != 0 ?
true :
false), 0, &(t.
value[0]));
94 BL_DefineIntParameter(t.
label.c_str(), value, 0, &(t.
value[0]));
100 driver->setDoubleParam(addr,
id, value);
101 std::vector<technique_t>& ta =
g_map[id];
104 if (t.
value.size() == 0)
108 BL_DefineSglParameter(t.
label.c_str(),
static_cast<float>(value), 0, &(t.
value[0]));
111 void getTechniqueParams(
const std::string& technique,
int addr, std::vector<TEccParam_t>& values,
bool changes_only)
113 for(techniqueMap_t::iterator it =
g_map.begin(); it !=
g_map.end(); ++it)
115 std::vector<technique_t>& ta = it->second;
116 if ( addr >= ta.size() )
121 if (changes_only && !t.
update)
125 if ( epicsStrCaseCmp(t.
technique.c_str(), technique.c_str()) == 0 )
127 values.insert(values.end(), t.
value.begin(), t.
value.end());
135 for(techniqueMap_t::iterator it =
g_map.begin(); it !=
g_map.end(); ++it)
137 std::vector<technique_t>& ta = it->second;
138 for(
int j=0; j<ta.size(); ++j)
141 os <<
"Technique " << t.
technique <<
" addr " << j <<
" label " << t.
label << std::endl;
142 for(
int i=0; i<t.
value.size(); ++i)
144 os << t.
value[i].ParamStr << std::endl;
152 #include "BooleanParams.cpp"
153 #include "IntegerParams.cpp"
154 #include "SingleParams.cpp"
155 #include "BooleanArrayParams.cpp"
156 #include "IntegerArrayParams.cpp"
157 #include "SingleArrayParams.cpp"
std::vector< TEccParam_t > value
void getTechniqueParams(const std::string &technique, int addr, std::vector< TEccParam_t > &values, bool changes_only)
void setECIntegerParam(asynPortDriver *driver, int addr, int id, epicsInt32 value)
void addAllParameters(asynPortDriver *driver)
static techniqueMap_t g_map
void printParams(std::ostream &os)
addTechParam(driver, g_map,"$(TECH)",$(INDEX),"$(LABEL)",$(TYPE),"$(PARAM)","$(DESC)",$(NELM))
std::map< int, std::vector< technique_t > > techniqueMap_t
static asynParamType ECLabToASYNType(ParamType type)
void setECSingleParam(asynPortDriver *driver, int addr, int id, epicsFloat64 value)