Merge pull request #8 from mrkraimer/master
mostly changes learned while developing pvaClientJava
This commit is contained in:
29
README.md
29
README.md
@@ -1,9 +1,20 @@
|
||||
Status
|
||||
===========
|
||||
pvaClientCPP
|
||||
============
|
||||
|
||||
* The API should be almost ready for feature freeze for release 4.5
|
||||
* Everything defined in pvaClient.h should be ready but see below for remaining work.
|
||||
* Everything defined in pvaClientMultiChannel.h is ready but see below for remaining work.
|
||||
pvaClient is a synchronous client interface to pvAccess,
|
||||
which is callback based.
|
||||
pvaClient is thus easier to use than pvAccess itself.
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
If a proper RELEASE.local file exists one directory level above pvaClientCPP
|
||||
then just type:
|
||||
|
||||
make
|
||||
|
||||
If RELEASE.local does not exists the look at <b>configure/RELEASE</b>
|
||||
for directions for how to build.
|
||||
|
||||
Examples
|
||||
------------
|
||||
@@ -15,6 +26,14 @@ For example:
|
||||
/home/epicsv4/pvaClientTestCPP/database/iocBoot/exampleDatabase
|
||||
mrk> ../../bin/linux-x86_64/exampleDatabase st.cmd
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
* The API should ready for feature freeze for release 4.5
|
||||
* Everything defined in pvaClient.h should be ready but see below for remaining work.
|
||||
* Everything defined in pvaClientMultiChannel.h is ready but see below for remaining work.
|
||||
|
||||
|
||||
pvaClientChannel
|
||||
---------------
|
||||
|
||||
|
||||
@@ -16,13 +16,15 @@
|
||||
|
||||
# EPICS V4 Developers: Do not edit the locations in this file!
|
||||
#
|
||||
# Create a file RELEASE.local pointing to your PVASRV, PVACCESS,
|
||||
# PVDATA, PVCOMMON and EPICS_BASE build directories, e.g.
|
||||
# PVASRV = /path/to/epics/pvaSrvCPP
|
||||
# PVACCESS = /path/to/epics/pvAccessCPP
|
||||
# PVDATA = /path/to/epics/pvDataCPP
|
||||
# PVCOMMON = /path/to/epics/pvCommonCPP
|
||||
# EPICS_BASE = /path/to/epics/base
|
||||
# A RELEASE.local must exist that has the following definitions
|
||||
# EPICS_BASE=/home/install/epics/base
|
||||
# EPICS4_DIR=/home/epicsv4
|
||||
# PVCOMMON=${EPICS4_DIR}/pvCommonCPP
|
||||
# PVDATA=${EPICS4_DIR}/pvDataCPP
|
||||
# NORMATIVETYPES=${EPICSV4}/normativeTypesCPP
|
||||
# PVACCESS=${EPICS4_DIR}/pvAccessCPP
|
||||
#Either create a RELEASE.local one level above the TOP for this module
|
||||
#OR copy ExampleRELEASE.local to RELEASE.local and edit it.
|
||||
|
||||
-include $(TOP)/../RELEASE.local
|
||||
-include $(TOP)/configure/RELEASE.local
|
||||
|
||||
@@ -103,12 +103,12 @@ static void example(
|
||||
multiPut->put();
|
||||
multiGet->get();
|
||||
PvaClientNTMultiDataPtr multiData = multiGet->getData();
|
||||
PVStructurePtr pvStructure = multiData->getPVTop();
|
||||
PVStructurePtr pvStructure = multiData->getNTMultiChannel()->getPVStructure();
|
||||
cout << "pvStructure\n" << pvStructure << endl;
|
||||
bool result = multiMonitor->waitEvent(.1);
|
||||
while(result) {
|
||||
multiData = multiMonitor->getData();
|
||||
pvStructure = multiData->getPVTop();
|
||||
pvStructure = multiData->getNTMultiChannel()->getPVStructure();
|
||||
cout << "monitor pvStructure\n" << pvStructure << endl;
|
||||
result = multiMonitor->poll();
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
#include <map>
|
||||
#include <sstream>
|
||||
#include <pv/event.h>
|
||||
#include <pv/lock.h>
|
||||
#include <pv/pvaClient.h>
|
||||
@@ -247,9 +246,9 @@ void PvaClientChannel::connect(double timeout)
|
||||
issueConnect();
|
||||
Status status = waitConnect(timeout);
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName() << " PvaClientChannel::connect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::connect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientChannel::issueConnect()
|
||||
@@ -302,10 +301,10 @@ PvaClientProcessPtr PvaClientChannel::createProcess(string const & request)
|
||||
{
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName();
|
||||
ss << " PvaClientChannel::createProcess invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::createProcess invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return createProcess(pvRequest);
|
||||
}
|
||||
@@ -339,10 +338,10 @@ PvaClientGetPtr PvaClientChannel::createGet(string const & request)
|
||||
{
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName();
|
||||
ss << " PvaClientChannel::createGet invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::createGet invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return createGet(pvRequest);
|
||||
}
|
||||
@@ -377,10 +376,10 @@ PvaClientPutPtr PvaClientChannel::createPut(string const & request)
|
||||
{
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName();
|
||||
ss << " PvaClientChannel::createPut invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::createPut invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return createPut(pvRequest);
|
||||
}
|
||||
@@ -402,10 +401,10 @@ PvaClientPutGetPtr PvaClientChannel::createPutGet(string const & request)
|
||||
{
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName();
|
||||
ss << " PvaClientChannel::createPutGet invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::createPutGet invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return createPutGet(pvRequest);
|
||||
}
|
||||
@@ -428,10 +427,10 @@ PvaClientArrayPtr PvaClientChannel::createArray(string const & request)
|
||||
{
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName();
|
||||
ss << " PvaClientChannel::createArray invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::createArray invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return createArray(pvRequest);
|
||||
}
|
||||
@@ -477,10 +476,10 @@ PvaClientMonitorPtr PvaClientChannel::createMonitor(string const & request)
|
||||
{
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << "channel " << getChannelName();
|
||||
ss << " PvaClientChannel::createMonitor invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + getChannelName()
|
||||
+ " PvaClientChannel::createMonitor invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return createMonitor(pvRequest);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
*/
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
#include <sstream>
|
||||
#include <pv/event.h>
|
||||
#include <pv/pvaClient.h>
|
||||
|
||||
@@ -136,18 +135,18 @@ void PvaClientGet::connect()
|
||||
issueConnect();
|
||||
Status status = waitConnect();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientGet::connect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientGet::connect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientGet::issueConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed");
|
||||
if(connectState!=connectIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientGet already connected ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientGet already connected ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
getRequester = ChannelGetRequester::shared_pointer(new ChannelGetRequesterImpl(this));
|
||||
connectState = connectActive;
|
||||
@@ -159,9 +158,9 @@ Status PvaClientGet::waitConnect()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed");
|
||||
if(connectState==connected) return channelGetConnectStatus;
|
||||
if(connectState!=connectActive) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientGet illegal connect state ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientGet illegal connect state ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForConnect.wait();
|
||||
connectState = channelGetConnectStatus.isOK() ? connected : connectIdle;
|
||||
@@ -174,9 +173,9 @@ void PvaClientGet::get()
|
||||
issueGet();
|
||||
Status status = waitGet();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientGet::get " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientGet::get " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientGet::issueGet()
|
||||
@@ -184,9 +183,9 @@ void PvaClientGet::issueGet()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(getState!=getIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientGet::issueGet get aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientGet::issueGet get aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
getState = getActive;
|
||||
channelGet->get();
|
||||
@@ -196,9 +195,9 @@ Status PvaClientGet::waitGet()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed");
|
||||
if(getState!=getActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientGet::waitGet llegal get state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientGet::waitGet llegal get state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForGet.wait();
|
||||
getState = getIdle;
|
||||
|
||||
@@ -135,18 +135,18 @@ void PvaClientMonitor::connect()
|
||||
issueConnect();
|
||||
Status status = waitConnect();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientMonitor::connect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientMonitor::connect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientMonitor::issueConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientMonitor was destroyed");
|
||||
if(connectState!=connectIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientMonitor already connected ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientMonitor already connected ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
monitorRequester = ChannelMonitorRequester::shared_pointer(new ChannelMonitorRequester(this));
|
||||
connectState = connectActive;
|
||||
@@ -157,9 +157,9 @@ Status PvaClientMonitor::waitConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientMonitor was destroyed");
|
||||
if(connectState!=connectActive) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientMonitor illegal connect state ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientMonitor illegal connect state ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForConnect.wait();
|
||||
connectState = connectStatus.isOK() ? connected : connectIdle;
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
#include <map>
|
||||
#include <sstream>
|
||||
#include <pv/event.h>
|
||||
#include <pv/lock.h>
|
||||
#include <pv/pvaClientMultiChannel.h>
|
||||
@@ -34,9 +33,8 @@ PvaClientMultiChannelPtr PvaClientMultiChannel::create(
|
||||
string const & providerName,
|
||||
size_t maxNotConnected)
|
||||
{
|
||||
PvaClientMultiChannelPtr channel(
|
||||
return PvaClientMultiChannelPtr(
|
||||
new PvaClientMultiChannel(pvaClient,channelNames,providerName,maxNotConnected));
|
||||
return channel;
|
||||
}
|
||||
|
||||
|
||||
@@ -199,9 +197,9 @@ PvaClientNTMultiGetPtr PvaClientMultiChannel::createNTGet(std::string const &req
|
||||
checkConnected();
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << " PvaClientMultiChannel::createNTGet invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = " PvaClientMultiChannel::createNTGet invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return PvaClientNTMultiGet::create(getPtrSelf(), pvaClientChannelArray,pvRequest);
|
||||
}
|
||||
@@ -217,9 +215,9 @@ PvaClientNTMultiMonitorPtr PvaClientMultiChannel::createNTMonitor(std::string co
|
||||
checkConnected();
|
||||
PVStructurePtr pvRequest = createRequest->createRequest(request);
|
||||
if(!pvRequest) {
|
||||
stringstream ss;
|
||||
ss << " PvaClientMultiChannel::createNTMonitor invalid pvRequest: " + createRequest->getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = " PvaClientMultiChannel::createNTMonitor invalid pvRequest: "
|
||||
+ createRequest->getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
return PvaClientNTMultiMonitor::create(getPtrSelf(), pvaClientChannelArray,pvRequest);
|
||||
}
|
||||
|
||||
@@ -417,10 +417,11 @@ private:
|
||||
|
||||
PvaClientMultiChannelPtr pvaClientMultiChannel;
|
||||
PvaClientChannelArray pvaClientChannelArray;
|
||||
epics::pvData::PVStructurePtr pvRequest;
|
||||
size_t nchannel;
|
||||
epics::pvData::Mutex mutex;
|
||||
|
||||
epics::pvData::PVStructurePtr pvRequest;
|
||||
|
||||
PvaClientNTMultiDataPtr pvaClientNTMultiData;
|
||||
std::vector<PvaClientGetPtr> pvaClientGet;
|
||||
bool isConnected;
|
||||
@@ -550,10 +551,9 @@ private:
|
||||
|
||||
PvaClientMultiChannelPtr pvaClientMultiChannel;
|
||||
PvaClientChannelArray pvaClientChannelArray;
|
||||
epics::pvData::PVStructurePtr pvRequest;
|
||||
size_t nchannel;
|
||||
epics::pvData::Mutex mutex;
|
||||
|
||||
epics::pvData::PVStructurePtr pvRequest;
|
||||
PvaClientNTMultiDataPtr pvaClientNTMultiData;
|
||||
std::vector<PvaClientMonitorPtr> pvaClientMonitor;
|
||||
bool isConnected;
|
||||
@@ -612,12 +612,6 @@ public:
|
||||
* @return The value.
|
||||
*/
|
||||
epics::nt::NTMultiChannelPtr getNTMultiChannel();
|
||||
|
||||
/**
|
||||
* Get the top level structure.
|
||||
* @return The top level structure.
|
||||
*/
|
||||
epics::pvData::PVStructurePtr getPVTop();
|
||||
/** Get the shared pointer to self.
|
||||
* @return The shared pointer.
|
||||
*/
|
||||
@@ -632,15 +626,12 @@ private:
|
||||
PvaClientMultiChannelPtr const &pvaNTMultiChannel,
|
||||
PvaClientChannelArray const &pvaClientChannelArray,
|
||||
epics::pvData::PVStructurePtr const & pvRequest);
|
||||
static epics::pvData::PVStructurePtr createRequest(std::string const & request);
|
||||
void setStructure(epics::pvData::StructureConstPtr const & structure,size_t index);
|
||||
void setPVStructure(
|
||||
epics::pvData::PVStructurePtr const &pvStructure,size_t index);
|
||||
|
||||
PvaClientMultiChannelPtr pvaClientMultiChannel;
|
||||
PvaClientChannelArray pvaClientChannelArray;
|
||||
epics::pvData::PVStructurePtr pvRequest;
|
||||
epics::pvData::UnionConstPtr u;
|
||||
size_t nchannel;
|
||||
epics::pvData::Mutex mutex;
|
||||
|
||||
@@ -649,8 +640,7 @@ private:
|
||||
bool gotTimeStamp;
|
||||
bool isDestroyed;
|
||||
|
||||
epics::nt::NTMultiChannelPtr ntMultiChannel;
|
||||
epics::pvData::PVStructurePtr pvTop;
|
||||
epics::pvData::StructureConstPtr ntMultiChannelStructure;
|
||||
epics::pvData::shared_vector<epics::pvData::PVUnionPtr> unionValue;
|
||||
epics::pvData::shared_vector<epics::pvData::int32> severity;
|
||||
epics::pvData::shared_vector<epics::pvData::int32> status;
|
||||
@@ -659,7 +649,6 @@ private:
|
||||
epics::pvData::shared_vector<epics::pvData::int32> nanoseconds;
|
||||
epics::pvData::shared_vector<epics::pvData::int32> userTag;
|
||||
epics::pvData::Alarm alarm;
|
||||
epics::pvData::PVAlarm pvAlarm;
|
||||
epics::pvData::TimeStamp timeStamp;;
|
||||
epics::pvData::PVTimeStamp pvTimeStamp;
|
||||
friend class PvaClientNTMultiGet;
|
||||
|
||||
@@ -82,10 +82,9 @@ void PvaClientMultiGetDouble::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientGet[i]->waitConnect();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelGet::waitConnect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
isGetConnected = true;
|
||||
@@ -107,10 +106,9 @@ epics::pvData::shared_vector<double> PvaClientMultiGetDouble::get()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientGet[i]->waitGet();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelGet::waitGet " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -83,10 +83,9 @@ void PvaClientMultiMonitorDouble::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientMonitor[i]->waitConnect();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelMonitor::waitConnect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
for(size_t i=0; i<nchannel; ++i)
|
||||
|
||||
@@ -83,10 +83,9 @@ void PvaClientMultiPutDouble::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientPut[i]->waitConnect();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelPut::waitConnect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
isPutConnected = true;
|
||||
@@ -110,10 +109,9 @@ void PvaClientMultiPutDouble::put(epics::pvData::shared_vector<double> const &da
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientPut[i]->waitPut();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelPut::waitPut " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
#include <pv/pvaClientMultiChannel.h>
|
||||
#include <pv/standardField.h>
|
||||
#include <pv/convert.h>
|
||||
#include <epicsMath.h>
|
||||
|
||||
using std::tr1::static_pointer_cast;
|
||||
@@ -23,10 +21,7 @@ using namespace std;
|
||||
|
||||
namespace epics { namespace pvaClient {
|
||||
|
||||
static ConvertPtr convert = getConvert();
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
static StandardFieldPtr standardField = getStandardField();
|
||||
|
||||
|
||||
PvaClientNTMultiDataPtr PvaClientNTMultiData::create(
|
||||
@@ -35,9 +30,8 @@ PvaClientNTMultiDataPtr PvaClientNTMultiData::create(
|
||||
PvaClientChannelArray const &pvaClientChannelArray,
|
||||
PVStructurePtr const & pvRequest)
|
||||
{
|
||||
PvaClientNTMultiDataPtr pvaClientNTMultiData(
|
||||
return PvaClientNTMultiDataPtr(
|
||||
new PvaClientNTMultiData(u,pvaMultiChannel,pvaClientChannelArray,pvRequest));
|
||||
return pvaClientNTMultiData;
|
||||
}
|
||||
|
||||
PvaClientNTMultiData::PvaClientNTMultiData(
|
||||
@@ -47,8 +41,6 @@ PvaClientNTMultiData::PvaClientNTMultiData(
|
||||
epics::pvData::PVStructurePtr const & pvRequest)
|
||||
: pvaClientMultiChannel(pvaClientMultiChannel),
|
||||
pvaClientChannelArray(pvaClientChannelArray),
|
||||
pvRequest(pvRequest),
|
||||
u(u),
|
||||
nchannel(pvaClientChannelArray.size()),
|
||||
gotAlarm(false),
|
||||
gotTimeStamp(false),
|
||||
@@ -88,8 +80,7 @@ PvaClientNTMultiData::PvaClientNTMultiData(
|
||||
nanoseconds.resize(nchannel);
|
||||
userTag.resize(nchannel);
|
||||
}
|
||||
ntMultiChannel = builder->create();
|
||||
ntMultiChannel->getChannelName()->replace(pvaClientMultiChannel->getChannelNames());
|
||||
ntMultiChannelStructure = builder->createStructure();
|
||||
}
|
||||
|
||||
|
||||
@@ -180,6 +171,19 @@ void PvaClientNTMultiData::endDeltaTime()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
TimeStamp PvaClientNTMultiData::getTimeStamp()
|
||||
{
|
||||
pvTimeStamp.get(timeStamp);
|
||||
return timeStamp;
|
||||
}
|
||||
|
||||
NTMultiChannelPtr PvaClientNTMultiData::getNTMultiChannel()
|
||||
{
|
||||
PVStructurePtr pvStructure = pvDataCreate->createPVStructure(ntMultiChannelStructure);
|
||||
NTMultiChannelPtr ntMultiChannel = NTMultiChannel::wrap(pvStructure);
|
||||
ntMultiChannel->getChannelName()->replace(pvaClientMultiChannel->getChannelNames());
|
||||
shared_vector<epics::pvData::PVUnionPtr> val(nchannel);
|
||||
for(size_t i=0; i<nchannel; ++i) val[i] = unionValue[i];
|
||||
ntMultiChannel->getValue()->replace(freeze(val));
|
||||
@@ -211,22 +215,7 @@ void PvaClientNTMultiData::endDeltaTime()
|
||||
for(size_t i=0; i<nchannel; ++i) tag[i] = userTag[i];
|
||||
ntMultiChannel->getUserTag()->replace(freeze(tag));
|
||||
}
|
||||
}
|
||||
|
||||
TimeStamp PvaClientNTMultiData::getTimeStamp()
|
||||
{
|
||||
pvTimeStamp.get(timeStamp);
|
||||
return timeStamp;
|
||||
}
|
||||
|
||||
NTMultiChannelPtr PvaClientNTMultiData::getNTMultiChannel()
|
||||
{
|
||||
return ntMultiChannel;
|
||||
}
|
||||
|
||||
PVStructurePtr PvaClientNTMultiData::getPVTop()
|
||||
{
|
||||
return ntMultiChannel->getPVStructure();
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
@@ -47,8 +47,8 @@ PvaClientNTMultiGet::PvaClientNTMultiGet(
|
||||
epics::pvData::PVStructurePtr const & pvRequest)
|
||||
: pvaClientMultiChannel(pvaClientMultiChannel),
|
||||
pvaClientChannelArray(pvaClientChannelArray),
|
||||
nchannel(pvaClientChannelArray.size()),
|
||||
pvRequest(pvRequest),
|
||||
nchannel(pvaClientChannelArray.size()),
|
||||
pvaClientNTMultiData(
|
||||
PvaClientNTMultiData::create(
|
||||
u,
|
||||
@@ -94,10 +94,9 @@ void PvaClientNTMultiGet::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientGet[i]->waitConnect();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelGet::waitConnect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
this->isConnected = true;
|
||||
@@ -119,10 +118,9 @@ void PvaClientNTMultiGet::get()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientGet[i]->waitGet();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelGet::waitGet " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
pvaClientNTMultiData->startDeltaTime();
|
||||
|
||||
@@ -24,11 +24,7 @@ using namespace std;
|
||||
|
||||
namespace epics { namespace pvaClient {
|
||||
|
||||
static ConvertPtr convert = getConvert();
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
static StandardFieldPtr standardField = getStandardField();
|
||||
|
||||
|
||||
PvaClientNTMultiMonitorPtr PvaClientNTMultiMonitor::create(
|
||||
PvaClientMultiChannelPtr const &pvaMultiChannel,
|
||||
@@ -48,8 +44,8 @@ PvaClientNTMultiMonitor::PvaClientNTMultiMonitor(
|
||||
PVStructurePtr const & pvRequest)
|
||||
: pvaClientMultiChannel(pvaClientMultiChannel),
|
||||
pvaClientChannelArray(pvaClientChannelArray),
|
||||
nchannel(pvaClientChannelArray.size()),
|
||||
pvRequest(pvRequest),
|
||||
nchannel(pvaClientChannelArray.size()),
|
||||
pvaClientNTMultiData(
|
||||
PvaClientNTMultiData::create(
|
||||
u,
|
||||
@@ -97,10 +93,9 @@ void PvaClientNTMultiMonitor::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientMonitor[i]->waitConnect();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelMonitor::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelMonitor::waitConnect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
for(size_t i=0; i<nchannel; ++i)
|
||||
|
||||
@@ -26,16 +26,13 @@ namespace epics { namespace pvaClient {
|
||||
static ConvertPtr convert = getConvert();
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
static StandardFieldPtr standardField = getStandardField();
|
||||
static CreateRequest::shared_pointer createRequest = CreateRequest::create();
|
||||
|
||||
PvaClientNTMultiPutPtr PvaClientNTMultiPut::create(
|
||||
PvaClientMultiChannelPtr const &pvaMultiChannel,
|
||||
PvaClientChannelArray const &pvaClientChannelArray)
|
||||
{
|
||||
PvaClientNTMultiPutPtr pvaClientNTMultiPut(
|
||||
new PvaClientNTMultiPut(pvaMultiChannel,pvaClientChannelArray));
|
||||
return pvaClientNTMultiPut;
|
||||
return PvaClientNTMultiPutPtr(
|
||||
new PvaClientNTMultiPut(pvaMultiChannel,pvaClientChannelArray));
|
||||
}
|
||||
|
||||
PvaClientNTMultiPut::PvaClientNTMultiPut(
|
||||
@@ -83,10 +80,9 @@ void PvaClientNTMultiPut::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientPut[i]->waitConnect();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelPut::waitConnect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
for(size_t i=0; i<nchannel; ++i)
|
||||
@@ -100,10 +96,9 @@ void PvaClientNTMultiPut::connect()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientPut[i]->waitGet();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelPut::waitGet " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelPut::waitGet " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
for(size_t i=0; i<nchannel; ++i)
|
||||
@@ -137,10 +132,9 @@ void PvaClientNTMultiPut::put()
|
||||
if(isConnected[i]) {
|
||||
Status status = pvaClientPut[i]->waitPut();
|
||||
if(status.isOK()) continue;
|
||||
stringstream ss;
|
||||
string channelName = pvaClientChannelArray[i]->getChannelName();
|
||||
ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
|
||||
+ " PvaChannelPut::waitPut " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
*/
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
#include <sstream>
|
||||
#include <pv/event.h>
|
||||
#include <pv/pvaClient.h>
|
||||
|
||||
@@ -115,18 +114,18 @@ void PvaClientProcess::connect()
|
||||
issueConnect();
|
||||
Status status = waitConnect();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientProcess::connect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientProcess::connect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientProcess::issueConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed");
|
||||
if(connectState!=connectIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientProcess already connected ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientProcess already connected ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
processRequester = ChannelProcessRequester::shared_pointer(new ChannelProcessRequesterImpl(this));
|
||||
connectState = connectActive;
|
||||
@@ -137,9 +136,9 @@ Status PvaClientProcess::waitConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed");
|
||||
if(connectState!=connectActive) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientProcess illegal connect state ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientProcess illegal connect state ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForConnect.wait();
|
||||
connectState = channelProcessConnectStatus.isOK() ? connected : connectIdle;
|
||||
@@ -152,9 +151,9 @@ void PvaClientProcess::process()
|
||||
issueProcess();
|
||||
Status status = waitProcess();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientProcess::process " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientProcess::process" + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientProcess::issueProcess()
|
||||
@@ -162,9 +161,9 @@ void PvaClientProcess::issueProcess()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(processState!=processIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientProcess::issueProcess process aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientProcess::issueProcess process aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
processState = processActive;
|
||||
channelProcess->process();
|
||||
@@ -174,9 +173,9 @@ Status PvaClientProcess::waitProcess()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed");
|
||||
if(processState!=processActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientProcess::waitProcess llegal process state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientProcess::waitProcess llegal process state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForProcess.wait();
|
||||
processState = processIdle;
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
*/
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
#include <sstream>
|
||||
#include <pv/event.h>
|
||||
#include <pv/pvaClient.h>
|
||||
|
||||
@@ -153,18 +152,18 @@ void PvaClientPut::connect()
|
||||
issueConnect();
|
||||
Status status = waitConnect();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::connect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPut::connect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPut::issueConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed");
|
||||
if(connectState!=connectIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientPut already connected ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientPut already connected ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putRequester = ChannelPutRequester::shared_pointer(new ChannelPutRequesterImpl(this));
|
||||
connectState = connectActive;
|
||||
@@ -175,9 +174,9 @@ Status PvaClientPut::waitConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed");
|
||||
if(connectState!=connectActive) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientPut illegal connect state ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientPut illegal connect state ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForConnect.wait();
|
||||
connectState = channelPutConnectStatus.isOK() ? connected : connectIdle;
|
||||
@@ -190,9 +189,9 @@ void PvaClientPut::get()
|
||||
issueGet();
|
||||
Status status = waitGet();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::get " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPut::get " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPut::issueGet()
|
||||
@@ -200,9 +199,9 @@ void PvaClientPut::issueGet()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(putState!=putIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::issueGet get or put aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ "PvaClientPut::issueGet get or put aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putState = getActive;
|
||||
pvaClientData->getChangedBitSet()->clear();
|
||||
@@ -213,9 +212,9 @@ Status PvaClientPut::waitGet()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed");
|
||||
if(putState!=getActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::waitGet llegal put state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPut::waitGet llegal put state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForGetPut.wait();
|
||||
putState = putIdle;
|
||||
@@ -228,9 +227,9 @@ void PvaClientPut::put()
|
||||
issuePut();
|
||||
Status status = waitPut();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::put " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPut::put " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPut::issuePut()
|
||||
@@ -238,9 +237,9 @@ void PvaClientPut::issuePut()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(putState!=putIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::issueGet get or put aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ "PvaClientPut::issueGet get or put aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putState = putActive;
|
||||
channelPut->put(pvaClientData->getPVStructure(),pvaClientData->getChangedBitSet());
|
||||
@@ -250,9 +249,9 @@ Status PvaClientPut::waitPut()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed");
|
||||
if(putState!=putActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPut::waitPut llegal put state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPut::waitPut llegal put state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForGetPut.wait();
|
||||
putState = putIdle;
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
*/
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
#include <sstream>
|
||||
#include <pv/event.h>
|
||||
#include <pv/pvaClient.h>
|
||||
|
||||
@@ -193,18 +192,18 @@ void PvaClientPutGet::connect()
|
||||
issueConnect();
|
||||
Status status = waitConnect();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::connect " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::connect " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPutGet::issueConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(connectState!=connectIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientPutGet already connected ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientPutGet already connected ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putGetRequester = ChannelPutGetRequester::shared_pointer(new ChannelPutGetRequesterImpl(this));
|
||||
connectState = connectActive;
|
||||
@@ -215,9 +214,9 @@ Status PvaClientPutGet::waitConnect()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(connectState!=connectActive) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " pvaClientPutGet illegal connect state ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " pvaClientPutGet illegal connect state ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForConnect.wait();
|
||||
connectState = channelPutGetConnectStatus.isOK() ? connected : connectIdle;
|
||||
@@ -231,9 +230,9 @@ void PvaClientPutGet::putGet()
|
||||
issuePutGet();
|
||||
Status status = waitPutGet();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::putGet " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::putGet " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPutGet::issuePutGet()
|
||||
@@ -241,9 +240,9 @@ void PvaClientPutGet::issuePutGet()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(putGetState!=putGetIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::issueGet get or put aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::issueGet get or put aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putGetState = putGetActive;
|
||||
channelPutGet->putGet(pvaClientPutData->getPVStructure(),pvaClientPutData->getChangedBitSet());
|
||||
@@ -254,9 +253,9 @@ Status PvaClientPutGet::waitPutGet()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(putGetState!=putGetActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::waitPutGet llegal put state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::waitPutGet llegal put state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForPutGet.wait();
|
||||
putGetState = putGetIdle;
|
||||
@@ -269,9 +268,9 @@ void PvaClientPutGet::getGet()
|
||||
issueGetGet();
|
||||
Status status = waitGetGet();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::getGet " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::getGet " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPutGet::issueGetGet()
|
||||
@@ -279,9 +278,9 @@ void PvaClientPutGet::issueGetGet()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(putGetState!=putGetIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::issueGetGet aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::issueGetGet aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putGetState = putGetActive;
|
||||
channelPutGet->getGet();
|
||||
@@ -291,9 +290,9 @@ Status PvaClientPutGet::waitGetGet()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(putGetState!=putGetActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::waitGetGet illegal state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::waitGetGet illegal state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForPutGet.wait();
|
||||
putGetState = putGetIdle;
|
||||
@@ -306,9 +305,9 @@ void PvaClientPutGet::getPut()
|
||||
issueGetPut();
|
||||
Status status = waitGetPut();
|
||||
if(status.isOK()) return;
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::getPut " << status.getMessage();
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::getPut " + status.getMessage();
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
|
||||
void PvaClientPutGet::issueGetPut()
|
||||
@@ -316,9 +315,9 @@ void PvaClientPutGet::issueGetPut()
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(connectState==connectIdle) connect();
|
||||
if(putGetState!=putGetIdle) {
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::issueGetPut aleady active ";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::issueGetPut aleady active ";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
putGetState = putGetActive;
|
||||
channelPutGet->getPut();
|
||||
@@ -328,9 +327,9 @@ Status PvaClientPutGet::waitGetPut()
|
||||
{
|
||||
if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed");
|
||||
if(putGetState!=putGetActive){
|
||||
stringstream ss;
|
||||
ss << "channel " << channel->getChannelName() << " PvaClientPutGet::waitGetPut illegal state";
|
||||
throw std::runtime_error(ss.str());
|
||||
string message = string("channel ") + channel->getChannelName()
|
||||
+ " PvaClientPutGet::waitGetPut illegal state";
|
||||
throw std::runtime_error(message);
|
||||
}
|
||||
waitForPutGet.wait();
|
||||
putGetState = putGetIdle;
|
||||
|
||||
Reference in New Issue
Block a user