void NTNDArrayRecord::setAttributes() { // Get the attribute field PVStructureArrayPtr attributeField = ndarray->getAttribute(); // Create a shared vector or reuse PVStructureArray::svector attributes(attributeField->reuse()); attributes.reserve(1); // Create an attribute for the Color Mode // name: ColorMode // value: variant union stores a PVInt with value 0 // descriptor: "Color mode" // source: "" // sourceType = 0 PVStructurePtr attribute = getPVDataCreate()->createPVStructure(attributeField->getStructureArray()->getStructure()); NTNDArrayAttributePtr ntattribute = NTNDArrayAttribute::wrap(attribute); ntattribute->getName()->put("ColorMode"); PVInt::shared_pointer pvColorMode = getPVDataCreate()->createPVScalar<PVInt>(); pvColorMode->put(0); ntattribute->getValue()->set(pvColorMode); ntattribute->getDescriptor()->put("Color mode"); ntattribute->getSourceType()->put(0); ntattribute->getSource()->put(""); attributes.push_back(attribute); // Replace the attribute fields stored attributeField->replace(freeze(attributes)); }
void test_wrap() { testDiag("test_wrap"); NTNDArrayAttributePtr nullPtr = NTNDArrayAttribute::wrap(PVStructurePtr()); testOk(nullPtr.get() == 0, "nullptr wrap"); nullPtr = NTNDArrayAttribute::wrap( getPVDataCreate()->createPVStructure( NTField::get()->createTimeStamp() ) ); testOk(nullPtr.get() == 0, "wrong type wrap"); NTNDArrayAttributeBuilderPtr builder = NTNDArrayAttribute::createBuilder(); testOk(builder.get() != 0, "Got builder"); PVStructurePtr pvStructure = builder-> createPVStructure(); testOk1(pvStructure.get() != 0); if (!pvStructure) return; testOk1(NTNDArrayAttribute::isCompatible(pvStructure)==true); NTNDArrayAttributePtr ptr = NTNDArrayAttribute::wrap(pvStructure); testOk(ptr.get() != 0, "wrap OK"); ptr = NTNDArrayAttribute::wrapUnsafe(pvStructure); testOk(ptr.get() != 0, "wrapUnsafe OK"); }
void test_ntndarrayAttribute() { testDiag("test_ntndarrayAttribute"); NTNDArrayAttributeBuilderPtr builder = NTNDArrayAttribute::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTNDArrayAttributePtr ntNDArrayAttribute = builder-> addTags()-> addAlarm()-> addTimeStamp()-> create(); testOk1(ntNDArrayAttribute.get() != 0); testOk1(ntNDArrayAttribute->getPVStructure().get() != 0); testOk1(ntNDArrayAttribute->getName().get() != 0); testOk1(ntNDArrayAttribute->getValue().get() != 0); testOk1(ntNDArrayAttribute->getTags().get() != 0); testOk1(ntNDArrayAttribute->getDescriptor().get() != 0); testOk1(ntNDArrayAttribute->getAlarm().get() != 0); testOk1(ntNDArrayAttribute->getTimeStamp().get() != 0); testOk1(ntNDArrayAttribute->getSourceType().get() != 0); testOk1(ntNDArrayAttribute->getSource().get() != 0); // // timeStamp ops // PVTimeStamp pvTimeStamp; if (ntNDArrayAttribute->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 (ntNDArrayAttribute->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 // ntNDArrayAttribute->getDescriptor()->put("This is a test NTNDArrayAttribute"); // dump ntNDArrayAttribute std::cout << *ntNDArrayAttribute->getPVStructure() << std::endl; }