static void exampleMonitor(PvaClientPtr const &pva,string provider) { PvaClientMonitorPtr monitor = pva->channel("DBRdouble00",provider,2.0)->monitor(""); PvaClientMonitorDataPtr monitorData = monitor->getData(); PvaClientPutPtr put = pva->channel("DBRdouble00",provider,2.0)->put(""); PvaClientPutDataPtr putData = put->getData(); for(size_t ntimes=0; ntimes<5; ++ntimes) { double value = ntimes; cout << "put " << value << endl; putData->putDouble(value); put->put(); if(!monitor->waitEvent(.1)) { cout << "waitEvent returned false. Why???"; continue; } else while(true) { cout << "monitor " << monitorData->getDouble() << endl; cout << "changed\n"; monitorData->showChanged(cout); cout << "overrun\n"; monitorData->showOverrun(cout); monitor->releaseEvent(); if(!monitor->poll()) break; } } }
static void exampleDoubleArray(PvaClientPtr const &pva,string const & channelName,string const & providerName) { cout << "__exampleDoubleArray__ channelName " << channelName << " providerName " << providerName << endl; PvaClientChannelPtr channel = pva->channel(channelName,providerName,2.0); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel(channelName,providerName,2.0)->monitor("value"); PvaClientMonitorDataPtr monitorData = monitor->getData(); size_t num = 5; shared_vector<double> data(num,0); for(size_t i=0; i<num; ++i) data[i] = .1*i; putData->putDoubleArray(freeze(data)); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; data = shared_vector<double>(num,0); for(size_t i=0; i<num; ++i) data[i] = .1*(i + 1); putData->putDoubleArray(freeze(data)); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; if(!monitor->waitEvent()) { cout << "waitEvent returned false. Why???"; } else while(true) { cout << "monitor changed\n" << monitorData->showChanged(cout); monitor->releaseEvent(); if(!monitor->poll()) break; } }
int main(int argc,char *argv[]) { string provider("pva"); if(argc==2 && string(argv[1])==string("-help")) { cout << "provider" << endl; cout << "default" << endl; cout << provider << endl; return 0; } if(argc>1) provider = argv[1]; cout << "_____exampleLinkClient starting_______\n"; PvaClientPtr pva = PvaClient::create(); try { PvaClientPutPtr put = pva->channel("doubleArray",provider,5.0)->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel("exampleLink")->monitor(""); PvaClientMonitorDataPtr pvaData = monitor->getData(); if(!monitor->waitEvent(0.0)) { cout << "waitEvent returned false. Why???\n"; } else { cout << "exampleLink\n" << pvaData->getPVStructure() << endl; monitor->releaseEvent(); } { size_t nElements = 5; shared_vector<double> value(nElements); for(size_t i=0; i< nElements; ++i) value[i] = 0.0; shared_vector<const double> data(freeze(value)); putData->putDoubleArray(data); put->put(); } if(!monitor->waitEvent(0.0)) { cout<< "waitEvent returned false. Why???\n"; } else { cout << "exampleLink\n" << pvaData->getPVStructure() << endl; monitor->releaseEvent(); } { size_t nElements = 5; shared_vector<double> value(nElements); for(size_t i=0; i< nElements; ++i) value[i] = .1*(i+1); shared_vector<const double> data(freeze(value)); putData->putDoubleArray(data); put->put(); } if(!monitor->waitEvent(0.0)) { cout<< "waitEvent returned false. Why???\n"; } else { cout << "exampleLink\n" << pvaData->getPVStructure() << endl; monitor->releaseEvent(); } } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; return 1; } cout << "_____exampleLinkClient done_______\n"; return 0; }
static void exampleProcess(PvaClientPtr const &pva) { cout << "example process\n"; PvaClientChannelPtr channel = pva->channel("PVRdouble"); PvaClientProcessPtr process = channel->createProcess(); process->process(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; process->process(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; }
static void exampleDouble(PvaClientPtr const &pva,string const & channelName,string const & providerName) { cout << "__exampleDouble__ channelName " << channelName << " providerName " << providerName << endl; PvaClientChannelPtr channel = pva->channel(channelName,providerName,2.0); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel(channelName,providerName,2.0)->monitor("value"); PvaClientMonitorDataPtr monitorData = monitor->getData(); putData->putDouble(3.0); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; putData->putDouble(4.0); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; if(!monitor->waitEvent()) { cout << "waitEvent returned false. Why???"; } else while(true) { cout << "monitor changed\n" << monitorData->showChanged(cout); monitor->releaseEvent(); if(!monitor->poll()) break; } }
bool ExampleGetLinkRecord::init(PvaClientPtr const & pva,string const & channelName,string const & providerName) { initPVRecord(); PVStructurePtr pvStructure = getPVRecordStructure()->getPVStructure(); pvValue = pvStructure->getSubField<PVDoubleArray>("value"); if(!pvValue) { return false; } pvaClientGet = pva->channel(channelName,providerName)->createGet(); return true; }
static void examplePVFieldPut(PvaClientPtr const &pva,string const & channelName,string const & providerName) { cout << "__examplePVFieldPut__ channelName " << channelName << " providerName " << providerName << endl; PvaClientChannelPtr channel = pva->channel(channelName,providerName,2.0); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PVScalarPtr pvScalar = static_pointer_cast<PVScalar>(putData->getValue()); convert->fromDouble(pvScalar,1.0); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; convert->fromDouble(pvScalar,2.0); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; }
bool ExampleMonitorLinkRecord::init(PvaClientPtr const & pva,string const & channelName,string const & providerName) { initPVRecord(); PVStructurePtr pvStructure = getPVRecordStructure()->getPVStructure(); pvValue = pvStructure->getSubField<PVDoubleArray>("value"); if(!pvValue) { return false; } PvaClientChannelPtr pvaClientChannel = pva->channel(channelName,providerName,0.0); monitorRequester = dynamic_pointer_cast<PvaClientMonitorRequester>(getPtrSelf()); pvaClientMonitor = pvaClientChannel->monitor("value",monitorRequester); return true; }
static void exampleProcess(PvaClientPtr const &pva) { cout << "example process\n"; PvaClientChannelPtr channel = pva->channel("PVRdouble"); PvaClientProcessPtr process = channel->createProcess(); try { process->process(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; process->process(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; } }
static void examplePut(PvaClientPtr const &pva) { cout << "example put\n"; PvaClientChannelPtr channel = pva->channel("exampleDouble"); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel("exampleDouble")->monitor(""); PvaClientMonitorDataPtr monitorData = monitor->getData(); try { putData->putDouble(3.0); put->put(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; putData->putDouble(4.0); put->put(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; if(!monitor->waitEvent()) { cout << "waitEvent returned false. Why???"; } else while(true) { cout << "monitor changed\n" << monitorData->showChanged(cout); monitor->releaseEvent(); if(!monitor->poll()) break; } } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; } }
static void examplePVFieldPut(PvaClientPtr const &pva) { cout << "example put\n"; PvaClientChannelPtr channel = pva->channel("exampleDouble"); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PVFieldPtr pvField = putData->getValue(); PVScalarPtr pvScalar = static_pointer_cast<PVScalar>(pvField); try { convert->fromDouble(pvScalar,1.0); put->put(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; convert->fromDouble(pvScalar,2.0); put->put(); cout << channel->get("field()")->getData()->showChanged(cout) << endl; } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; } }
int main(int argc,char *argv[]) { PvaClientPtr pva = PvaClient::create(); try { PvaClientChannelPtr channel = pva->channel("helloPutGet"); PvaClientPutGetPtr putGet = channel->createPutGet(); putGet->connect(); PvaClientPutDataPtr putData = putGet->getPutData(); PVStructurePtr arg = putData->getPVStructure(); PVStringPtr pvValue = arg->getSubField<PVString>("argument.value"); pvValue->put("World"); putGet->putGet(); PvaClientGetDataPtr getData = putGet->getGetData(); cout << getData->getPVStructure() << endl; } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; return 1; } return 0; }
static void exampleCADoubleArray(PvaClientPtr const &pva) { cout << "__exampleCADoubleArray__\n"; shared_vector<const double> value; try { cout << "short way\n"; value = pva->channel("DBRdoubleArray","ca",5.0)->get()->getData()->getDoubleArray(); cout << "as doubleArray " << value << endl; } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; } try { cout << "long way\n"; PvaClientChannelPtr pvaChannel = pva->createChannel("DBRdoubleArray","ca"); pvaChannel->connect(2.0); PvaClientGetPtr pvaGet = pvaChannel->createGet(); PvaClientGetDataPtr pvaData = pvaGet->getData(); value = pvaData->getDoubleArray(); cout << "as doubleArray " << value << endl; } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; } }
static void exampleCADouble(PvaClientPtr const &pva) { cout << "__exampleCADouble__\n"; double value; try { cout << "short way\n"; value = pva->channel("DBRdouble00","ca",5.0)->get()->getData()->getDouble(); cout << "as double " << value << endl; } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; } cout << "long way\n"; PvaClientChannelPtr pvaChannel = pva->createChannel("DBRdouble00","ca"); pvaChannel->issueConnect(); Status status = pvaChannel->waitConnect(2.0); if(!status.isOK()) {cout << " connect failed\n"; return;} PvaClientGetPtr pvaGet = pvaChannel->createGet(); pvaGet->issueConnect(); status = pvaGet->waitConnect(); if(!status.isOK()) {cout << " createGet failed\n"; return;} PvaClientGetDataPtr pvaData = pvaGet->getData(); value = pvaData->getDouble(); cout << "as double " << value << endl; }