diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index 37e4e45..f38b631 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -290,6 +290,38 @@ static epics::pvData::PVStructure::shared_pointer createNTTable(int columnsCount return result; } +static epics::pvData::PVStructure::shared_pointer createNTNameValue(int columnsCount) +{ + StringArray fieldNames(columnsCount); + FieldConstPtrArray fields(columnsCount); + char sbuf[16]; + PVStringArray::svector labels(columnsCount); + for (int i = 0; i < columnsCount; i++) + { + sprintf(sbuf, "name%d", i); + fieldNames[i] = sbuf; + fields[i] = getFieldCreate()->createScalarArray(pvDouble); + labels[i] = sbuf; + } + + StringArray tableFieldNames(2); + FieldConstPtrArray tableFields(2); + tableFieldNames[0] = "name"; + tableFields[0] = getFieldCreate()->createScalarArray(pvString); + tableFieldNames[1] = "value"; + tableFields[1] = getFieldCreate()->createScalarArray(pvDouble); + + PVStructure::shared_pointer result( + getPVDataCreate()->createPVStructure( + getFieldCreate()->createStructure( + "uri:ev4:nt/2012/pwd:NTNameValue", tableFieldNames, tableFields) + ) + ); + result->getSubField("name")->replace(freeze(labels)); + + return result; +} + static void generateNTTableDoubleValues(epics::pvData::PVStructure::shared_pointer result) { PVStringArray::shared_pointer pvLabels = (static_pointer_cast(result->getScalarArrayField("labels", pvString))); @@ -317,6 +349,17 @@ static void generateNTTableDoubleValues(epics::pvData::PVStructure::shared_point } } +static void generateNTNameValueDoubleValues(epics::pvData::PVStructure::shared_pointer result) +{ + size_t len = result->getSubField("name")->getLength(); + + PVDoubleArray::shared_pointer arr = result->getSubField("value"); + PVDoubleArray::svector temp(arr->reuse()); + temp.resize(len); + for (size_t i = 0; i < len; i++) + temp[i] = rand()/((double)RAND_MAX+1) + i; + arr->replace(freeze(temp)); +} class ChannelFindRequesterImpl : public ChannelFindRequester { @@ -618,6 +661,10 @@ public: { generateNTTableDoubleValues(m_pvStructure); } + else if (m_pvStructure->getStructure()->getID() == "uri:ev4:nt/2012/pwd:NTNameValue") + { + generateNTNameValueDoubleValues(m_pvStructure); + } else if (m_valueField.get()) { switch (m_valueField->getScalar()->getScalarType()) @@ -1856,6 +1903,11 @@ protected: m_pvStructure = createNTTable(5); // 5 columns generateNTTableDoubleValues(m_pvStructure); } + else if (m_name.find("testNameValue") == 0) + { + m_pvStructure = createNTNameValue(5); // 5 columns + generateNTNameValueDoubleValues(m_pvStructure); + } else if (m_name.find("testADC") == 0) { int i = 0; @@ -2186,6 +2238,10 @@ public: process = c->createChannelProcess(cpr, PVStructure::shared_pointer()); m_scan1Hz.toProcess.push_back(process); + c = MockChannel::create(chProviderPtr, cr, "testNameValue", "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));