C++ Instrument Catalog
VISAInstrument.h
Go to the documentation of this file.
1 
8 #pragma once
9 
10 // External tools
11 #include "visatype.h"
12 #include "visa.h"
13 
14 // Standard includes
15 #include <iterator>
16 
17 // Personal includes
18 #include "VISAInstrumentTypes.h"
19 #include "VISAInstrumentBuffer.h"
20 #include "Synchronization.h"
21 
22 using namespace MTL::Synchronization;
23 
24 namespace MTL {
25  namespace Instrument {
26  //----------------------------------------------------------------------//
31  std::string StatusDescription(ViSession Session, ViStatus Status);
32 
33  //----------------------------------------------------------------------//
36  {
37  private:
38  mutable CMutex m_Lock;
39  ViSession m_DefaultRM;
40  ViStatus m_Status;
41  public:
42  // Constructors / destructors
44  virtual ~CVISAResourceManager();
45 
46  // Initialization / Info
47  bool Initialize();
48  ViStatus Status();
49  const ViSession & Session();
50 
51  // Resource utilities
52  bool FindResources(CResourceList & rList, std::string Filter = "?*");
53  bool FindResources(CParsedResourceList & rList, std::string Filter = "?*");
54  bool ResourceInfo(tResourceName & rRsrc, eInterfaceType & rIntfType, tInterfaceNumber & rIntfNumber);
55  bool ResourceInfo(tResourceName & rRsrc, VISAResourceInfo & rReturnedInfo);
56  };
57 
58  //----------------------------------------------------------------------//
61  {
62  protected:
63  mutable CRecursiveMutex m_Lock; // Lock onto the class interface
64  CVISAResourceManager & m_rRrsrcMan; // Reference to the associated resource manager
65  tResourceName m_Rsrc; // Resource name of the instrument
66  ViSession m_InstrSession; // Open session
67  ViStatus m_Status; // Current status
68 
69  public:
70  // Constructors / destructors
72  virtual ~CVISAInstrument();
73 
74  // Connexion
75  bool Open(eOpenAccessMode AccessMode = eOpenAccessMode::NoLock, ViUInt32 Timeout_ms = 0);
76  void Close();
77  bool IsOpen();
78 
79  // Info
80  const ViStatus & Status();
81  const ViSession & Session();
82 
83  // Write / Read
84  bool Write(const char * Str);
85  bool Write(const std::string & rStr);
86  bool Write(const CVISABuffer & rBuf);
87  bool Write(const ViBuf WriteBuf, ViUInt32 BuffLen);
88  bool Read(CVISABuffer & rBuf, bool Append = false);
89  bool Read(ViPBuf ReadBuf, ViUInt32 ReadLen, ViUInt32 & rRetLen);
90 
91  // Other operations
92  bool SetTimeout(ViUInt32 Timeout);
93  bool Clear();
94  bool ReadSTB(ViUInt16 & rSTB);
95  bool AssertTrigger(eTriggerProtocol Protocol);
96 
97  // Lock / Unlock
98  bool LockExclusive(ViUInt32 Timeout);
99  bool LockShared(ViUInt32 Timeout, ViKeyId RequestedKey, ViChar AccessKey[]);
100  bool Unlock();
101 
102  // Events
103  bool EnableEvent(eEventType Type, eEventMechanism Mechanism);
104  bool DisableEvent(eEventType Type, eEventMechanism Mechanism);
105  bool WaitOnEvent(eEventType Type, ViUInt32 Timeout);
106  bool WaitOnAllEvents(ViUInt32 Timeout);
107  bool DiscardEvents(eEventType Type, eEventMechanism Mechanism);
108 
109  // Attributes
110  bool GetAttribute(ViAttr Attribute, void * Value);
111 
112  // USB
113  bool UsbControlIn(ViInt16 bmRequestType, ViInt16 bRequest, ViUInt16 wValue, ViUInt16 wIndex, ViUInt16 wLength, ViPBuf buf, ViUInt16 & rretCnt);
114  bool UsbControlOut(ViInt16 bmRequestType, ViInt16 bRequest, ViUInt16 wValue, ViUInt16 wIndex, ViUInt16 wLength, ViBuf buf);
115 
116  // Serial
117  bool ConfigSerialPort(const sSerialPortSettings & rPortSettings);
118  };
119 
120 }} // namespace MTL::Instrument
Synchronization.h
Synchronization primitives.
MTL::Instrument::CResourceList
Definition: VISAInstrumentTypes.h:23
MTL::Instrument::eEventType::Clear
@ Clear
MTL::Instrument::CVISAInstrument::m_rRrsrcMan
CVISAResourceManager & m_rRrsrcMan
Definition: VISAInstrument.h:64
MTL::Instrument::eEventMechanism
eEventMechanism
Definition: VISAInstrumentTypes.h:88
MTL::Instrument::VISAResourceInfo
Definition: VISAInstrumentTypes.h:193
MTL::Synchronization
Definition: Synchronization.h:12
MTL::Instrument::sSerialPortSettings
Definition: VISAInstrumentTypes.h:173
MTL::Instrument::eEventType
eEventType
Definition: VISAInstrumentTypes.h:95
MTL::Instrument::CVISAInstrument::m_Lock
CRecursiveMutex m_Lock
Definition: VISAInstrument.h:63
MTL::Synchronization::CMutex
std::mutex CMutex
Mutex.
Definition: Synchronization.h:16
MTL::Instrument::eInterfaceType
eInterfaceType
Definition: VISAInstrumentTypes.h:57
MTL::Instrument::CVISAInstrument::m_Rsrc
tResourceName m_Rsrc
Definition: VISAInstrument.h:65
MTL
Definition: CPT2026PeripheralROM.h:19
MTL::Instrument::StatusDescription
std::string StatusDescription(ViSession Session, ViStatus Status)
Return user-readable description of the given status code.
Definition: VISAInstrument.cpp:40
MTL::Instrument::eTriggerProtocol
eTriggerProtocol
Definition: VISAInstrumentTypes.h:114
MTL::Instrument::tInterfaceNumber
ViUInt16 tInterfaceNumber
Definition: VISAInstrumentTypes.h:67
MTL::Instrument::CVISAInstrument::m_Status
ViStatus m_Status
Definition: VISAInstrument.h:67
VISAInstrumentTypes.h
C++ wrapper for NI-VISA: type definitions.
MTL::Instrument::CVISAInstrument::m_InstrSession
ViSession m_InstrSession
Definition: VISAInstrument.h:66
MTL::Instrument::tResourceName
std::string tResourceName
Definition: VISAInstrumentTypes.h:21
MTL::Instrument::CVISABuffer
Definition: VISAInstrumentBuffer.h:37
MTL::Instrument::eOpenAccessMode
eOpenAccessMode
Definition: VISAInstrumentTypes.h:79
VISAInstrumentBuffer.h
MTL::Instrument::CVISAInstrument
VISA instrument class.
Definition: VISAInstrument.h:60
MTL::Synchronization::CRecursiveMutex
std::recursive_mutex CRecursiveMutex
Recursive Mutex.
Definition: Synchronization.h:20
MTL::Instrument::CVISAResourceManager
VISA Resource Manager class.
Definition: VISAInstrument.h:35
MTL::Instrument::CParsedResourceList
Definition: VISAInstrumentTypes.h:253