16 #define epicsExportSharedSymbols 24 namespace epics {
namespace pvData {
30 ->setId(
"valueAlarm_t")
32 ->add(
"lowAlarmLimit", vtype)
33 ->add(
"lowWarningLimit", vtype)
34 ->add(
"highWarningLimit", vtype)
35 ->add(
"highAlarmLimit", vtype)
36 ->add(
"lowAlarmSeverity",
pvInt)
37 ->add(
"lowWarningSeverity",
pvInt)
38 ->add(
"highWarningSeverity",
pvInt)
39 ->add(
"highAlarmSeverity",
pvInt)
40 ->add(
"hysteresis",
pvByte)
44 StandardField::StandardField()
46 ,notImplemented(
"not implemented")
47 ,valueFieldName(
"value")
51 ->add(
"severity",
pvInt)
52 ->add(
"status",
pvInt)
58 ->add(
"secondsPastEpoch",
pvLong)
59 ->add(
"nanoseconds",
pvInt)
60 ->add(
"userTag",
pvInt)
80 ->setId(
"valueAlarm_t")
82 ->add(
"falseSeverity",
pvInt)
83 ->add(
"trueSeverity",
pvInt)
84 ->add(
"changeStateSeverity",
pvInt)
87 ,byteAlarmField(buildValueAlarm(
pvByte))
88 ,shortAlarmField(buildValueAlarm(
pvShort))
89 ,intAlarmField(buildValueAlarm(
pvInt))
90 ,longAlarmField(buildValueAlarm(
pvLong))
91 ,ubyteAlarmField(buildValueAlarm(
pvUByte))
92 ,ushortAlarmField(buildValueAlarm(
pvUShort))
93 ,uintAlarmField(buildValueAlarm(
pvUInt))
94 ,ulongAlarmField(buildValueAlarm(
pvULong))
95 ,floatAlarmField(buildValueAlarm(
pvFloat))
96 ,doubleAlarmField(buildValueAlarm(
pvDouble))
99 ->setId(
"valueAlarm_t")
101 ->add(
"stateSeverity",
pvInt)
102 ->add(
"changeStateSeverity",
pvInt)
110 bool gotAlarm =
false;
111 bool gotTimeStamp =
false;
112 bool gotDisplay =
false;
113 bool gotControl =
false;
114 bool gotValueAlarm =
false;
116 if(properties.find(
"alarm")!=string::npos) { gotAlarm =
true; numProp++; }
117 if(properties.find(
"timeStamp")!=string::npos) { gotTimeStamp =
true; numProp++; }
118 if(properties.find(
"display")!=string::npos) { gotDisplay =
true; numProp++; }
119 if(properties.find(
"control")!=string::npos) { gotControl =
true; numProp++; }
120 if(properties.find(
"valueAlarm")!=string::npos) { gotValueAlarm =
true; numProp++; }
123 while(gotValueAlarm) {
126 static_pointer_cast<const Scalar>(field)->getScalarType() :
129 case pvBoolean: valueAlarm = booleanAlarmField;
break;
130 case pvByte: valueAlarm = byteAlarmField;
break;
131 case pvShort: valueAlarm = shortAlarmField;
break;
132 case pvInt: valueAlarm = intAlarmField;
break;
133 case pvLong: valueAlarm = longAlarmField;
break;
134 case pvUByte: valueAlarm = ubyteAlarmField;
break;
135 case pvUShort: valueAlarm = ushortAlarmField;
break;
136 case pvUInt: valueAlarm = uintAlarmField;
break;
137 case pvULong: valueAlarm = ulongAlarmField;
break;
138 case pvFloat: valueAlarm = floatAlarmField;
break;
139 case pvDouble: valueAlarm = doubleAlarmField;
break;
141 throw std::logic_error(
string(
"valueAlarm property not supported for pvString"));
148 if(names.size()==2) {
152 string nameFirst = names[0];
153 string nameSecond = names[1];
154 int compareFirst = nameFirst.compare(
"index");
155 int compareSecond = nameSecond.compare(
"choices");
156 if(compareFirst==0 && compareSecond==0) {
162 if(scalarFirst->getScalarType()==
pvInt 163 && scalarArraySecond->getElementType()==
pvString) {
164 valueAlarm = enumeratedAlarmField;
171 throw std::logic_error(
string(
"valueAlarm property for illegal type"));
173 size_t numFields = numProp+1;
178 fields[next++] = field;
180 names[next] =
"alarm";
181 fields[next++] = alarmField;
184 names[next] =
"timeStamp";
185 fields[next++] = timeStampField;
188 names[next] =
"display";
189 fields[next++] = displayField;
192 names[next] =
"control";
193 fields[next++] = controlField;
196 names[next] =
"valueAlarm";
197 fields[next++] = valueAlarm;
199 return fieldCreate->createStructure(
id,names,fields);
206 return createProperties(
"epics:nt/NTScalar:1.0",field,properties);
211 string const & properties)
213 return createProperties(
"epics:nt/NTUnion:1.0",field,properties);
217 string const & properties)
220 return createProperties(
"epics:nt/NTUnion:1.0",field,properties);
224 ScalarType elementType,
string const &properties)
227 return createProperties(
"epics:nt/NTScalarArray:1.0",field,properties);
236 return createProperties(
"epics:nt/NTStructureArray:1.0",field,properties);
244 return createProperties(
"epics:nt/NTUnionArray:1.0",field,properties);
253 names[1] =
"choices";
254 fields[0] = fieldCreate->createScalar(
pvInt);
255 fields[1] = fieldCreate->createScalarArray(
pvString);
256 return fieldCreate->createStructure(
"enum_t",names,fields);
263 return createProperties(
"epics:nt/NTEnum:1.0",field,properties);
270 void StandardField::once(
void*)
This class implements introspection object for Scalar.
StructureConstPtr variantUnion(std::string const &properties)
StructureConstPtr structureArray(StructureConstPtr const &structure, std::string const &properties)
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
pvd::StructureConstPtr type
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::shared_ptr< const StructureArray > StructureArrayConstPtr
StructureConstPtr enumerated()
std::tr1::shared_ptr< StandardField > StandardFieldPtr
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
#define EPICS_THREAD_ONCE_INIT
std::tr1::shared_ptr< const Union > UnionConstPtr
StructureConstPtr scalarArray(ScalarType elementType, std::string const &properties)
This class implements introspection object for a structure.
APIs for the epicsMutex mutual exclusion semaphore.
LIBCOM_API void epicsStdCall epicsThreadOnce(epicsThreadOnceId *id, EPICSTHREADFUNC, void *arg)
std::vector< FieldConstPtr > FieldConstPtrArray
static const StandardFieldPtr & getStandardField()
std::tr1::shared_ptr< const Field > FieldConstPtr
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
StructureConstPtr regUnion(UnionConstPtr const &punion, std::string const &properties)
std::tr1::shared_ptr< const ScalarArray > ScalarArrayConstPtr
This class implements introspection object for scalar array.
std::vector< std::string > StringArray
StructureConstPtr scalar(ScalarType type, std::string const &properties)
Standard Fields is a class or creating or sharing Field objects for standard fields.
C++ and C descriptions for a thread.
static FieldBuilderPtr begin()
StringArray const & getFieldNames() const
std::tr1::shared_ptr< const UnionArray > UnionArrayConstPtr
StructureConstPtr unionArray(UnionConstPtr const &punion, std::string const &properties)