-
Notifications
You must be signed in to change notification settings - Fork 9
/
examplePvaClientGet.cpp
98 lines (89 loc) · 3.6 KB
/
examplePvaClientGet.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
/**
* @author mrk
*/
/* Author: Marty Kraimer */
#include <iostream>
#include <pv/pvaClient.h>
using namespace std;
using namespace epics::pvData;
using namespace epics::pvAccess;
using namespace epics::pvaClient;
static void exampleDouble(PvaClientPtr const &pva,string const & channelName,string const & providerName )
{
cout << "__exampleDouble__ channelName " << channelName << " providerName " << providerName << endl;
double value;
cout << "shortest way\n";
value = pva->channel(channelName,providerName)->getDouble();
cout << "short way\n";
value = pva->channel(channelName,providerName,2.0)->get()->getData()->getDouble();
cout << "as double " << value << endl;
cout << "repeat short way\n";
value = pva->channel(channelName,providerName,2.0)->get()->getData()->getDouble();
cout << "as double " << value << endl;
cout << "long way\n";
PvaClientChannelPtr pvaChannel = pva->createChannel(channelName,providerName);
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;
cout << "__exampleDouble__ returning\n";
}
static void exampleDoubleArray(PvaClientPtr const &pva,string const & channelName,string const & providerName)
{
cout << "__exampleDoubleArray__ channelName "
<< channelName
<< " providerName "
<< providerName << endl;
shared_vector<const double> value;
cout << "shortest way\n";
value = pva->channel(channelName,providerName)->getDoubleArray();
cout << "short way\n";
value = pva->channel(channelName,providerName,2.0)->get()->getData()->getDoubleArray();
cout << "as doubleArray " << value << endl;
cout << "repeat short way\n";
value = pva->channel(channelName,providerName,2.0)->get()->getData()->getDoubleArray();
cout << "as doubleArray " << value << endl;
cout << "long way\n";
PvaClientChannelPtr pvaChannel = pva->createChannel(channelName,providerName);
pvaChannel->connect();
PvaClientGetPtr pvaGet = pvaChannel->createGet();
PvaClientGetDataPtr pvaData = pvaGet->getData();
value = pvaData->getDoubleArray();
cout << "as doubleArray " << value << endl;
cout << "__exampleDoubleArray__ returning\n";
}
int main(int argc,char *argv[])
{
cout << "_____examplePvaClientGet starting_______\n";
try {
PvaClientPtr pva= PvaClient::get("pva ca");
exampleDouble(pva,"PVRdouble","pva");
exampleDoubleArray(pva,"PVRdoubleArray","pva");
PvaClientChannelPtr pvaChannel = pva->createChannel("DBRdouble00","ca");
pvaChannel->issueConnect();
Status status = pvaChannel->waitConnect(1.0);
if(status.isOK()) {
exampleDouble(pva,"DBRdouble00","pva");
exampleDouble(pva,"DBRdouble00","ca");
exampleDoubleArray(pva,"DBRdoubleArray","pva");
exampleDoubleArray(pva,"DBRdoubleArray","ca");
} else {
cout << "DBRdouble00 not found\n";
}
cout << "_____examplePvaClientGet done_______\n";
} catch (std::exception& e) {
cerr << "exception " << e.what() << endl;
return 1;
}
return 0;
}