Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12d851dc6f | ||
|
|
643f289c23 | ||
|
|
68e74ed1d2 | ||
|
|
f0ef0965c4 | ||
|
|
61ce532fdf | ||
|
|
d746e1bfb3 | ||
|
|
deccc41b9a | ||
|
|
2814c779bd | ||
|
|
4c73607799 |
@@ -2,8 +2,15 @@
|
|||||||
|
|
||||||
@page release_notes Release Notes
|
@page release_notes Release Notes
|
||||||
|
|
||||||
|
Release 7.1.1 (Mar 2019)
|
||||||
|
========================
|
||||||
|
|
||||||
|
- Fixes
|
||||||
|
- Init order issue with StandardField::getStandardField()
|
||||||
|
- Build fix for Visual Studio 2013+
|
||||||
|
|
||||||
Release 7.1.0 (Nov 2018)
|
Release 7.1.0 (Nov 2018)
|
||||||
==========================
|
========================
|
||||||
|
|
||||||
- Deprecations
|
- Deprecations
|
||||||
- BoundedString, BoundedScalarArray, and FixedScalarArray will be removed unless they are fixed.
|
- BoundedString, BoundedScalarArray, and FixedScalarArray will be removed unless they are fixed.
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ using std::string;
|
|||||||
|
|
||||||
namespace epics { namespace pvData {
|
namespace epics { namespace pvData {
|
||||||
|
|
||||||
static DebugLevel debugLevel = lowDebug;
|
|
||||||
|
|
||||||
size_t Field::num_instances;
|
size_t Field::num_instances;
|
||||||
|
|
||||||
|
|
||||||
@@ -405,9 +403,7 @@ StructureArray::StructureArray(StructureConstPtr const & structure)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
StructureArray::~StructureArray() {
|
StructureArray::~StructureArray() {}
|
||||||
if(debugLevel==highDebug) printf("~StructureArray\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
string StructureArray::getID() const
|
string StructureArray::getID() const
|
||||||
{
|
{
|
||||||
@@ -444,9 +440,7 @@ UnionArray::UnionArray(UnionConstPtr const & _punion)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
UnionArray::~UnionArray() {
|
UnionArray::~UnionArray() {}
|
||||||
if(debugLevel==highDebug) printf("~UnionArray\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
string UnionArray::getID() const
|
string UnionArray::getID() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <epicsMutex.h>
|
#include <epicsMutex.h>
|
||||||
|
#include <epicsThread.h>
|
||||||
|
|
||||||
#define epicsExportSharedSymbols
|
#define epicsExportSharedSymbols
|
||||||
#include <pv/lock.h>
|
#include <pv/lock.h>
|
||||||
@@ -22,32 +23,85 @@ using std::string;
|
|||||||
|
|
||||||
namespace epics { namespace pvData {
|
namespace epics { namespace pvData {
|
||||||
|
|
||||||
|
static
|
||||||
|
StructureConstPtr buildValueAlarm(ScalarType vtype)
|
||||||
|
{
|
||||||
|
return FieldBuilder::begin()
|
||||||
|
->setId("valueAlarm_t")
|
||||||
|
->add("active", pvBoolean)
|
||||||
|
->add("lowAlarmLimit", vtype)
|
||||||
|
->add("lowWarningLimit", vtype)
|
||||||
|
->add("highWarningLimit", vtype)
|
||||||
|
->add("highAlarmLimit", vtype)
|
||||||
|
->add("lowAlarmSeverity", pvInt)
|
||||||
|
->add("lowWarningSeverity", pvInt)
|
||||||
|
->add("highWarningSeverity", pvInt)
|
||||||
|
->add("highAlarmSeverity", pvInt)
|
||||||
|
->add("hysteresis", pvByte)
|
||||||
|
->createStructure();
|
||||||
|
}
|
||||||
|
|
||||||
StandardField::StandardField()
|
StandardField::StandardField()
|
||||||
: fieldCreate(getFieldCreate()),
|
:fieldCreate(getFieldCreate())
|
||||||
notImplemented("not implemented"),
|
,notImplemented("not implemented")
|
||||||
valueFieldName("value")
|
,valueFieldName("value")
|
||||||
{}
|
|
||||||
|
|
||||||
void StandardField::init()
|
,alarmField(FieldBuilder::begin()
|
||||||
{
|
->setId("alarm_t")
|
||||||
createAlarm();
|
->add("severity", pvInt)
|
||||||
createTimeStamp();
|
->add("status", pvInt)
|
||||||
createDisplay();
|
->add("message", pvString)
|
||||||
createControl();
|
->createStructure())
|
||||||
createBooleanAlarm();
|
|
||||||
createByteAlarm();
|
,timeStampField(FieldBuilder::begin()
|
||||||
createShortAlarm();
|
->setId("time_t")
|
||||||
createIntAlarm();
|
->add("secondsPastEpoch", pvLong)
|
||||||
createLongAlarm();
|
->add("nanoseconds", pvInt)
|
||||||
createUByteAlarm();
|
->add("userTag", pvInt)
|
||||||
createUShortAlarm();
|
->createStructure())
|
||||||
createUIntAlarm();
|
|
||||||
createULongAlarm();
|
,displayField(FieldBuilder::begin()
|
||||||
createFloatAlarm();
|
->setId("display_t")
|
||||||
createDoubleAlarm();
|
->add("limitLow", pvDouble)
|
||||||
createEnumeratedAlarm();
|
->add("limitHigh", pvDouble)
|
||||||
}
|
->add("description", pvString)
|
||||||
|
->add("format", pvString)
|
||||||
|
->add("units", pvString)
|
||||||
|
->createStructure())
|
||||||
|
|
||||||
|
,controlField(FieldBuilder::begin()
|
||||||
|
->setId("control_t")
|
||||||
|
->add("limitLow", pvDouble)
|
||||||
|
->add("limitHigh", pvDouble)
|
||||||
|
->add("minStep", pvDouble)
|
||||||
|
->createStructure())
|
||||||
|
|
||||||
|
,booleanAlarmField(FieldBuilder::begin()
|
||||||
|
->setId("valueAlarm_t")
|
||||||
|
->add("active", pvBoolean)
|
||||||
|
->add("falseSeverity", pvInt)
|
||||||
|
->add("trueSeverity", pvInt)
|
||||||
|
->add("changeStateSeverity", pvInt)
|
||||||
|
->createStructure())
|
||||||
|
|
||||||
|
,byteAlarmField(buildValueAlarm(pvByte))
|
||||||
|
,shortAlarmField(buildValueAlarm(pvShort))
|
||||||
|
,intAlarmField(buildValueAlarm(pvInt))
|
||||||
|
,longAlarmField(buildValueAlarm(pvLong))
|
||||||
|
,ubyteAlarmField(buildValueAlarm(pvUByte))
|
||||||
|
,ushortAlarmField(buildValueAlarm(pvUShort))
|
||||||
|
,uintAlarmField(buildValueAlarm(pvUInt))
|
||||||
|
,ulongAlarmField(buildValueAlarm(pvULong))
|
||||||
|
,floatAlarmField(buildValueAlarm(pvFloat))
|
||||||
|
,doubleAlarmField(buildValueAlarm(pvDouble))
|
||||||
|
|
||||||
|
,enumeratedAlarmField(FieldBuilder::begin()
|
||||||
|
->setId("valueAlarm_t")
|
||||||
|
->add("active", pvBoolean)
|
||||||
|
->add("stateSeverity", pvInt)
|
||||||
|
->add("changeStateSeverity", pvInt)
|
||||||
|
->createStructure())
|
||||||
|
{}
|
||||||
|
|
||||||
StandardField::~StandardField(){}
|
StandardField::~StandardField(){}
|
||||||
|
|
||||||
@@ -145,361 +199,6 @@ StructureConstPtr StandardField::createProperties(string id,FieldConstPtr field,
|
|||||||
return fieldCreate->createStructure(id,names,fields);
|
return fieldCreate->createStructure(id,names,fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StandardField::createAlarm() {
|
|
||||||
size_t num = 3;
|
|
||||||
FieldConstPtrArray fields(num);
|
|
||||||
StringArray names(num);
|
|
||||||
names[0] = "severity";
|
|
||||||
names[1] = "status";
|
|
||||||
names[2] = "message";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvString);
|
|
||||||
alarmField = fieldCreate->createStructure("alarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createTimeStamp() {
|
|
||||||
size_t num = 3;
|
|
||||||
FieldConstPtrArray fields(num);
|
|
||||||
StringArray names(num);
|
|
||||||
names[0] = "secondsPastEpoch";
|
|
||||||
names[1] = "nanoseconds";
|
|
||||||
names[2] = "userTag";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvLong);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvInt);
|
|
||||||
timeStampField = fieldCreate->createStructure("time_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createDisplay() {
|
|
||||||
size_t num = 5;
|
|
||||||
FieldConstPtrArray fields(num);
|
|
||||||
StringArray names(num);
|
|
||||||
names[0] = "limitLow";
|
|
||||||
names[1] = "limitHigh";
|
|
||||||
names[2] = "description";
|
|
||||||
names[3] = "format";
|
|
||||||
names[4] = "units";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvString);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvString);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvString);
|
|
||||||
displayField = fieldCreate->createStructure("display_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createControl() {
|
|
||||||
size_t num = 3;
|
|
||||||
FieldConstPtrArray fields(num);
|
|
||||||
StringArray names(num);
|
|
||||||
names[0] = "limitLow";
|
|
||||||
names[1] = "limitHigh";
|
|
||||||
names[2] = "minStep";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvDouble);
|
|
||||||
controlField = fieldCreate->createStructure("control_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createBooleanAlarm() {
|
|
||||||
size_t numFields = 4;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "falseSeverity";
|
|
||||||
names[2] = "trueSeverity";
|
|
||||||
names[3] = "changeStateSeverity";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvInt);
|
|
||||||
booleanAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createByteAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvByte);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvByte);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvByte);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvByte);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvByte);
|
|
||||||
byteAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createShortAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvShort);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvShort);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvShort);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvShort);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvShort);
|
|
||||||
shortAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createIntAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvInt);
|
|
||||||
intAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createLongAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvLong);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvLong);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvLong);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvLong);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvLong);
|
|
||||||
longAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createUByteAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvUByte);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvUByte);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvUByte);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvUByte);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvUByte);
|
|
||||||
ubyteAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createUShortAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvUShort);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvUShort);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvUShort);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvUShort);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvUShort);
|
|
||||||
ushortAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createUIntAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvUInt);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvUInt);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvUInt);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvUInt);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvUInt);
|
|
||||||
uintAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createULongAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvULong);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvULong);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvULong);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvULong);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvULong);
|
|
||||||
ulongAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createFloatAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvFloat);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvFloat);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvFloat);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvFloat);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvFloat);
|
|
||||||
floatAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createDoubleAlarm() {
|
|
||||||
size_t numFields = 10;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "lowAlarmLimit";
|
|
||||||
names[2] = "lowWarningLimit";
|
|
||||||
names[3] = "highWarningLimit";
|
|
||||||
names[4] = "highAlarmLimit";
|
|
||||||
names[5] = "lowAlarmSeverity";
|
|
||||||
names[6] = "lowWarningSeverity";
|
|
||||||
names[7] = "highWarningSeverity";
|
|
||||||
names[8] = "highAlarmSeverity";
|
|
||||||
names[9] = "hysteresis";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[3] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[4] = fieldCreate->createScalar(pvDouble);
|
|
||||||
fields[5] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[6] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[7] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[8] = fieldCreate->createScalar(pvInt);
|
|
||||||
fields[9] = fieldCreate->createScalar(pvDouble);
|
|
||||||
doubleAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardField::createEnumeratedAlarm() {
|
|
||||||
size_t numFields = 3;
|
|
||||||
FieldConstPtrArray fields(numFields);
|
|
||||||
StringArray names(numFields);
|
|
||||||
names[0] = "active";
|
|
||||||
names[1] = "stateSeverity";
|
|
||||||
names[2] = "changeStateSeverity";
|
|
||||||
fields[0] = fieldCreate->createScalar(pvBoolean);
|
|
||||||
fields[1] = fieldCreate->createScalarArray(pvInt);
|
|
||||||
fields[2] = fieldCreate->createScalar(pvInt);
|
|
||||||
enumeratedAlarmField = fieldCreate->createStructure("valueAlarm_t",names,fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::scalar(
|
StructureConstPtr StandardField::scalar(
|
||||||
ScalarType type,string const &properties)
|
ScalarType type,string const &properties)
|
||||||
{
|
{
|
||||||
@@ -564,98 +263,21 @@ StructureConstPtr StandardField::enumerated(string const &properties)
|
|||||||
return createProperties("epics:nt/NTEnum:1.0",field,properties);
|
return createProperties("epics:nt/NTEnum:1.0",field,properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
StructureConstPtr StandardField::alarm()
|
static StandardFieldPtr *stdFieldGbl;
|
||||||
{
|
|
||||||
return alarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::timeStamp()
|
static epicsThreadOnceId stdFieldGblOnce = EPICS_THREAD_ONCE_INIT;
|
||||||
{
|
|
||||||
return timeStampField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::display()
|
void StandardField::once(void*)
|
||||||
{
|
{
|
||||||
return displayField;
|
stdFieldGbl = new StandardFieldPtr;
|
||||||
}
|
stdFieldGbl->reset(new StandardField);
|
||||||
|
|
||||||
StructureConstPtr StandardField::control()
|
|
||||||
{
|
|
||||||
return controlField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::booleanAlarm()
|
|
||||||
{
|
|
||||||
return booleanAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::byteAlarm()
|
|
||||||
{
|
|
||||||
return byteAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::ubyteAlarm()
|
|
||||||
{
|
|
||||||
return ubyteAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::shortAlarm()
|
|
||||||
{
|
|
||||||
return shortAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::ushortAlarm()
|
|
||||||
{
|
|
||||||
return ushortAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::intAlarm()
|
|
||||||
{
|
|
||||||
return intAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::uintAlarm()
|
|
||||||
{
|
|
||||||
return uintAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::longAlarm()
|
|
||||||
{
|
|
||||||
return longAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::ulongAlarm()
|
|
||||||
{
|
|
||||||
return ulongAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::floatAlarm()
|
|
||||||
{
|
|
||||||
return floatAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::doubleAlarm()
|
|
||||||
{
|
|
||||||
return doubleAlarmField;
|
|
||||||
}
|
|
||||||
|
|
||||||
StructureConstPtr StandardField::enumeratedAlarm()
|
|
||||||
{
|
|
||||||
return enumeratedAlarmField;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const StandardFieldPtr &StandardField::getStandardField()
|
const StandardFieldPtr &StandardField::getStandardField()
|
||||||
{
|
{
|
||||||
static StandardFieldPtr standardFieldCreate;
|
epicsThreadOnce(&stdFieldGblOnce, &StandardField::once, 0);
|
||||||
static Mutex mutex;
|
|
||||||
Lock xx(mutex);
|
|
||||||
|
|
||||||
if(standardFieldCreate.get()==0)
|
return *stdFieldGbl;
|
||||||
{
|
|
||||||
standardFieldCreate = StandardFieldPtr(new StandardField());
|
|
||||||
standardFieldCreate->init();
|
|
||||||
}
|
|
||||||
return standardFieldCreate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ epicsParseFloat(const char *str, float *to, char **units)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Sometimes we have to provide our own copy of strtoll()
|
// Sometimes we have to provide our own copy of strtoll()
|
||||||
#if defined(_WIN32) && !defined(_MINGW)
|
#if defined(_MSC_VER) && _MSC_VER < 1800
|
||||||
// On Windows with MSVC, Base-3.15 provides strtoll()
|
// On Windows with MSVC, Base-3.15 provides strtoll()
|
||||||
# define NEED_OLL_FUNCS (EPICS_VERSION_INT < VERSION_INT(3,15,0,1))
|
# define NEED_OLL_FUNCS (EPICS_VERSION_INT < VERSION_INT(3,15,0,1))
|
||||||
#elif defined(vxWorks)
|
#elif defined(vxWorks)
|
||||||
|
|||||||
@@ -180,10 +180,11 @@ public:
|
|||||||
|
|
||||||
/** Return typed reference to wrapped value. Non-const reference allows value modification
|
/** Return typed reference to wrapped value. Non-const reference allows value modification
|
||||||
*
|
*
|
||||||
|
* @throws bad_cast when the requested type does not match the stored type
|
||||||
@code
|
@code
|
||||||
AnyScalar v(42);
|
AnyScalar v(42);
|
||||||
v.ref<uint32>() = 42;
|
v.ref<uint32>() = 43;
|
||||||
assert(v.ref<uint32>() = 43);
|
assert(v.ref<uint32>() == 43);
|
||||||
@endcode
|
@endcode
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -201,9 +202,10 @@ public:
|
|||||||
|
|
||||||
/** Return typed reference to wrapped value. Const reference does not allow modification.
|
/** Return typed reference to wrapped value. Const reference does not allow modification.
|
||||||
*
|
*
|
||||||
|
* @throws bad_cast when the requested type does not match the stored type
|
||||||
@code
|
@code
|
||||||
AnyScalar v(42);
|
const AnyScalar v(42);
|
||||||
assert(v.ref<uint32>() = 42);
|
assert(v.ref<uint32>() == 42);
|
||||||
@endcode
|
@endcode
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -219,7 +221,10 @@ public:
|
|||||||
return reinterpret_cast<typename meta::decorate_const<TT>::type&>(_wrap.blob);
|
return reinterpret_cast<typename meta::decorate_const<TT>::type&>(_wrap.blob);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** copy out wrapped value, with a value conversion. */
|
/** copy out wrapped value, with a value conversion.
|
||||||
|
*
|
||||||
|
* @throws bad_cast when empty()==true
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline
|
inline
|
||||||
T as() const {
|
T as() const {
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ typedef std::tr1::shared_ptr<StandardField> StandardFieldPtr;
|
|||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
class epicsShareClass StandardField {
|
class epicsShareClass StandardField {
|
||||||
|
static void once(void*);
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* getStandardField returns the singleton.
|
* getStandardField returns the singleton.
|
||||||
@@ -131,123 +132,105 @@ public:
|
|||||||
* create an alarm structure
|
* create an alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr alarm();
|
inline const StructureConstPtr& alarm() const { return alarmField; }
|
||||||
/**
|
/**
|
||||||
* create a timeStamp structure
|
* create a timeStamp structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr timeStamp();
|
inline const StructureConstPtr& timeStamp() const { return timeStampField; }
|
||||||
/**
|
/**
|
||||||
* create a display structure
|
* create a display structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr display();
|
inline const StructureConstPtr& display() const { return displayField; }
|
||||||
/**
|
/**
|
||||||
* create a control structure
|
* create a control structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr control();
|
inline const StructureConstPtr& control() const { return controlField; }
|
||||||
/**
|
/**
|
||||||
* create a boolean alarm structure
|
* create a boolean alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr booleanAlarm();
|
inline const StructureConstPtr& booleanAlarm() const { return booleanAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a byte alarm structure
|
* create a byte alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr byteAlarm();
|
inline const StructureConstPtr& byteAlarm() const { return byteAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a unsigned byte alarm structure
|
* create a unsigned byte alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr ubyteAlarm();
|
inline const StructureConstPtr& ubyteAlarm() const { return ubyteAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a short alarm structure
|
* create a short alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr shortAlarm();
|
inline const StructureConstPtr& shortAlarm() const { return shortAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a unsigned short alarm structure
|
* create a unsigned short alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr ushortAlarm();
|
inline const StructureConstPtr& ushortAlarm() const { return ushortAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create an int alarm structure
|
* create an int alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr intAlarm();
|
inline const StructureConstPtr& intAlarm() const { return intAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a unsigned int alarm structure
|
* create a unsigned int alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr uintAlarm();
|
inline const StructureConstPtr& uintAlarm() const { return uintAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a long alarm structure
|
* create a long alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr longAlarm();
|
inline const StructureConstPtr& longAlarm() const { return longAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a unsigned long alarm structure
|
* create a unsigned long alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr ulongAlarm();
|
inline const StructureConstPtr& ulongAlarm() const { return ulongAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a float alarm structure
|
* create a float alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr floatAlarm();
|
inline const StructureConstPtr& floatAlarm() const { return floatAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create a double alarm structure
|
* create a double alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr doubleAlarm();
|
inline const StructureConstPtr& doubleAlarm() const { return doubleAlarmField; }
|
||||||
/**
|
/**
|
||||||
* create an enumerated alarm structure
|
* create an enumerated alarm structure
|
||||||
* @return The const shared pointer to the structure.
|
* @return The const shared pointer to the structure.
|
||||||
*/
|
*/
|
||||||
StructureConstPtr enumeratedAlarm();
|
inline const StructureConstPtr& enumeratedAlarm() const { return enumeratedAlarmField; }
|
||||||
private:
|
private:
|
||||||
StandardField();
|
StandardField();
|
||||||
void init();
|
|
||||||
StructureConstPtr createProperties(
|
StructureConstPtr createProperties(
|
||||||
std::string id,FieldConstPtr field,std::string properties);
|
std::string id,FieldConstPtr field,std::string properties);
|
||||||
FieldCreatePtr fieldCreate;
|
const FieldCreatePtr fieldCreate;
|
||||||
std::string notImplemented;
|
const std::string notImplemented;
|
||||||
std::string valueFieldName;
|
const std::string valueFieldName;
|
||||||
StructureConstPtr alarmField;
|
const StructureConstPtr alarmField;
|
||||||
StructureConstPtr timeStampField;
|
const StructureConstPtr timeStampField;
|
||||||
StructureConstPtr displayField;
|
const StructureConstPtr displayField;
|
||||||
StructureConstPtr controlField;
|
const StructureConstPtr controlField;
|
||||||
StructureConstPtr booleanAlarmField;
|
const StructureConstPtr booleanAlarmField;
|
||||||
StructureConstPtr byteAlarmField;
|
const StructureConstPtr byteAlarmField;
|
||||||
StructureConstPtr shortAlarmField;
|
const StructureConstPtr shortAlarmField;
|
||||||
StructureConstPtr intAlarmField;
|
const StructureConstPtr intAlarmField;
|
||||||
StructureConstPtr longAlarmField;
|
const StructureConstPtr longAlarmField;
|
||||||
StructureConstPtr ubyteAlarmField;
|
const StructureConstPtr ubyteAlarmField;
|
||||||
StructureConstPtr ushortAlarmField;
|
const StructureConstPtr ushortAlarmField;
|
||||||
StructureConstPtr uintAlarmField;
|
const StructureConstPtr uintAlarmField;
|
||||||
StructureConstPtr ulongAlarmField;
|
const StructureConstPtr ulongAlarmField;
|
||||||
StructureConstPtr floatAlarmField;
|
const StructureConstPtr floatAlarmField;
|
||||||
StructureConstPtr doubleAlarmField;
|
const StructureConstPtr doubleAlarmField;
|
||||||
StructureConstPtr enumeratedAlarmField;
|
const StructureConstPtr enumeratedAlarmField;
|
||||||
void createAlarm();
|
|
||||||
void createTimeStamp();
|
|
||||||
void createDisplay();
|
|
||||||
void createControl();
|
|
||||||
void createBooleanAlarm();
|
|
||||||
void createByteAlarm();
|
|
||||||
void createShortAlarm();
|
|
||||||
void createIntAlarm();
|
|
||||||
void createLongAlarm();
|
|
||||||
void createUByteAlarm();
|
|
||||||
void createUShortAlarm();
|
|
||||||
void createUIntAlarm();
|
|
||||||
void createULongAlarm();
|
|
||||||
void createFloatAlarm();
|
|
||||||
void createDoubleAlarm();
|
|
||||||
void createEnumeratedAlarm();
|
|
||||||
//friend StandardFieldPtr getStandardField();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
FORCE_INLINE const StandardFieldPtr& getStandardField() {
|
FORCE_INLINE const StandardFieldPtr& getStandardField() {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <epicsUnitTest.h>
|
#include <epicsUnitTest.h>
|
||||||
#include <testMain.h>
|
#include <testMain.h>
|
||||||
|
|
||||||
|
#include <pv/pvUnitTest.h>
|
||||||
#include <pv/pvIntrospect.h>
|
#include <pv/pvIntrospect.h>
|
||||||
#include <pv/pvData.h>
|
#include <pv/pvData.h>
|
||||||
#include <pv/convert.h>
|
#include <pv/convert.h>
|
||||||
@@ -29,9 +30,7 @@ static StandardFieldPtr standardField = getStandardField();
|
|||||||
|
|
||||||
static void print(const string& name, FieldConstPtr const & f)
|
static void print(const string& name, FieldConstPtr const & f)
|
||||||
{
|
{
|
||||||
std::ostringstream strm;
|
testShow()<<name<<'\n'<<format::indent_level(1)<<f;
|
||||||
strm << std::endl << name << std::endl << f << std::endl;
|
|
||||||
testDiag("%s", strm.str().c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MAIN(testStandardField)
|
MAIN(testStandardField)
|
||||||
|
|||||||
Reference in New Issue
Block a user