diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index f38b631..843925a 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -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(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("value")->put(value); + result->getSubField("min")->put(value); + result->getSubField("max")->put(value); + result->getSubField("first")->put(value); + result->getSubField("last")->put(value); + result->getSubField("dispersion")->put(0.0); + result->getSubField("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));