void test_ntscalar() { testDiag("test_ntscalar"); NTScalarBuilderPtr builder = NTScalar::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTScalarPtr ntScalar = builder-> value(pvInt)-> addDescriptor()-> addAlarm()-> addTimeStamp()-> addDisplay()-> addControl()-> add("valueAlarm",standardField->intAlarm()) -> create(); testOk1(ntScalar.get() != 0); testOk1(NTScalar::is_a(ntScalar->getPVStructure())); testOk1(NTScalar::isCompatible(ntScalar->getPVStructure())); testOk1(ntScalar->getPVStructure().get() != 0); testOk1(ntScalar->getValue().get() != 0); testOk1(ntScalar->getDescriptor().get() != 0); testOk1(ntScalar->getAlarm().get() != 0); testOk1(ntScalar->getTimeStamp().get() != 0); testOk1(ntScalar->getDisplay().get() != 0); testOk1(ntScalar->getControl().get() != 0); // // example how to set a value // ntScalar->getValue<PVInt>()->put(12); // // example how to get a value // int32 value = ntScalar->getValue<PVInt>()->get(); testOk1(value == 12); // // timeStamp ops // PVTimeStamp pvTimeStamp; if (ntScalar->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 (ntScalar->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"); // // display ops // PVDisplay pvDisplay; if (ntScalar->attachDisplay(pvDisplay)) { testPass("display attach"); // example how to set an display Display display; display.setLow(-15); display.setHigh(15); display.setDescription("This is a test scalar"); display.setFormat("%d"); display.setUnits("A"); pvDisplay.set(display); } else testFail("display attach fail"); // // control ops // PVControl pvControl; if (ntScalar->attachControl(pvControl)) { testPass("control attach"); // example how to set an control Control control; control.setLow(-10); control.setHigh(10); control.setMinStep(1); pvControl.set(control); } else testFail("control attach fail"); // // set descriptor // ntScalar->getDescriptor()->put("This is a test NTScalar"); // dump ntScalar std::cout << *ntScalar->getPVStructure() << std::endl; }
void test_ntenum() { testDiag("test_ntenum"); NTEnumBuilderPtr builder = NTEnum::createBuilder(); testOk(builder.get() != 0, "Got builder"); NTEnumPtr ntEnum = builder-> addDescriptor()-> addAlarm()-> addTimeStamp()-> add("valueAlarm",standardField->intAlarm()) -> create(); testOk1(ntEnum.get() != 0); testOk1(NTEnum::is_a(ntEnum->getPVStructure())); testOk1(NTEnum::isCompatible(ntEnum->getPVStructure())); testOk1(ntEnum->getPVStructure().get() != 0); testOk1(ntEnum->getValue().get() != 0); testOk1(ntEnum->getDescriptor().get() != 0); testOk1(ntEnum->getAlarm().get() != 0); testOk1(ntEnum->getTimeStamp().get() != 0); // // example how to set a value // PVStructurePtr pvValue = ntEnum->getValue(); //PVStringArray pvChoices = pvValue->getSubField<PVStringArray>("choices"); PVStringArray::svector choices(2); choices[0] = "Off"; choices[1] = "On"; pvValue->getSubField<PVStringArray>("choices")->replace(freeze(choices)); pvValue->getSubField<PVInt>("index")->put(1); // // example how to get a value // int32 value = ntEnum->getValue()->getSubField<PVInt>("index")->get(); testOk1(value == 1); PVStringArrayPtr pvChoices = ntEnum->getValue()->getSubField<PVStringArray>("choices"); std::string choice0 = pvChoices->view()[0]; std::string choice1 = pvChoices->view()[1]; testOk1(choice0 == "Off"); testOk1(choice1 == "On"); // // timeStamp ops // PVTimeStamp pvTimeStamp; if (ntEnum->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 (ntEnum->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 // ntEnum->getDescriptor()->put("This is a test NTEnum"); // dump ntEnum std::cout << *ntEnum->getPVStructure() << std::endl; }