📄 hp33120a.c
字号:
/***************************************************************************** * Copyright 1998 National Instruments Corporation. All Rights Reserved. * *****************************************************************************//***************************************************************************** * Hewlett Packard 33120A Instrument Driver * LabWindows/CVI 5.0 Instrument Driver * Original Release: 3/16/98 * By: GGB, NI * PH. 1-800-433-3488 Fax * * Modification History: * * 3/16/98 - Instrument Driver Created. * * 7/22/98 - Added calls to Ivi_UnlockSession to hp33120a_EnableOutput * and hp33120a_DisableOutput. * - Modified documentation of hp33120a.fp to reflect correct * value information. * - Corrected behavior of ClearArbWaveform and * HP33120A_ATTR_ARB_SAMPLE_RATE attribute to behave correctly * for simulation mode. *****************************************************************************/#include <string.h>#include <stdio.h> #include <formatio.h>#include <math.h>#include "hp33120a.h"/***************************************************************************** *--------------------- Hidden Attribute Declarations -----------------------* *****************************************************************************/#define HP33120A_ATTR_OPC_TIMEOUT (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 1L) /* ViInt32 */#define HP33120A_ATTR_WFM_STRUCTURE (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 102L) /* ViAddr *//***************************************************************************** *---------------------------- Useful Macros --------------------------------* *****************************************************************************/ /*- Modulation Modes -------------------------*/#define HP33120A_VAL_AM (1L)#define HP33120A_VAL_FM (2L)#define HP33120A_VAL_FSK (3L)#define HP33120A_VAL_BURST (4L)#define HP33120A_VAL_SWEEP (5L) /*- Length of Arbitrary Waveform Names -------*/#define HP33120A_VAL_NAME_LENGTH (9L) /*- I/O buffer size --------------------------*/#define BUFFER_SIZE 512L /*- 488.2 Event Status Register (ESR) Bits ---*/#define IEEE_488_2_QUERY_ERROR_BIT 0x04#define IEEE_488_2_DEVICE_DEPENDENT_ERROR_BIT 0x08#define IEEE_488_2_EXECUTION_ERROR_BIT 0x10#define IEEE_488_2_COMMAND_ERROR_BIT 0x20/* The driver uses this structure in its utility functions for creating and *//* removing arbitray waveforms. */struct wfmNode { ViInt32 wfmSize; ViChar wfmName[HP33120A_VAL_NAME_LENGTH]; };typedef struct wfmNode wfmNode;typedef wfmNode *wfmNodePtr;/***************************************************************************** *-------------- Utility Function Declarations (Non-Exported) ---------------* *****************************************************************************/static ViStatus hp33120a_InitAttributes (ViSession vi);static ViStatus hp33120a_DefaultInstrSetup (ViSession openInstrSession);static ViStatus hp33120a_CheckStatus (ViSession vi);static ViStatus hp33120a_WaitForOPC (ViSession vi, ViInt32 maxTime);static ViStatus hp33120a_VerifyOutputMode (ViSession vi, ViInt32 outputMode);static ViStatus hp33120a_GetEquivalentFrequency (ViSession vi, ViConstString channelName, ViReal64 *frequency, ViReal64 *maxFreq); static ViStatus hp33120a_AnyModulationEnabled (ViSession vi, ViConstString channelName, ViInt32 modType, ViBoolean *modOn);static ViStatus hp33120a_CreateDriverWfmRecord (ViSession vi);static ViStatus hp33120a_VerifyWfmCreatable (ViSession vi, ViInt32 wfmSize, ViReal64 wfmData[]);static ViStatus hp33120a_GetNewWfmInfo (ViSession vi, ViInt32 *wfmHandle, ViChar wfmName[]);static ViStatus hp33120a_GetNewWfmName (ViSession vi, wfmNodePtr wfmRecord, ViInt32 maxWfms, ViInt32 wfmHandle, ViChar wfmName[]);static ViStatus hp33120a_GetNumDefinedWaveforms (ViSession vi, ViInt32 maxNumWfms, ViInt32 *numWfms);static ViStatus hp33120a_UpdateDriverWfmRecord (ViSession vi, ViInt32 newWfmHandle, ViInt32 wfmSize, ViChar wfmName[]);static ViStatus hp33120a_WfmExists (ViSession vi, ViInt32 wfmHandle, ViBoolean *wfmExists);static ViStatus hp33120a_ClearDriverWfmRecord (ViSession vi, ViInt32 wfmHandle);static ViStatus hp33120a_GetWfmNameFromHandleUtil (ViSession vi, ViInt32 wfmHandle, ViInt32 arraySize, ViChar wfmName[]);static ViStatus hp33120a_GetWfmHandleFromNameUtil (ViSession vi, ViConstString wfmName, ViInt32 *wfmHandle);static ViStatus hp33120a_GetWfmSize (ViSession vi, ViInt32 wfmHandle, ViInt32 *wfmSize); /*- File I/O Utility Functions -*/static ViStatus hp33120a_ReadToFile (ViSession vi, ViConstString filename, ViInt32 maxBytesToRead, ViInt32 fileAction, ViInt32 *totalBytesWritten);static ViStatus hp33120a_WriteFromFile (ViSession vi, ViConstString filename, ViInt32 maxBytesToWrite, ViInt32 byteOffset, ViInt32 *totalBytesWritten);/***************************************************************************** *----------------- Callback Declarations (Non-Exported) --------------------* *****************************************************************************/ /*- Global Session Callbacks --------------------------------------------*/ static ViStatus _VI_FUNC hp33120a_CheckStatusCallback (ViSession vi, ViSession io);static ViStatus _VI_FUNC hp33120a_WaitForOPCCallback (ViSession vi, ViSession io); /*- Attribute callbacks -------------------------------------------------*/static ViStatus _VI_FUNC hp33120aAttrDriverRevision_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, const ViConstString cacheValue);static ViStatus _VI_FUNC hp33120aAttrIdQueryResponse_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, const ViConstString cacheValue);static ViStatus _VI_FUNC hp33120aAttrOutputMode_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC hp33120aAttrOutputEnabled_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViBoolean value);static ViStatus _VI_FUNC hp33120aAttrOutputImpedance_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrOutputImpedance_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrFuncWaveform_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC hp33120aAttrFuncWaveform_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 *value);static ViStatus _VI_FUNC hp33120aAttrFuncWaveform_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC hp33120aAttrFuncAmplitude_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncAmplitude_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrFuncAmplitude_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncDCOffset_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncDCOffset_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrFuncDCOffset_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncFrequency_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncFrequency_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrFuncFrequency_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncFrequency_RangeTableCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, IviRangeTablePtr *rangeTablePtr);static ViStatus _VI_FUNC hp33120aAttrFuncDutyCycleHigh_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrFuncDutyCycleHigh_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrFuncDutyCycleHigh_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrArbWaveformHandle_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC hp33120aAttrArbWaveformHandle_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViInt32 *value);static ViStatus _VI_FUNC hp33120aAttrArbWaveformHandle_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViInt32 value);static ViStatus _VI_FUNC hp33120aAttrArbGain_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrArbGain_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrArbGain_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrArbOffset_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrArbOffset_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrArbOffset_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrArbSampleRate_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrArbSampleRate_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC hp33120aAttrArbSampleRate_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC hp33120aAttrAMEnabled_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -