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; } }
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; } } }
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 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; }
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; } }
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; } }
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 exampleDouble(PvaClientPtr const &pvaClient) { testDiag("== exampleDouble =="); PvaClientChannelPtr pvaChannel; try { pvaChannel = pvaClient->createChannel("PVRdouble"); pvaChannel->connect(2.0); testDiag("channel connected"); } catch (std::runtime_error e) { testAbort("channel connection exception '%s'", e.what()); } PvaClientPutPtr put; PvaClientPutDataPtr putData; try { put = pvaChannel->createPut(); putData = put->getData(); testDiag("put connected"); if (!putData) testAbort("NULL data pointer from putGet"); } catch (std::runtime_error e) { testAbort("put connection exception '%s'", e.what()); } PvaClientGetPtr get; PvaClientGetDataPtr getData; try { get = pvaChannel->createGet(); getData = get->getData(); testDiag("get connected"); if (!getData) testAbort("NULL data pointer from putGet"); } catch (std::runtime_error e) { testAbort("get connection exception '%s'", e.what()); } PvaClientMonitorRequesterPtr requester(new MyMonitor()); PvaClientMonitorPtr monitor; expected.set(0); // structure definition try { monitor = pvaChannel->monitor(requester); testDiag("monitor connected"); } catch (std::runtime_error e) { testAbort("monitor connection exception '%s'", e.what()); } epicsThreadSleep(0.1); // Allow connection monitor event to fire expected.clear(); // FIXME: Magic numbers here... expected.set(1); // value expected.set(6); // timestamp try { for (int i=0; i<5; ++i) { testDiag("= put %d =", i); double out = i; putData->putDouble(out); put->put(); get->get(); double in = getData->getDouble(); testOk(in == out, "get value matches put"); } PvaClientProcessPtr process = pvaChannel->createProcess(); process->connect(); testDiag("= process ="); expected.clear(1); // no value change process->process(); } catch (std::runtime_error e) { testAbort("exception '%s'", e.what()); } }