15 #define VI_STATUS_DESC_MAX_LEN 256
17 #define READ_STB_WORKAROUND_POLL_PERIOD_MS 10
18 #define ACTIVATE_READ_STB_WORKAROUND 1
21 #define DEBUG_MTL_VISA_INSTRUMENT 0
22 #define DEBUG_MTL_VISA_INSTRUMENT_ERRORS_ONLY 0
23 #if (defined(_DEBUG) && defined(DEBUG_MTL_VISA_INSTRUMENT) && DEBUG_MTL_VISA_INSTRUMENT)
24 #if (defined(DEBUG_MTL_VISA_INSTRUMENT_ERRORS_ONLY) && DEBUG_MTL_VISA_INSTRUMENT_ERRORS_ONLY)
25 #define MTL_VISA_INSTRUMENT_DEBUG_COUT(__X__)
27 #define MTL_VISA_INSTRUMENT_DEBUG_COUT(__X__) COUT(__X__)
29 #define MTL_VISA_INSTRUMENT_DEBUG_CERR(__X__) CERR(__X__)
31 #define MTL_VISA_INSTRUMENT_DEBUG_COUT(__X__)
32 #define MTL_VISA_INSTRUMENT_DEBUG_CERR(__X__)
48 viStatusDesc(Session, Status, Desc);
49 return std::string(Desc);
51 #if (defined(DEBUG_MTL_VISA_INSTRUMENT) && DEBUG_MTL_VISA_INSTRUMENT)
54 if (VI_SUCCESS != Status)
60 #define l_DebugCheckStatus(__X__, __Y__)
69 : m_DefaultRM(0), m_Status(VI_SUCCESS)
91 m_Status = viOpenDefaultRM(&m_DefaultRM);
92 if (VI_SUCCESS != m_Status)
94 m_DefaultRM =
static_cast<ViSession
>(NULL);
132 ViChar rsrcName[VI_FIND_BUFLEN];
136 ViString l_Filter =
const_cast<ViString
>(Filter.c_str());
137 m_Status = viFindRsrc(m_DefaultRM, l_Filter, &fList, &numInstrs, rsrcName);
138 if (VI_SUCCESS != m_Status && VI_ERROR_RSRC_NFOUND != m_Status)
141 while (numInstrs-- && m_Status == VI_SUCCESS)
144 m_Status = viFindNext(fList, rsrcName);
145 if (VI_SUCCESS != m_Status && VI_ERROR_RSRC_NFOUND != m_Status)
149 catch (ViStatus & rS)
153 case VI_ERROR_INV_OBJECT:
154 case VI_ERROR_NSUP_OPER:
155 case VI_ERROR_INV_EXPR:
162 case VI_ERROR_RSRC_NFOUND:
182 ViChar rsrcName[VI_FIND_BUFLEN];
186 ViString l_Filter =
const_cast<ViString
>(Filter.c_str());
187 m_Status = viFindRsrc(m_DefaultRM, l_Filter, &fList, &numInstrs, rsrcName);
188 if (VI_SUCCESS != m_Status && VI_ERROR_RSRC_NFOUND != m_Status)
191 while (numInstrs-- && m_Status == VI_SUCCESS)
193 ViUInt16 l_Type, l_Number;
194 ViChar l_Class[100], l_ExpName[100], l_Alias[100];
195 m_Status = viParseRsrcEx(m_DefaultRM,
static_cast<ViRsrc
>(rsrcName), &l_Type, &l_Number, l_Class, l_ExpName, l_Alias);
196 if (VI_SUCCESS == m_Status)
206 m_Status = viFindNext(fList, rsrcName);
207 if (VI_SUCCESS != m_Status && VI_ERROR_RSRC_NFOUND != m_Status)
210 else if (VI_ERROR_RSRC_NFOUND != m_Status)
214 catch (ViStatus & rS)
224 case VI_ERROR_RSRC_NFOUND:
241 ViUInt16 l_Type, l_Number;
242 m_Status = viParseRsrc(m_DefaultRM,
const_cast<ViRsrc
>(rRsrc.c_str()), &l_Type, &l_Number);
243 if (VI_SUCCESS != m_Status)
250 catch (ViStatus & rS)
257 case VI_ERROR_INV_OBJECT:
258 case VI_ERROR_NSUP_OPER:
259 case VI_ERROR_INV_RSRC_NAME:
260 case VI_ERROR_RSRC_NFOUND:
262 case VI_ERROR_LIBRARY_NFOUND:
263 case VI_ERROR_INTF_NUM_NCONFIG:
281 ViUInt16 l_Type, l_Number;
282 ViChar l_Class[100], l_ExpName[100], l_Alias[100];
283 m_Status = viParseRsrcEx(m_DefaultRM,
const_cast<ViRsrc
>(rRsrc.c_str()), &l_Type, &l_Number, l_Class, l_ExpName, l_Alias);
284 if (VI_SUCCESS != m_Status)
293 catch (ViStatus & rS)
298 case VI_WARN_EXT_FUNC_NIMPL:
301 case VI_ERROR_INV_OBJECT:
302 case VI_ERROR_NSUP_OPER:
303 case VI_ERROR_INV_RSRC_NAME:
304 case VI_ERROR_RSRC_NFOUND:
306 case VI_ERROR_LIBRARY_NFOUND:
307 case VI_ERROR_INTF_NUM_NCONFIG:
323 : m_rRrsrcMan(rRM), m_Rsrc(Rsrc), m_InstrSession(NULL), m_Status(VI_SUCCESS)
348 catch (ViStatus & rS)
397 return Write(
reinterpret_cast<ViBuf
>(
const_cast<char *
>(Str)),
static_cast<ViUInt32
>(std::strlen(Str)));
403 return Write(
reinterpret_cast<ViBuf
>(
const_cast<char *
>(rStr.c_str())),
static_cast<ViUInt32
>(rStr.length()));
409 return Write(
reinterpret_cast<ViBuf
>(
const_cast<char *
>(rBuf.
data())),
static_cast<ViUInt32
>(rBuf.
size()));
422 catch (ViStatus & rS)
428 return (
m_Status == VI_SUCCESS && BuffLen == retCount);
438 l_Ret =
Read(
reinterpret_cast<ViPBuf
>(rBuf.
data()),
static_cast<ViUInt32
>(rBuf.
capacity()), l_RetLen);
443 l_Ret =
Read(
reinterpret_cast<ViPBuf
>(rBuf.
data() + rBuf.
size()),
static_cast<ViUInt32
>(rBuf.
capacity() - rBuf.
size()), l_RetLen);
457 case VI_SUCCESS_TERM_CHAR:
458 case VI_SUCCESS_MAX_CNT:
491 #if (defined(ACTIVATE_READ_STB_WORKAROUND) && ACTIVATE_READ_STB_WORKAROUND)
500 ViUInt32 l_CurrentTimeout;
502 if (
m_Status != VI_SUCCESS)
throw false;
505 if (
m_Status != VI_SUCCESS)
throw false;
507 bool l_ReadSTBSuccess =
false;
508 for (
unsigned char l_NbRetries = 5; l_NbRetries > 0 && !l_ReadSTBSuccess; l_NbRetries--)
515 l_ReadSTBSuccess =
true;
518 case VI_ERROR_INV_PROT:
531 if (
m_Status != VI_SUCCESS || !l_ReadSTBSuccess)
throw false;
566 case VI_SUCCESS_NESTED_EXCLUSIVE:
567 case VI_SUCCESS_NESTED_SHARED:
583 case VI_SUCCESS_NESTED_EXCLUSIVE:
584 case VI_SUCCESS_NESTED_SHARED:
600 case VI_SUCCESS_NESTED_EXCLUSIVE:
601 case VI_SUCCESS_NESTED_SHARED:
602 case VI_ERROR_SESN_NLOCKED:
617 m_Status = viEnableEvent(
m_InstrSession,
static_cast<ViEventType
>(Type),
static_cast<ViUInt16
>(Mechanism), VI_NULL);
621 case VI_SUCCESS_EVENT_EN:
633 m_Status = viDisableEvent(
m_InstrSession,
static_cast<ViEventType
>(Type),
static_cast<ViUInt16
>(Mechanism));
637 case VI_SUCCESS_EVENT_DIS:
653 case VI_SUCCESS_QUEUE_NEMPTY:
669 case VI_SUCCESS_QUEUE_NEMPTY:
681 m_Status = viDiscardEvents(
m_InstrSession,
static_cast<ViEventType
>(Type),
static_cast<ViUInt16
>(Mechanism));
685 case VI_SUCCESS_QUEUE_EMPTY:
705 case VI_ERROR_INV_OBJECT:
706 case VI_ERROR_NSUP_ATTR:
715 bool CVISAInstrument::UsbControlIn(ViInt16 bmRequestType, ViInt16 bRequest, ViUInt16 wValue, ViUInt16 wIndex, ViUInt16 wLength, ViPBuf buf, ViUInt16 & rretCnt)
720 m_Status = viUsbControlIn(
m_InstrSession, bmRequestType, bRequest, wValue, wIndex, wLength, buf, &rretCnt);
725 case VI_ERROR_INV_OBJECT:
726 case VI_ERROR_RSRC_LOCKED:
728 case VI_ERROR_INV_SETUP:
730 case VI_ERROR_CONN_LOST:
731 case VI_ERROR_INV_PARAMETER:
732 case VI_ERROR_INV_MASK:
749 case VI_ERROR_INV_OBJECT:
750 case VI_ERROR_RSRC_LOCKED:
752 case VI_ERROR_INV_SETUP:
754 case VI_ERROR_CONN_LOST:
755 case VI_ERROR_INV_PARAMETER:
756 case VI_ERROR_INV_MASK:
773 if (
m_Status != VI_SUCCESS)
throw false;
777 if (
m_Status != VI_SUCCESS)
throw false;
781 if (
m_Status != VI_SUCCESS)
throw false;
785 if (
m_Status != VI_SUCCESS)
throw false;
789 if (
m_Status != VI_SUCCESS)
throw false;
793 if (
m_Status != VI_SUCCESS)
throw false;
799 if (
m_Status != VI_SUCCESS)
throw false;
803 if (
m_Status != VI_SUCCESS)
throw false;
809 if (
m_Status != VI_SUCCESS)
throw false;