THM1176InstrumentManager  1.0
Qt Object abstraction for Metrolab THM1176
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 
16 #include "libusb.h"
17 #include "IEEE488Instrument.h"
18 #include "SCPIInstrumentBuffer.h"
19 #include "Synchronization.h"
20 #include "Exception.h"
21 
22 using namespace MTL::Synchronization;
23 
24 namespace MTL {
25  namespace Instrument {
26 
27  //----------------------------------------------------------------------//
30  {
31  friend class CUSBTMCInstrument;
32 
33  private:
34  typedef struct
35  {
36  tResourceName ResourceName;
37  libusb_device * pDevice;
38  std::vector<U8> PortPath;
39  bool PluggedIn;
40 
41  void clear(void)
42  {
43  ResourceName.clear();
44  pDevice = nullptr;
45  PortPath.clear();
46  PluggedIn = false;
47  }
48  } tUSBTMCDeviceListEntry;
49 
50  typedef std::list<tUSBTMCDeviceListEntry>
51  tUSBTMCDeviceList;
52 
53  private:
54  libusb_context * m_pContext;
55  tUSBTMCDeviceList m_DeviceList;
56 
57  private:
58  bool GetDeviceListEntry(const tResourceName ResourceName, libusb_device * & pDevice);
59  MTL::CException<CUSBTMCResourceManager> Exception(I32 Status, std::string Location);
60 
61  public:
62  // Constructors / destructors
63  CUSBTMCResourceManager(void);
64  virtual ~CUSBTMCResourceManager(void);
65 
66  // Initialization
67  virtual bool Initialize(void);
68 
69  // Resource utilities
74  virtual bool FindResources(CResourceList & rList, std::string Filter = "?*");
75 
79  virtual std::string StatusDescription (I32 Status);
80 
81  virtual bool Timeout(void);
82 
83  };
84 
85  //----------------------------------------------------------------------//
88  {
89  private:
90  typedef CUSBTMCResourceManager::tUSBTMCDeviceListEntry tUSBTMCDeviceListEntry;
91  typedef CUSBTMCResourceManager::tUSBTMCDeviceList tUSBTMCDeviceList;
92 
93  private:
94  libusb_device * m_pDevice;
95  libusb_device_handle * m_hDevice;
96  U8 m_ConfigurationNo;
97  U8 m_InterfaceNo;
98  U8 m_InterruptEndpoint;
99  U8 m_BulkInEndpoint;
100  U8 m_BulkOutEndpoint;
101  I32 m_BulkInMaxPacketSize;
102  U8 m_bTag;
103  bool m_ExclusiveLock;
104 
105  private:
106  bool USBTMCWrite(U8 MessageID, const char * pData, const size_t Size, U8 TransferAttributes);
107  bool USBTMCClearBulkIn(U8 bTag);
108  bool USBTMCClearBulkOut(U8 bTag);
109  MTL::CException<CUSBTMCInstrument> Exception(I32 Status, std::string Location);
110 
111  public:
112  // Constructors / destructors
117  virtual ~CUSBTMCInstrument(void);
118 
119  // Connection
122  virtual bool Open(void);
123 
124  virtual void Close(void);
125  virtual bool IsOpen(void);
126 
127  // Info
131  virtual std::string StatusDescription (I32 Status);
132 
133  virtual bool Timeout(void);
134 
135  // Write / Read
139  virtual bool Write(const char * Str);
140 
144  virtual bool Write(const std::string & rStr);
145 
149  virtual bool Write(const CSCPIBuffer & rBuf);
150 
155  virtual bool Read(CSCPIBuffer & rBuf, bool Append = false);
156 
157  virtual bool Clear(void);
158 
162  virtual bool ReadSTB(U16 & rSTB);
163 
166  virtual bool AssertTrigger(void);
167 
168  // Lock / Unlock
172  virtual bool LockExclusive(U32 Timeout);
173 
174  virtual bool Unlock(void);
175 
176  virtual bool LockedExclusive(void);
177 
178  };
179 
180 }} // namespace MTL::Instrument
MTL::Instrument::CUSBTMCInstrument
USBTMC instrument class.
Definition: USBTMCInstrument.h:88
Synchronization.h
Synchronization primitives.
MTL::Synchronization
Definition: Synchronization.h:12
MTL::Instrument::CUSBTMCResourceManager
USBTMC Resource Manager class.
Definition: USBTMCInstrument.h:30
IEEE488Instrument.h
Abstract IEEE488 instrument class: interface definition.
MTL
Definition: CTHM1176InstrumentManager.h:179
MTL::Instrument::StatusDescription
std::string StatusDescription(ViSession Session, ViStatus Status)
Return user-readable description of the given status code.
Definition: VISAInstrument.cpp:42
I32
int I32
32-bit signed integer.
Definition: OSDefines.h:28
MTL::Instrument::CIEEE488Instrument
IEEE488 instrument class.
Definition: IEEE488Instrument.h:63
MTL::CException
Exception to be thrown.
Definition: Exception.h:17
MTL::Instrument::CIEEE488ResourceManager
IEEE488 Instrument Resource Manager class.
Definition: IEEE488Instrument.h:23
MTL::Instrument::tResourceName
std::string tResourceName
IEEE488 resource name.
Definition: IEEE488InstrumentTypes.h:22
U8
unsigned char U8
Unsigned byte.
Definition: OSDefines.h:30
U16
unsigned short U16
16-bit unsigned integer.
Definition: OSDefines.h:31
SCPIInstrumentBuffer.h
IEEE488.2 / SCPI instrument I/O: Instrument buffer management.
MTL::Instrument::CSCPIBuffer
Instrument Buffer.
Definition: SCPIInstrumentBuffer.h:44
Exception.h
Exception handling utilities.
U32
unsigned int U32
32-bit unsigned integer.
Definition: OSDefines.h:32