void test_builder() { testDiag("test_builder"); NTHistogramBuilderPtr builder = NTHistogram::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> value(pvLong)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTHistogram::is_a(structure)); testOk1(structure->getID() == NTHistogram::URI); testOk1(structure->getNumberFields() == 7); testOk1(structure->getField("ranges").get() != 0); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("ranges")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("ranges"))->getElementType() == pvDouble, "ranges array element type"); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("value")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("value"))->getElementType() == pvLong, "value array element type"); std::cout << *structure << std::endl; // no value set try { structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testFail("no value type set"); } catch (std::runtime_error &) { testPass("no value type set"); } }
void test_builder() { testDiag("test_builder"); NTEnumBuilderPtr builder = NTEnum::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("valueAlarm",standardField->doubleAlarm()) -> add("extra",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTEnum::is_a(structure)); testOk1(structure->getID() == NTEnum::URI); testOk1(structure->getNumberFields() == 6); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); FieldConstPtr valueField = structure->getField("value"); testOk(valueField.get() != 0 && ntField->isEnumerated(valueField), "value is enum"); std::cout << *structure << std::endl; }
void test_builder() { testDiag("test_builder"); NTTableBuilderPtr builder = NTTable::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addColumn("column0", pvDouble)-> addColumn("column1", pvString)-> addColumn("column2", pvInt)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTTable::is_a(structure)); testOk1(structure->getID() == NTTable::URI); testOk1(structure->getNumberFields() == 7); testOk1(structure->getField("labels").get() != 0); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("extra1").get() != 0); testOk1(structure->getField("extra2").get() != 0); StructureConstPtr s = dynamic_pointer_cast<const Structure>(structure->getField("value")); #define TEST_COLUMN(name, type) \ testOk(s.get() != 0 && \ s->getField(name).get() != 0 && \ dynamic_pointer_cast<const ScalarArray>(s->getField(name)).get() != 0 && \ dynamic_pointer_cast<const ScalarArray>(s->getField(name))->getElementType() == type, \ name " check"); TEST_COLUMN("column0", pvDouble); TEST_COLUMN("column1", pvString); TEST_COLUMN("column2", pvInt); #undef TEST_COLUMN std::cout << *structure << std::endl; // duplicate test try { structure = builder-> addColumn("column0", pvDouble)-> addColumn("column0", pvString)-> createStructure(); testFail("duplicate column name"); } catch (std::runtime_error &) { testPass("duplicate column name"); } }
void test_builder() { testDiag("test_builder"); NTScalarBuilderPtr builder = NTScalar::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> value(pvDouble)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addDisplay()-> addControl()-> add("valueAlarm",standardField->doubleAlarm()) -> add("extra",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTScalar::is_a(structure)); testOk1(structure->getID() == NTScalar::URI); testOk1(structure->getNumberFields() == 8); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("display").get() != 0); testOk1(structure->getField("control").get() != 0); testOk(dynamic_pointer_cast<const Scalar>(structure->getField("value")).get() != 0 && dynamic_pointer_cast<const Scalar>(structure->getField("value"))->getScalarType() == pvDouble, "value type"); std::cout << *structure << std::endl; // no value set try { structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addDisplay()-> addControl()-> createStructure(); testFail("no value type set"); } catch (std::runtime_error &) { testPass("no value type set"); } }
void test_builder(bool extraFields) { testDiag("test_builder"); NTNDArrayBuilderPtr builder = NTNDArray::createBuilder(); testOk(builder.get() != 0, "Got builder"); builder->addDescriptor()-> addTimeStamp()-> addAlarm()-> addDisplay(); if (extraFields) { builder->add("extra1",fieldCreate->createScalar(pvString))-> add("extra2",fieldCreate->createScalarArray(pvString)); } StructureConstPtr structure = builder->createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTNDArray::is_a(structure)); testOk1(structure->getID() == NTNDArray::URI); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("compressedSize").get() != 0); testOk1(structure->getField("uncompressedSize").get() != 0); testOk1(structure->getField("codec").get() != 0); testOk1(structure->getField("dimension").get() != 0); testOk1(structure->getField("uniqueId").get() != 0); testOk1(structure->getField("dataTimeStamp").get() != 0); testOk1(structure->getField("attribute").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk1(structure->getField("display").get() != 0); if (extraFields) { testOk1(structure->getField("extra1").get() != 0); testOk1(structure->getField("extra2").get() != 0); } std::cout << *structure << std::endl; }
void test_all() { testDiag("test_builder"); NTNDArrayBuilderPtr builder = NTNDArray::createBuilder(); testOk(builder.get() != 0, "Got builder"); PVStructurePtr pvStructure = builder-> addDescriptor()-> addTimeStamp()-> addAlarm()-> addDisplay()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createPVStructure(); testOk1(NTNDArray::is_a(pvStructure)==true); testOk1(NTNDArray::isCompatible(pvStructure)==true); }
void test_builder() { testDiag("test_builder"); NTContinuumBuilderPtr builder = NTContinuum::createBuilder(); testOk(builder.get() != 0, "Got builder"); StructureConstPtr structure = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> createStructure(); testOk1(structure.get() != 0); if (!structure) return; testOk1(NTContinuum::is_a(structure)); testOk1(structure->getID() == NTContinuum::URI); testOk1(structure->getNumberFields() == 8); testOk1(structure->getField("base").get() != 0); testOk1(structure->getField("value").get() != 0); testOk1(structure->getField("units").get() != 0); testOk1(structure->getField("descriptor").get() != 0); testOk1(structure->getField("alarm").get() != 0); testOk1(structure->getField("timeStamp").get() != 0); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("base")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("base"))->getElementType() == pvDouble, "base array element type"); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("value")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("value"))->getElementType() == pvDouble, "value array element type"); testOk(dynamic_pointer_cast<const ScalarArray>(structure->getField("units")).get() != 0 && dynamic_pointer_cast<const ScalarArray>(structure->getField("units"))->getElementType() == pvString, "units array element type"); std::cout << *structure << std::endl; }
static void test() { NTMultiChannelBuilderPtr builder = NTMultiChannel::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTMultiChannelPtr multiChannel = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addSeverity() -> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> create(); testOk1(multiChannel.get() != 0); PVStructurePtr pvStructure = multiChannel->getPVStructure(); testOk1(pvStructure.get()!=NULL); testOk1(NTMultiChannel::is_a(pvStructure->getStructure())); size_t nchan = 3; shared_vector<string> names(nchan); names[0] = "channel 0"; names[1] = "channel 1"; names[2] = "channel 2"; shared_vector<const string> channelNames(freeze(names)); PVStringArrayPtr pvChannelName = multiChannel->getChannelName(); pvChannelName->replace(channelNames); if(debug) {cout << *pvStructure << endl;} UnionConstPtr unionPtr = fieldCreate->createFieldBuilder()-> add("doubleValue", pvDouble)-> add("intValue", pvInt)-> createUnion(); multiChannel = builder-> value(unionPtr) -> addDescriptor()-> addAlarm()-> addTimeStamp()-> addSeverity() -> addIsConnected() -> create(); testOk1(multiChannel.get() != 0); pvStructure = multiChannel->getPVStructure(); if(debug) {cout << *pvStructure << endl;} pvChannelName = multiChannel->getChannelName(); pvChannelName->replace(channelNames); PVUnionArrayPtr pvValue = multiChannel->getValue(); shared_vector<PVUnionPtr> unions(nchan); unions[0] = pvDataCreate->createPVUnion(unionPtr); unions[1] = pvDataCreate->createPVUnion(unionPtr); unions[2] = pvDataCreate->createPVUnion(unionPtr); unions[0]->select("doubleValue"); unions[1]->select("intValue"); unions[2]->select("intValue"); PVDoublePtr pvDouble = unions[0]->get<PVDouble>(); pvDouble->put(1.235); PVIntPtr pvInt = unions[1]->get<PVInt>(); pvInt->put(5); pvInt = unions[2]->get<PVInt>(); pvInt->put(7); pvValue->replace(freeze(unions)); shared_vector<int32> severities(nchan); severities[0] = 0; severities[1] = 1; severities[2] = 2; PVIntArrayPtr pvSeverity = multiChannel->getSeverity(); pvSeverity->replace(freeze(severities)); if(debug) {cout << *pvStructure << endl;} PVBooleanArrayPtr pvIsConnected = multiChannel->getIsConnected(); shared_vector<const epics::pvData::boolean> isConnected = pvIsConnected->view(); multiChannel = builder-> value(unionPtr) -> addDescriptor()-> addAlarm()-> addTimeStamp()-> addSeverity() -> addStatus() -> addMessage() -> addSecondsPastEpoch() -> addNanoseconds() -> addUserTag() -> addIsConnected() -> create(); testOk1(multiChannel.get() != 0); pvStructure = multiChannel->getPVStructure(); if(debug) {cout << *pvStructure << endl;} testOk1(NTMultiChannel::isCompatible(pvStructure)==true); PVStructurePtr pvTimeStamp = multiChannel->getTimeStamp(); testOk1(pvTimeStamp.get() !=0); PVStructurePtr pvAlarm = multiChannel->getAlarm(); testOk1(pvAlarm.get() !=0); pvValue = multiChannel->getValue(); testOk1(pvValue.get() !=0); pvChannelName = multiChannel->getChannelName(); testOk1(pvChannelName.get() !=0); pvIsConnected = multiChannel->getIsConnected(); testOk1(pvIsConnected.get() !=0); pvSeverity = multiChannel->getSeverity(); testOk1(pvSeverity.get() !=0); PVIntArrayPtr pvStatus = multiChannel->getStatus(); testOk1(pvStatus.get() !=0); PVStringArrayPtr pvMessage = multiChannel->getMessage(); testOk1(pvMessage.get() !=0); PVLongArrayPtr pvSecondsPastEpoch = multiChannel->getSecondsPastEpoch(); testOk1(pvSecondsPastEpoch.get() !=0); PVIntArrayPtr pvNanoseconds = multiChannel->getNanoseconds(); testOk1(pvNanoseconds.get() !=0); PVIntArrayPtr pvUserTag = multiChannel->getUserTag(); testOk1(pvUserTag.get() !=0); PVStringPtr pvDescriptor = multiChannel->getDescriptor(); testOk1(pvDescriptor.get() !=0); }
void test_ntcontinuum() { testDiag("test_ntcontinuum"); NTContinuumBuilderPtr builder = NTContinuum::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTContinuumPtr ntContinuum = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> create(); testOk1(ntContinuum.get() != 0); testOk1(ntContinuum->getPVStructure().get() != 0); testOk1(ntContinuum->getDescriptor().get() != 0); testOk1(ntContinuum->getAlarm().get() != 0); testOk1(ntContinuum->getTimeStamp().get() != 0); testOk1(ntContinuum->getBase().get() != 0); testOk1(ntContinuum->getValue().get() != 0); // // example how to set base // PVDoubleArray::svector newBase; newBase.push_back(1.0); newBase.push_back(2.0); PVDoubleArrayPtr pvBaseField = ntContinuum->getBase(); pvBaseField->replace(freeze(newBase)); // // example how to get bases // PVDoubleArray::const_svector base(pvBaseField->view()); testOk1(base.size() == 2); testOk1(base[0] == 1.0); testOk1(base[1] == 2.0); // // example how to set values // PVDoubleArray::svector newValue; newValue.push_back(1.0); newValue.push_back(2.0); newValue.push_back(10.0); newValue.push_back(20.0); newValue.push_back(100.0); newValue.push_back(200.0); PVDoubleArrayPtr pvValueField = ntContinuum->getValue(); pvValueField->replace(freeze(newValue)); // // example how to get values // PVDoubleArray::const_svector value(pvValueField->view()); testOk1(value.size() == 6); testOk1(value[0] == 1.0); testOk1(value[1] == 2.0); testOk1(value[2] == 10.0); testOk1(value[3] == 20.0); testOk1(value[4] == 100.0); testOk1(value[5] == 200.0); // // example how to set units // PVStringArray::svector newUnits; newUnits.push_back("s"); newUnits.push_back("ms"); newUnits.push_back("us"); newUnits.push_back("s"); PVStringArrayPtr pvUnitsField = ntContinuum->getUnits(); pvUnitsField->replace(freeze(newUnits)); // // example how to get units // PVStringArray::const_svector units(pvUnitsField->view()); testOk1(units.size() == 4); testOk1(units[0] == "s"); testOk1(units[1] == "ms"); testOk1(units[2] == "us"); testOk1(units[3] == "s"); // // test isValid // testOk1(ntContinuum->isValid()); // // timeStamp ops // PVTimeStamp pvTimeStamp; if (ntContinuum->attachTimeStamp(pvTimeStamp)) { testPass("timeStamp attach"); // example how to set current time TimeStamp ts; ts.getCurrent(); pvTimeStamp.set(ts); // example how to get EPICS time TimeStamp ts2; pvTimeStamp.get(ts2); testOk1(ts2.getEpicsSecondsPastEpoch() != 0); } else testFail("timeStamp attach fail"); // // alarm ops // PVAlarm pvAlarm; if (ntContinuum->attachAlarm(pvAlarm)) { testPass("alarm attach"); // example how to set an alarm Alarm alarm; alarm.setStatus(deviceStatus); alarm.setSeverity(minorAlarm); alarm.setMessage("simulation alarm"); pvAlarm.set(alarm); } else testFail("alarm attach fail"); // // set descriptor // ntContinuum->getDescriptor()->put("This is a test NTContinuum"); // dump NTContinuum std::cout << *ntContinuum->getPVStructure() << std::endl; }
void test_nthistogram() { testDiag("test_nthistogram"); NTHistogramBuilderPtr builder = NTHistogram::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTHistogramPtr ntHistogram = builder-> value(pvInt)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> create(); testOk1(ntHistogram.get() != 0); testOk1(ntHistogram->getPVStructure().get() != 0); testOk1(ntHistogram->getDescriptor().get() != 0); testOk1(ntHistogram->getAlarm().get() != 0); testOk1(ntHistogram->getTimeStamp().get() != 0); testOk1(ntHistogram->getRanges().get() != 0); testOk1(ntHistogram->getValue().get() != 0); testOk1(ntHistogram->getValue<PVIntArray>().get() != 0); // // example how to set ranges // PVDoubleArray::svector newRanges; newRanges.push_back(-100.0); newRanges.push_back(0.0); newRanges.push_back(100.0); PVDoubleArrayPtr pvRangesField = ntHistogram->getRanges(); pvRangesField->replace(freeze(newRanges)); // // example how to get ranges // PVDoubleArray::const_svector ranges(pvRangesField->view()); testOk1(ranges.size() == 3); testOk1(ranges[0] == -100.0); testOk1(ranges[1] == 0.0); testOk1(ranges[2] == 100.0); // // example how to set value // PVIntArray::svector newValue; newValue.push_back(1); newValue.push_back(2); PVIntArrayPtr pvValueField = ntHistogram->getValue<PVIntArray>(); pvValueField->replace(freeze(newValue)); // // example how to get values for each bin // PVIntArray::const_svector value(pvValueField->view()); testOk1(value.size() == 2); testOk1(value[0] == 1); testOk1(value[1] == 2); // // test isValid // testOk1(ntHistogram->isValid()); // // timeStamp ops // PVTimeStamp pvTimeStamp; if (ntHistogram->attachTimeStamp(pvTimeStamp)) { testPass("timeStamp attach"); // example how to set current time TimeStamp ts; ts.getCurrent(); pvTimeStamp.set(ts); // example how to get EPICS time TimeStamp ts2; pvTimeStamp.get(ts2); testOk1(ts2.getEpicsSecondsPastEpoch() != 0); } else testFail("timeStamp attach fail"); // // alarm ops // PVAlarm pvAlarm; if (ntHistogram->attachAlarm(pvAlarm)) { testPass("alarm attach"); // example how to set an alarm Alarm alarm; alarm.setStatus(deviceStatus); alarm.setSeverity(minorAlarm); alarm.setMessage("simulation alarm"); pvAlarm.set(alarm); } else testFail("alarm attach fail"); // // set descriptor // ntHistogram->getDescriptor()->put("This is a test NTHistogram"); // dump NTHistogram std::cout << *ntHistogram->getPVStructure() << std::endl; }
static void test() { NTScalarMultiChannelBuilderPtr builder = NTScalarMultiChannel::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTScalarMultiChannelPtr multiChannel = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addSeverity() -> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> create(); testOk1(multiChannel.get() != 0); PVStructurePtr pvStructure = multiChannel->getPVStructure(); testOk1(pvStructure.get()!=NULL); testOk1(NTScalarMultiChannel::is_a(pvStructure->getStructure())); size_t nchan = 3; shared_vector<string> names(nchan); names[0] = "channel 0"; names[1] = "channel 1"; names[2] = "channel 2"; shared_vector<const string> channelNames(freeze(names)); PVStringArrayPtr pvChannelName = multiChannel->getChannelName(); pvChannelName->replace(channelNames); if(debug) {cout << *pvStructure << endl;} multiChannel = builder-> value(pvDouble) -> addDescriptor()-> addAlarm()-> addTimeStamp()-> addSeverity() -> addIsConnected() -> create(); testOk1(multiChannel.get() != 0); pvStructure = multiChannel->getPVStructure(); if(debug) {cout << *pvStructure << endl;} pvChannelName = multiChannel->getChannelName(); pvChannelName->replace(channelNames); PVDoubleArrayPtr pvValue = multiChannel->getValue<PVDoubleArray>(); PVDoubleArray::svector doubles(nchan); doubles.resize(nchan); doubles[0] = 3.14159; doubles[1] = 2.71828; doubles[2] = 137.036; pvValue->replace(freeze(doubles)); shared_vector<int32> severities(nchan); severities[0] = 0; severities[1] = 1; severities[2] = 2; PVIntArrayPtr pvSeverity = multiChannel->getSeverity(); pvSeverity->replace(freeze(severities)); if(debug) {cout << *pvStructure << endl;} PVBooleanArrayPtr pvIsConnected = multiChannel->getIsConnected(); shared_vector<const epics::pvData::boolean> isConnected = pvIsConnected->view(); multiChannel = builder-> value(pvDouble) -> addDescriptor()-> addAlarm()-> addTimeStamp()-> addSeverity() -> addStatus() -> addMessage() -> addSecondsPastEpoch() -> addNanoseconds() -> addUserTag() -> addIsConnected() -> create(); testOk1(multiChannel.get() != 0); pvStructure = multiChannel->getPVStructure(); if(debug) {cout << *pvStructure << endl;} testOk1(NTScalarMultiChannel::isCompatible(pvStructure)==true); PVStructurePtr pvTimeStamp = multiChannel->getTimeStamp(); testOk1(pvTimeStamp.get() !=0); PVStructurePtr pvAlarm = multiChannel->getAlarm(); testOk1(pvAlarm.get() !=0); pvValue = multiChannel->getValue<PVDoubleArray>(); testOk1(pvValue.get() !=0); pvChannelName = multiChannel->getChannelName(); testOk1(pvChannelName.get() !=0); pvIsConnected = multiChannel->getIsConnected(); testOk1(pvIsConnected.get() !=0); pvSeverity = multiChannel->getSeverity(); testOk1(pvSeverity.get() !=0); PVIntArrayPtr pvStatus = multiChannel->getStatus(); testOk1(pvStatus.get() !=0); PVStringArrayPtr pvMessage = multiChannel->getMessage(); testOk1(pvMessage.get() !=0); PVLongArrayPtr pvSecondsPastEpoch = multiChannel->getSecondsPastEpoch(); testOk1(pvSecondsPastEpoch.get() !=0); PVIntArrayPtr pvNanoseconds = multiChannel->getNanoseconds(); testOk1(pvNanoseconds.get() !=0); PVIntArrayPtr pvUserTag = multiChannel->getUserTag(); testOk1(pvUserTag.get() !=0); PVStringPtr pvDescriptor = multiChannel->getDescriptor(); testOk1(pvDescriptor.get() !=0); }
void test_ntnameValue() { testDiag("test_ntnameValue"); NTNameValueBuilderPtr builder = NTNameValue::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTNameValuePtr ntNameValue = builder-> value(pvInt)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("extra1",fieldCreate->createScalar(pvString)) -> add("extra2",fieldCreate->createScalarArray(pvString)) -> create(); testOk1(ntNameValue.get() != 0); testOk1(NTNameValue::is_a(ntNameValue->getPVStructure())); testOk1(NTNameValue::isCompatible(ntNameValue->getPVStructure())); testOk1(ntNameValue->getPVStructure().get() != 0); testOk1(ntNameValue->getDescriptor().get() != 0); testOk1(ntNameValue->getAlarm().get() != 0); testOk1(ntNameValue->getTimeStamp().get() != 0); testOk1(ntNameValue->getName().get() != 0); testOk1(ntNameValue->getValue().get() != 0); // // example how to set name // PVStringArray::svector newName; newName.push_back("name1"); newName.push_back("name2"); newName.push_back("name3"); PVStringArrayPtr pvNameField = ntNameValue->getName(); pvNameField->replace(freeze(newName)); // // example how to get name // PVStringArray::const_svector name(pvNameField->view()); testOk1(name.size() == 3); testOk1(name[0] == "name1"); testOk1(name[1] == "name2"); testOk1(name[2] == "name3"); // // example how to set value // PVIntArray::svector newValue; newValue.push_back(1); newValue.push_back(2); newValue.push_back(8); PVIntArrayPtr pvValueField = ntNameValue->getValue<PVIntArray>(); pvValueField->replace(freeze(newValue)); // // example how to get column value // PVIntArray::const_svector value(pvValueField->view()); testOk1(value.size() == 3); testOk1(value[0] == 1); testOk1(value[1] == 2); testOk1(value[2] == 8); // // timeStamp ops // PVTimeStamp pvTimeStamp; if (ntNameValue->attachTimeStamp(pvTimeStamp)) { testPass("timeStamp attach"); // example how to set current time TimeStamp ts; ts.getCurrent(); pvTimeStamp.set(ts); // example how to get EPICS time TimeStamp ts2; pvTimeStamp.get(ts2); testOk1(ts2.getEpicsSecondsPastEpoch() != 0); } else testFail("timeStamp attach fail"); // // alarm ops // PVAlarm pvAlarm; if (ntNameValue->attachAlarm(pvAlarm)) { testPass("alarm attach"); // example how to set an alarm Alarm alarm; alarm.setStatus(deviceStatus); alarm.setSeverity(minorAlarm); alarm.setMessage("simulation alarm"); pvAlarm.set(alarm); } else testFail("alarm attach fail"); // // set descriptor // ntNameValue->getDescriptor()->put("This is a test NTNameValue"); // dump NTNameValue std::cout << *ntNameValue->getPVStructure() << std::endl; }
void ExampleServiceRPC::request( ChannelRPCRequester::shared_pointer const & channelRPCRequester, epics::pvData::PVStructure::shared_pointer const & pvArgument) { String buffer; PVStringPtr pvfunction = pvArgument->getStringField("function"); PVStringArrayPtr pvnames = static_pointer_cast<PVStringArray> (pvArgument->getScalarArrayField("names",pvString)); PVStringArrayPtr pvvalues = static_pointer_cast<PVStringArray> (pvArgument->getScalarArrayField("values",pvString)); buffer += "pvArgument "; bool is = true; if(pvfunction==0) is = false; if(pvnames==0) is = false; if(pvvalues==0) is = false; if(is) { buffer += "is a NTNameValue\n"; } else { buffer += "is not a NTNameValue\n "; } pvArgument->toString(&buffer); printf("%s\n",buffer.c_str()); StandardFieldPtr standardField = getStandardField(); StandardPVFieldPtr standardPVField = getStandardPVField(); FieldCreatePtr fieldCreate = getFieldCreate(); PVDataCreatePtr pvDataCreate = getPVDataCreate(); size_t n = 5; FieldConstPtrArray fields; StringArray names; fields.reserve(n); names.reserve(n); names.push_back("alarm"); names.push_back("timeStamp"); names.push_back("label"); names.push_back("position"); names.push_back("alarms"); StructureConstPtr xxx = standardField->alarm(); printf("xxx %p\n",xxx.get()); fields.push_back(standardField->alarm()); fields.push_back(standardField->timeStamp()); fields.push_back(fieldCreate->createScalarArray(pvString)); fields.push_back(fieldCreate->createScalarArray(pvDouble)); fields.push_back(fieldCreate->createStructureArray(standardField->alarm())); StructureConstPtr structure = fieldCreate->createStructure(names,fields); printf("structure %p\n",structure.get()); buffer.clear(); structure->toString(&buffer); printf("structure\n%s\n",buffer.c_str()); PVStructurePtr pvStructure = pvDataCreate->createPVStructure(structure); PVTimeStamp pvTimeStamp; TimeStamp timeStamp; pvTimeStamp.attach(pvStructure->getStructureField("timeStamp")); timeStamp.getCurrent(); pvTimeStamp.set(timeStamp); StringArray label; label.reserve(2); for(int i=0; i<2; i++) { label.push_back(names[i+3]); } PVStringArrayPtr pvLabel = static_pointer_cast<PVStringArray> (pvStructure->getScalarArrayField("label",pvString)); pvLabel->put(0,2,label,0); PVDoubleArrayPtr pvPositions = static_pointer_cast<PVDoubleArray> (pvStructure->getScalarArrayField("position",pvDouble)); double positions[2]; positions[0] = 1.0; positions[1] = 2.0; pvPositions->put(0,2,positions,0); PVStructureArrayPtr pvAlarms = static_pointer_cast<PVStructureArray> (pvStructure->getStructureArrayField("alarms")); PVAlarm pvAlarm; Alarm alarm; PVStructurePtrArray palarms; size_t na=2; palarms.reserve(na); for(size_t i=0; i<na; i++) { palarms.push_back(pvDataCreate->createPVStructure(standardField->alarm())); } for(size_t i=0; i<na; i++) { pvAlarm.attach(palarms[i]); alarm.setMessage("test"); alarm.setSeverity(majorAlarm); alarm.setStatus(clientStatus); pvAlarm.set(alarm); } pvAlarms->put(0,2,palarms,0); String labels[2]; labels[0] = pvPositions->getFieldName(); labels[1] = pvAlarms->getFieldName(); pvLabel->put(0,2,labels,0); buffer.erase(); pvStructure->toString(&buffer); printf("%s\n",buffer.c_str()); channelRPCRequester->requestDone(Status::Ok,pvStructure); }