rohdeschwarz  0.2.0
TCPIP socket library for Rohde & Schwarz instrument control
cvisa.cpp
Go to the documentation of this file.
1 
8 using namespace rohdeschwarz::busses::visa;
9 
10 
11 // constants
12 const wchar_t* FILENAME = L"visa64.dll";
13 
14 
16  : viOpenDefaultRM(nullptr),
17  viFindRsrc(nullptr),
18  viFindNext(nullptr),
19  viParseRsrcEx(nullptr),
20  viOpen(nullptr),
21  viClose(nullptr),
22  viWrite(nullptr),
23  viRead(nullptr),
24  viEnableEvent(nullptr),
25  viDisableEvent(nullptr),
26  viWaitOnEvent(nullptr),
27  viDiscardEvents(nullptr),
28  viReadSTB(nullptr),
29  viGpibSendIFC(nullptr),
30  viSetAttribute(nullptr),
31  viGetAttribute(nullptr),
32  viStatusDesc(nullptr)
33 {
34  // TODO: throw exception on error
35  load();
36 }
37 
38 
40 {
41  if (isVisa())
42  {
43  unload();
44  }
45 }
46 
47 
48 // helpers
49 
50 bool CVisa::isVisa() const
51 {
52  return _visa.is_loaded();
53 }
54 
55 
56 bool CVisa::load()
57 {
58  if (isVisa())
59  {
60  unload();
61  }
62 
63  // load visa
64  _visa = boost::dll::shared_library(FILENAME);
65 
66  if (!isVisa())
67  {
68  return false;
69  }
70 
71  // load functions
72  viOpenDefaultRM = _visa.get<VI_OPEN_DEFAULT_RM_PTR>("viOpenDefaultRM");
73  viFindRsrc = _visa.get<VI_FIND_RSRC_PTR> ("viFindRsrc");
74  viFindNext = _visa.get<VI_FIND_NEXT_PTR> ("viFindNext");
75  viParseRsrcEx = _visa.get<VI_PARSE_RSRC_EX_PTR> ("viParseRsrcEx");
76  viOpen = _visa.get<VI_OPEN_PTR> ("viOpen");
77  viClose = _visa.get<VI_CLOSE_PTR> ("viClose");
78  viWrite = _visa.get<VI_WRITE_PTR> ("viWrite");
79  viRead = _visa.get<VI_READ_PTR> ("viRead");
80  viEnableEvent = _visa.get<VI_ENABLE_EVENT_PTR> ("viEnableEvent");
81  viDisableEvent = _visa.get<VI_DISABLE_EVENT_PTR> ("viDisableEvent");
82  viWaitOnEvent = _visa.get<VI_WAITON_EVENT_PTR> ("viWaitOnEvent");
83  viDiscardEvents = _visa.get<VI_DISCARD_EVENTS_PTR> ("viDiscardEvents");
84  viReadSTB = _visa.get<VI_READ_STB_PTR> ("viReadSTB");
85  viGpibSendIFC = _visa.get<VI_GPIB_SEND_IFC_PTR> ("viGpibSendIFC");
86  viSetAttribute = _visa.get<VI_SET_ATTRIBUTE_PTR> ("viSetAttribute");
87  viGetAttribute = _visa.get<VI_GET_ATTRIBUTE_PTR> ("viGetAttribute");
88  viStatusDesc = _visa.get<VI_STATUS_DESC_PTR> ("viStatusDesc");
89 
90  // functions found?
91  if (
93  || !viFindRsrc
94  || !viFindNext
95  || !viParseRsrcEx
96  || !viOpen
97  || !viClose
98  || !viWrite
99  || !viRead
100  || !viEnableEvent
101  || !viDisableEvent
102  || !viWaitOnEvent
103  || !viDiscardEvents
104  || !viReadSTB
105  || !viGpibSendIFC
106  || !viSetAttribute
107  || !viGetAttribute
108  || !viStatusDesc
109  )
110  {
111  // could not load functions
112  // from library
113  return false;
114  }
115 
116  // success
117  return true;
118 }
119 
120 
121 bool CVisa::unload()
122 {
123  if (isVisa())
124  {
125  _visa.unload();
126  }
127 
128  return !isVisa();
129 }
VI_FIND_RSRC_PTR viFindRsrc
Function pointer to VISA function viFindRsrc
Definition: cvisa.hpp:78
VI_FIND_NEXT_PTR viFindNext
Function pointer to VISA function viFindNext
Definition: cvisa.hpp:84
VI_DISCARD_EVENTS_PTR viDiscardEvents
Function pointer to VISA function viDiscardEvents
Definition: cvisa.hpp:138
VI_PARSE_RSRC_EX_PTR viParseRsrcEx
Function pointer to VISA function viParseRsrcEx
Definition: cvisa.hpp:90
VI_WAITON_EVENT_PTR viWaitOnEvent
Function pointer to VISA function viWaitOnEvent
Definition: cvisa.hpp:132
VI_OPEN_PTR viOpen
Function pointer to VISA function viOpen
Definition: cvisa.hpp:96
VI_OPEN_DEFAULT_RM_PTR viOpenDefaultRM
Function pointer to VISA function viOpenDefaultRM()
Definition: cvisa.hpp:72
VI_SET_ATTRIBUTE_PTR viSetAttribute
Function pointer to VISA function viSetAttribute
Definition: cvisa.hpp:156
bool isVisa() const
Checks if VISA was loaded.
Definition: cvisa.cpp:50
VI_READ_STB_PTR viReadSTB
Function pointer to VISA function viReadSTB
Definition: cvisa.hpp:144
VI_GPIB_SEND_IFC_PTR viGpibSendIFC
Function pointer to VISA function viGpibSendIFC
Definition: cvisa.hpp:150
VI_READ_PTR viRead
Function pointer to VISA function viRead
Definition: cvisa.hpp:114
VI_CLOSE_PTR viClose
Function pointer to VISA function viClose
Definition: cvisa.hpp:102
VI_WRITE_PTR viWrite
Function pointer to VISA function viWrite
Definition: cvisa.hpp:108
VI_GET_ATTRIBUTE_PTR viGetAttribute
Function pointer to VISA function viGetAttribute
Definition: cvisa.hpp:162
VI_DISABLE_EVENT_PTR viDisableEvent
Function pointer to VISA function viDisableEvent
Definition: cvisa.hpp:126
VI_ENABLE_EVENT_PTR viEnableEvent
Function pointer to VISA function viEnableEvent
Definition: cvisa.hpp:120
VI_STATUS_DESC_PTR viStatusDesc
Function pointer to VISA function viStatusDesc
Definition: cvisa.hpp:168
const wchar_t * FILENAME
Definition: cvisa.cpp:12
rohdeschwarz::busses::visa::CVisa definition
ViStatus(_VI_FUNC * VI_FIND_RSRC_PTR)(ViSession sesn, ViString expr, ViPFindList vi, ViPUInt32 retCnt, ViChar _VI_FAR desc[])
Function pointer type for viFindRsrc
Definition: cvisatypes.hpp:30
ViStatus(_VI_FUNC * VI_CLOSE_PTR)(ViObject vi)
Function pointer type for viClose
Definition: cvisatypes.hpp:54
ViStatus(_VI_FUNC * VI_DISCARD_EVENTS_PTR)(ViSession vi, ViEventType eventType, ViUInt16 mechanism)
Function pointer type for viDiscardEvents
Definition: cvisatypes.hpp:90
ViStatus(_VI_FUNC * VI_OPEN_DEFAULT_RM_PTR)(ViPSession vi)
Function pointer type for viOpenDefaultRM
Definition: cvisatypes.hpp:24
ViStatus(_VI_FUNC * VI_STATUS_DESC_PTR)(ViObject vi, ViStatus status, ViChar _VI_FAR desc[])
Function pointer type for viStatusDesc
Definition: cvisatypes.hpp:120
ViStatus(_VI_FUNC * VI_SET_ATTRIBUTE_PTR)(ViObject vi, ViAttr attrName, ViAttrState attrValue)
Function pointer type for viSetAttribute
Definition: cvisatypes.hpp:108
ViStatus(_VI_FUNC * VI_READ_PTR)(ViSession vi, ViPBuf buf, ViUInt32 cnt, ViPUInt32 retCnt)
Function pointer type for viRead
Definition: cvisatypes.hpp:66
ViStatus(_VI_FUNC * VI_PARSE_RSRC_EX_PTR)(ViSession rmSesn, ViRsrc rsrcName, ViPUInt16 intfType, ViPUInt16 intfNum, ViChar _VI_FAR rsrcClass[], ViChar _VI_FAR expandedUnaliasedName[], ViChar _VI_FAR aliasIfExists[])
Function pointer type for viParseRsrcEx
Definition: cvisatypes.hpp:42
ViStatus(_VI_FUNC * VI_OPEN_PTR)(ViSession sesn, ViRsrc name, ViAccessMode mode, ViUInt32 timeout, ViPSession vi)
Function pointer type for viOpen
Definition: cvisatypes.hpp:48
ViStatus(_VI_FUNC * VI_WAITON_EVENT_PTR)(ViSession vi, ViEventType inEventType, ViUInt32 timeout, ViPEventType outEventType, ViPEvent outContext)
Function pointer type for viWaitOnEvent
Definition: cvisatypes.hpp:84
ViStatus(_VI_FUNC * VI_FIND_NEXT_PTR)(ViFindList vi, ViChar _VI_FAR desc[])
Function pointer type for viFindNext
Definition: cvisatypes.hpp:36
ViStatus(_VI_FUNC * VI_GPIB_SEND_IFC_PTR)(ViSession vi)
Function pointer type for viGpibSendIFC
Definition: cvisatypes.hpp:102
ViStatus(_VI_FUNC * VI_DISABLE_EVENT_PTR)(ViSession vi, ViEventType eventType, ViUInt16 mechanism)
Function pointer type for viDisableEvent
Definition: cvisatypes.hpp:78
ViStatus(_VI_FUNC * VI_WRITE_PTR)(ViSession vi, ViBuf buf, ViUInt32 cnt, ViPUInt32 retCnt)
Function pointer type for viWrite
Definition: cvisatypes.hpp:60
ViStatus(_VI_FUNC * VI_READ_STB_PTR)(ViSession vi, ViPUInt16 status)
Function pointer type for viReadSTB
Definition: cvisatypes.hpp:96
ViStatus(_VI_FUNC * VI_GET_ATTRIBUTE_PTR)(ViObject vi, ViAttr attrName, void _VI_PTR attrValue)
Function pointer type for viGetAttribute
Definition: cvisatypes.hpp:114
ViStatus(_VI_FUNC * VI_ENABLE_EVENT_PTR)(ViSession vi, ViEventType eventType, ViUInt16 mechanism, ViEventFilter context)
Function pointer type for viEnableEvent
Definition: cvisatypes.hpp:72