testServer: testHistogram pv added

This commit is contained in:
Matej Sekoranja
2014-03-17 21:33:07 +01:00
parent 22a27433af
commit 21928c8649

View File

@@ -354,6 +354,18 @@ static epics::pvData::PVStructure::shared_pointer createNTAggregate()
return getPVDataCreate()->createPVStructure(s);
}
static epics::pvData::PVStructure::shared_pointer createNTHistogram()
{
epics::pvData::StructureConstPtr s =
getFieldCreate()->createFieldBuilder()->
setId("uri:ev4:nt/2012/pwd:NTHistogram")->
addArray("ranges", pvDouble)->
addArray("value", pvInt)->
add("timeStamp", getStandardField()->timeStamp())->
createStructure();
return getPVDataCreate()->createPVStructure(s);
}
static void generateNTTableDoubleValues(epics::pvData::PVStructure::shared_pointer result)
{
@@ -438,12 +450,38 @@ static void generateNTAggregateValues(epics::pvData::PVStructure::shared_pointer
result->getSubField<PVDouble>("last")->put(values[N-1]);
result->getSubField<PVDouble>("dispersion")->put(stddev);
result->getSubField<PVLong>("N")->put(N);
#undef ROWS
#undef N
setTimeStamp(result->getStructureField("lastTimeStamp"));
}
static void generateNTHistogramValues(epics::pvData::PVStructure::shared_pointer result)
{
#define N 100
{
PVDoubleArray::shared_pointer arr = result->getSubField<PVDoubleArray>("ranges");
PVDoubleArray::svector temp(arr->reuse());
temp.resize(N+1);
for (size_t i = 0; i < (N+1); i++)
temp[i] = i*10;
arr->replace(freeze(temp));
}
{
PVIntArray::shared_pointer arr = result->getSubField<PVIntArray>("value");
PVIntArray::svector temp(arr->reuse());
temp.resize(N);
for (size_t i = 0; i < N; i++)
temp[i] = (int32)((rand()/((double)RAND_MAX+1))*1000);
arr->replace(freeze(temp));
}
#undef N
setTimeStamp(result->getStructureField("timeStamp"));
}
class ChannelFindRequesterImpl : public ChannelFindRequester
{
virtual void channelFindResult(epics::pvData::Status const & status,
@@ -752,6 +790,10 @@ public:
{
generateNTAggregateValues(m_pvStructure);
}
else if (m_pvStructure->getStructure()->getID() == "uri:ev4:nt/2012/pwd:NTHistogram")
{
generateNTHistogramValues(m_pvStructure);
}
else if (m_valueField.get())
{
switch (m_valueField->getScalar()->getScalarType())
@@ -2000,6 +2042,11 @@ protected:
m_pvStructure = createNTAggregate();
generateNTAggregateValues(m_pvStructure);
}
else if (m_name.find("testHistogram") == 0)
{
m_pvStructure = createNTHistogram();
generateNTHistogramValues(m_pvStructure);
}
else if (m_name.find("testADC") == 0)
{
int i = 0;
@@ -2338,6 +2385,10 @@ public:
process = c->createChannelProcess(cpr, PVStructure::shared_pointer());
m_scan1Hz.toProcess.push_back(process);
c = MockChannel::create(chProviderPtr, cr, "testHistogram", "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));