THM1176InstrumentDriver 1.1
C++ API for Metrolab THM1176
Loading...
Searching...
No Matches
USBTMCInstrument.h
Go to the documentation of this file.
1// Copyright (c) 2020 Metrolab Technology S.A., Geneva, Switzerland (www.metrolab.com)
2// See the included file LICENSE.txt for the licensing conditions.
3
8
9#pragma once
10
11// Personal includes
12#include <vector>
13#include <list>
14#include <string>
15#include <queue>
16
17#include "libusb.h"
18#include "IEEE488Instrument.h"
20#include "Synchronization.h"
21#include "Exception.h"
22
23using namespace MTL::Synchronization;
24
25namespace MTL {
26 namespace Instrument {
27
28 //----------------------------------------------------------------------//
31 {
32 friend class CUSBTMCInstrument;
33
34 private:
35 typedef struct CUSBTMCDeviceListEntry
36 {
37 tResourceName ResourceName;
38 libusb_device * pDevice;
39 std::vector<U8> PortPath;
40 bool PluggedIn;
41
42 void clear(void)
43 {
44 ResourceName.clear();
45 pDevice = nullptr;
46 PortPath.clear();
47 PluggedIn = false;
48 }
49 } tUSBTMCDeviceListEntry;
50
51 typedef std::list<tUSBTMCDeviceListEntry>
52 tUSBTMCDeviceList;
53
54 private:
55 libusb_context * m_pContext;
56 tUSBTMCDeviceList m_DeviceList;
57
58 private:
59 bool GetDeviceListEntry(const tResourceName ResourceName, libusb_device * & pDevice);
61
62 public:
63 // Constructors / destructors
66
68 virtual ~CUSBTMCResourceManager(void);
69
70 // Initialize the Resource Manager
71 virtual bool Initialize(void);
72
73 // Resource utilities
78 virtual bool FindResources(CResourceList & rList, std::string Filter = "?*");
79
83 virtual std::string StatusDescription (I32 Status);
84
86 virtual bool Timeout(void);
87
88 }; // CUSBTMCResourceManager
89
90 //----------------------------------------------------------------------//
93 {
94 private:
95 typedef CUSBTMCResourceManager::tUSBTMCDeviceListEntry tUSBTMCDeviceListEntry;
96 typedef CUSBTMCResourceManager::tUSBTMCDeviceList tUSBTMCDeviceList;
97 struct InterruptInData
98 {
99 U8 bNotify1;
100 U8 bNotify2;
101 };
102 typedef struct InterruptInData t_InterruptInData;
103
104 private:
105 libusb_device * m_pDevice;
106 libusb_device_handle * m_hDevice;
107 U8 m_ConfigurationNo;
108 U8 m_InterfaceNo;
109 U8 m_InterruptEndpoint;
110 U8 m_BulkInEndpoint;
111 U8 m_BulkOutEndpoint;
112 I32 m_BulkInMaxPacketSize;
113 U8 m_bTag;
114 bool m_ExclusiveLock;
115 bool m_SRQEnable;
116 std::queue<t_InterruptInData> m_SRQQueue;
117
118 private:
119 bool USBTMCWrite(U8 MessageID, const char * pData, const size_t Size, U8 TransferAttributes);
120 bool USBTMCClearBulkIn(U8 bTag);
121 bool USBTMCClearBulkOut(U8 bTag);
123
124 public:
125 // Constructors / destructors
130
132 virtual ~CUSBTMCInstrument(void);
133
134 // Connection
137 virtual bool Open(void);
138
140 virtual void Close(void);
141
143 virtual bool IsOpen(void);
144
145 // Info
149 virtual std::string StatusDescription (I32 Status);
150
152 virtual bool Timeout(void);
153
154 // Write / Read
158 virtual bool Write(const char * Str);
159
163 virtual bool Write(const std::string & rStr);
164
168 virtual bool Write(const CSCPIBuffer & rBuf);
169
174 virtual bool Read(CSCPIBuffer & rBuf, bool Append = false);
175
178 virtual bool Clear(void);
179
183 virtual bool ReadSTB(U16 & rSTB);
184
187 virtual bool AssertTrigger(void);
188
189 // Lock / Unlock
193 virtual bool LockExclusive(U32 Timeout);
194
197 virtual bool Unlock(void);
198
201 virtual bool LockedExclusive(void);
202
205 virtual bool EnableEvent (void);
206
209 virtual bool DisableEvent (void);
210
214 virtual bool WaitOnEvent (U32 Timeout);
215
218 virtual bool DiscardEvents (void);
219
220 }; // CUSBTMCInstrument
221
222}} // namespace MTL::Instrument
Exception handling utilities.
Abstract IEEE488 instrument class: interface definition.
unsigned char U8
Unsigned byte.
Definition OSDefines.h:29
int I32
32-bit signed integer.
Definition OSDefines.h:27
unsigned int U32
32-bit unsigned integer.
Definition OSDefines.h:31
unsigned short U16
16-bit unsigned integer.
Definition OSDefines.h:30
IEEE488.2 / SCPI instrument I/O: Instrument buffer management.
Synchronization primitives.
Exception to be thrown.
Definition Exception.h:17
CIEEE488Instrument(CIEEE488ResourceManager &rRM, tResourceName Rsrc)
Constructor.
CUSBTMCInstrument(CUSBTMCResourceManager &rRM, tResourceName Rsrc)
Constructor.
virtual bool Timeout(void)
Last operation timed out.
virtual bool Read(CSCPIBuffer &rBuf, bool Append=false)
Read from a USBTMC instrument: SCPI buffer class variant.
virtual bool DiscardEvents(void)
Discard service requests.
virtual bool IsOpen(void)
Check whether a session to this instrument is open.
virtual bool LockedExclusive(void)
Check whether session is locked exclusively.
virtual void Close(void)
Close this VXI-11 instrument.
virtual ~CUSBTMCInstrument(void)
Destructor.
virtual bool WaitOnEvent(U32 Timeout)
Wait for a service request.
virtual bool LockExclusive(U32 Timeout)
Obtain an exclusive lock for this session.
virtual bool Unlock(void)
Unlock the session.
virtual bool DisableEvent(void)
Disable service requests.
virtual bool AssertTrigger(void)
Assert a trigger.
virtual bool Clear(void)
Clear the instrument.
virtual bool ReadSTB(U16 &rSTB)
Read status byte.
virtual bool Write(const char *Str)
Write to a USBTMC instrument: C string variant.
virtual std::string StatusDescription(I32 Status)
Return description of status word.
virtual bool EnableEvent(void)
Enable service requests.
virtual bool Open(void)
Open this USBTMC instrument.
USBTMC Resource Manager class.
virtual bool Timeout(void)
Last operation timed out.
virtual std::string StatusDescription(I32 Status)
Return description of status word.
virtual ~CUSBTMCResourceManager(void)
Destructor.
virtual bool FindResources(CResourceList &rList, std::string Filter="?*")
Find USBTMC resources.
virtual bool Initialize(void)
Initialize the Resource Manager.
std::string tResourceName
IEEE488 resource name.
@ Exception
Error condition has occured during an operation.
Definition THM1176.h:73