#include #include #include #include #include #include namespace pvd = epics::pvData; namespace pva = epics::pvAccess; namespace { epicsEvent done; struct ChanReq : public pva::ChannelRequester { virtual ~ChanReq() {} virtual std::string getRequesterName() { return "ChanReq"; } virtual void channelCreated(const epics::pvData::Status& status, pva::Channel::shared_pointer const & channel) { if(!status.isSuccess()) { std::cout<<"Oops Connect: "<getChannelName()<<"\n"; } } virtual void channelStateChange(pva::Channel::shared_pointer const & channel, pva::Channel::ConnectionState connectionState) { switch(connectionState) { case pva::Channel::NEVER_CONNECTED: case pva::Channel::CONNECTED: case pva::Channel::DISCONNECTED: case pva::Channel::DESTROYED: std::cout<getChannelName()<<" "<getChannel()->getChannelName()<<"\n"; channelGet->get(); } else { std::cout<<"Oops GetConnect: "<getChannel()->getChannelName()<<" "<getSubField("value")); if(!valfld) valfld = pvStructure; std::cout<getChannel()->getChannelName()<<" : "<<*valfld<<"\n"; } else { std::cout<<"Oops Get: "<createPVStructure( pvd::getFieldCreate()->createFieldBuilder()->createStructure() )); pva::Configuration::shared_pointer conf(pva::ConfigurationBuilder() .push_env() .build()); pva::ClientFactory::start(); pva::ChannelProvider::shared_pointer provider(pva::getChannelProviderRegistry()->createProvider("pva", conf)); if(!provider) throw std::logic_error("pva provider not registered"); typedef std::set gets_t; gets_t gets; pva::ChannelRequester::shared_pointer chanreq(new ChanReq); pva::ChannelGetRequester::shared_pointer getreq(new GetReq); for(int i=1; icreateChannel(argv[i], chanreq)); // if !chan then channelCreated() called with error status if(!chan) continue; pva::ChannelGet::shared_pointer op(chan->createChannelGet(getreq, pvReq)); if(!op) continue; gets.insert(op); // drop our explicit Channel reference, ChannelGet holds an additional reference } done.wait(); return 0; } catch(std::exception& e){ std::cerr<<"Error: "<