📄 fl45.c
字号:
ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC FL45AttrMinMaxMin_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC FL45AttrRelativeBase_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC FL45AttrRelativeBase_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC FL45AttrRelativeBase_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC FL45AttrRelativeEnable_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViBoolean value);static ViStatus _VI_FUNC FL45AttrRelativeEnable_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViBoolean *value);static ViStatus _VI_FUNC FL45AttrSecondaryFunction_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 *value);static ViStatus _VI_FUNC FL45AttrSecondaryFunction_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC FL45AttrSecondaryFunction_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC FL45AttrSecondaryAutoRangeValue_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC FL45AttrSecondaryAutoRangeValue_RangeTableCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, IviRangeTablePtr *rangeTablePtr);static ViStatus _VI_FUNC FL45AttrModifiers_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 *value);/***************************************************************************** *------------ User-Callable Functions (Exportable Functions) ---------------* *****************************************************************************//***************************************************************************** * Function: FL45_init * Purpose: VXIplug&play required function. Calls the * FL45_InitWithOptions function. *****************************************************************************/ViStatus _VI_FUNC FL45_init (ViRsrc resourceName, ViBoolean IDQuery, ViBoolean resetDevice, ViSession *newVi){ ViStatus error = VI_SUCCESS; if (newVi == VI_NULL) { Ivi_SetErrorInfo (VI_NULL, VI_FALSE, IVI_ERROR_INVALID_PARAMETER, VI_ERROR_PARAMETER4, "Null address for Instrument Handle"); checkErr( IVI_ERROR_INVALID_PARAMETER); } checkErr( FL45_InitWithOptions (resourceName, IDQuery, resetDevice, "", newVi));Error: return error;}/***************************************************************************** * Function: FL45_InitWithOptions * Purpose: This function creates a new IVI session and calls the * IviInit function. *****************************************************************************/ViStatus _VI_FUNC FL45_InitWithOptions (ViRsrc resourceName, ViBoolean IDQuery, ViBoolean resetDevice, ViString optionString, ViSession *newVi){ ViStatus error = VI_SUCCESS; ViSession vi = VI_NULL; if (newVi == VI_NULL) { Ivi_SetErrorInfo (VI_NULL, VI_FALSE, IVI_ERROR_INVALID_PARAMETER, VI_ERROR_PARAMETER5, "Null address for Instrument Handle"); checkErr( IVI_ERROR_INVALID_PARAMETER); } *newVi = VI_NULL; /* create a new interchangable driver */ checkErr( Ivi_SpecificDriverNew ("FL45", optionString, &vi)); /* init the driver */ checkErr( FL45_IviInit (resourceName, IDQuery, resetDevice, vi)); *newVi = vi; Error: if (error < VI_SUCCESS) Ivi_Dispose (vi); return error;}/***************************************************************************** * Function: FL45_IviInit * Purpose: This function is called by FL45_InitWithOptions * or by an IVI class driver. This function initializes the I/O * interface, optionally resets the device, optionally performs an * ID query, and sends a default setup to the instrument. *****************************************************************************/ViStatus _VI_FUNC FL45_IviInit (ViRsrc resourceName, ViBoolean IDQuery, ViBoolean reset, ViSession vi){ ViStatus error = VI_SUCCESS; ViSession io = VI_NULL; checkErr( Ivi_BuildChannelTable (vi, CHANNEL_LIST, VI_FALSE, VI_NULL)); /* Add attributes */ checkErr( FL45_InitAttributes (vi)); if (!Ivi_Simulating(vi)) { ViSession rmSession = VI_NULL; /* Open instrument session */ checkErr( Ivi_GetAttributeViSession (vi, VI_NULL, IVI_ATTR_VISA_RM_SESSION, 0, &rmSession)); viCheckErr( viOpen (rmSession, resourceName, VI_NULL, VI_NULL, &io)); /* io session owned by driver now */ checkErr( Ivi_SetAttributeViSession (vi, VI_NULL, IVI_ATTR_IO_SESSION, 0, io)); /* Configure VISA Formatted I/O */ viCheckErr( viSetAttribute (io, VI_ATTR_TMO_VALUE, 5000 )); viCheckErr( viSetBuf (io, VI_READ_BUF | VI_WRITE_BUF, 4000)); viCheckErr( viSetAttribute (io, VI_ATTR_WR_BUF_OPER_MODE, VI_FLUSH_ON_ACCESS)); viCheckErr( viSetAttribute (io, VI_ATTR_RD_BUF_OPER_MODE, VI_FLUSH_ON_ACCESS)); } /*- Reset instrument ----------------------------------------------------*/ if (reset) checkErr( FL45_reset (vi)); else /*- Send Default Instrument Setup ---------------------------------*/ checkErr( FL45_DefaultInstrSetup (vi)); /* Identification Query */ if (IDQuery) { ViChar rdBuffer[BUFFER_SIZE]; #define VALID_RESPONSE_STRING_START "FLUKE, 45" checkErr( Ivi_GetAttributeViString (vi, VI_NULL, FL45_ATTR_ID_QUERY_RESPONSE, 0, BUFFER_SIZE, rdBuffer)); if (strncmp (rdBuffer, VALID_RESPONSE_STRING_START, strlen(VALID_RESPONSE_STRING_START)) != 0) { viCheckErr( VI_ERROR_FAIL_ID_QUERY); } } checkErr( FL45_CheckStatus (vi));Error: if (error < VI_SUCCESS) { if (!Ivi_Simulating (vi) && io) viClose (io); } return error;}/***************************************************************************** * Function: FL45_close * Purpose: This function closes the instrument. * * Note: This function must unlock the session before calling * Ivi_Dispose. *****************************************************************************/ViStatus _VI_FUNC FL45_close (ViSession vi){ ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); checkErr( FL45_IviClose (vi));Error: Ivi_UnlockSession (vi, VI_NULL); Ivi_Dispose (vi); return error;}/***************************************************************************** * Function: FL45_IviClose * Purpose: This function performs all of the drivers clean-up operations * except for closing the IVI session. This function is called by * FL45_close or by an IVI class driver. * * Note: This function must close the I/O session and set * IVI_ATTR_IO_SESSION to 0. *****************************************************************************/ViStatus _VI_FUNC FL45_IviClose (ViSession vi){ ViStatus error = VI_SUCCESS; ViSession io = VI_NULL; /* Do not lock here. The caller manages the lock. */ checkErr( Ivi_GetAttributeViSession (vi, VI_NULL, IVI_ATTR_IO_SESSION, 0, &io));Error: Ivi_SetAttributeViSession (vi, VI_NULL, IVI_ATTR_IO_SESSION, 0, VI_NULL); if(io) { viClose (io); } return error; }/***************************************************************************** * Function: FL45_reset * Purpose: This function resets the instrument. *****************************************************************************/ViStatus _VI_FUNC FL45_reset (ViSession vi){ ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); if (!Ivi_Simulating(vi)) /* call only when locked */ { ViSession io = Ivi_IOSession(vi); /* call only when locked */ checkErr( Ivi_SetNeedToCheckStatus (vi, VI_TRUE)); viCheckErr( viPrintf (io, "*RST")); } checkErr( FL45_DefaultInstrSetup (vi)); checkErr( FL45_CheckStatus (vi));Error: Ivi_UnlockSession (vi, VI_NULL); return error;}/***************************************************************************** * Function: FL45_self_test * Purpose: This function executes the instrument self-test and returns the * result. *****************************************************************************/ViStatus _VI_FUNC FL45_self_test (ViSession vi, ViInt16 *testResult, ViChar testMessage[]){ ViStatus error = VI_SUCCESS; ViSession io = VI_NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -