testServer: added testAggregate - one sample only

This commit is contained in:
Matej Sekoranja
2014-02-07 14:43:02 +01:00
parent 1146b0f3f6
commit 4190348ee1

View File

@@ -322,6 +322,26 @@ static epics::pvData::PVStructure::shared_pointer createNTNameValue(int columnsC
return result;
}
static epics::pvData::PVStructure::shared_pointer createNTAggregate()
{
epics::pvData::StructureConstPtr s =
getFieldCreate()->createFieldBuilder()->
setId("uri:ev4:nt/2012/pwd:NTAggregate")->
add("value", pvDouble)->
add("N", pvLong)->
add("dispersion", pvDouble)->
add("first", pvDouble)->
add("firstTimeStamp", getStandardField()->timeStamp())->
add("last", pvDouble)->
add("lastTimeStamp", getStandardField()->timeStamp())->
add("max", pvDouble)->
add("min", pvDouble)->
createStructure();
return getPVDataCreate()->createPVStructure(s);
}
static void generateNTTableDoubleValues(epics::pvData::PVStructure::shared_pointer result)
{
PVStringArray::shared_pointer pvLabels = (static_pointer_cast<PVStringArray>(result->getScalarArrayField("labels", pvString)));
@@ -361,6 +381,20 @@ static void generateNTNameValueDoubleValues(epics::pvData::PVStructure::shared_p
arr->replace(freeze(temp));
}
static void generateNTAggregateValues(epics::pvData::PVStructure::shared_pointer result)
{
double value = rand()/((double)RAND_MAX+1);
result->getSubField<PVDouble>("value")->put(value);
result->getSubField<PVDouble>("min")->put(value);
result->getSubField<PVDouble>("max")->put(value);
result->getSubField<PVDouble>("first")->put(value);
result->getSubField<PVDouble>("last")->put(value);
result->getSubField<PVDouble>("dispersion")->put(0.0);
result->getSubField<PVLong>("N")->put(1);
}
class ChannelFindRequesterImpl : public ChannelFindRequester
{
virtual void channelFindResult(epics::pvData::Status const & status,
@@ -665,6 +699,10 @@ public:
{
generateNTNameValueDoubleValues(m_pvStructure);
}
else if (m_pvStructure->getStructure()->getID() == "uri:ev4:nt/2012/pwd:NTAggregate")
{
generateNTAggregateValues(m_pvStructure);
}
else if (m_valueField.get())
{
switch (m_valueField->getScalar()->getScalarType())
@@ -1908,6 +1946,11 @@ protected:
m_pvStructure = createNTNameValue(5); // 5 columns
generateNTNameValueDoubleValues(m_pvStructure);
}
else if (m_name.find("testAggregate") == 0)
{
m_pvStructure = createNTAggregate();
generateNTAggregateValues(m_pvStructure);
}
else if (m_name.find("testADC") == 0)
{
int i = 0;
@@ -2242,6 +2285,10 @@ public:
process = c->createChannelProcess(cpr, PVStructure::shared_pointer());
m_scan1Hz.toProcess.push_back(process);
c = MockChannel::create(chProviderPtr, cr, "testAggregate", "local");
process = c->createChannelProcess(cpr, PVStructure::shared_pointer());
m_scan1Hz.toProcess.push_back(process);
m_scan1HzThread.reset(new epics::pvData::Thread("process1hz", highPriority, &m_scan1Hz));
m_scan10HzThread.reset(new epics::pvData::Thread("process10hz", highPriority, &m_scan10Hz));