📄 gf.c.bak
字号:
- Standard Waveform Generation Group: This group controls function
generators capable of producing standard function waveforms.
Attributes: GF_ATTR_FUNC_WAVEFORM
GF_ATTR_FUNC_AMPLITUDE
GF_ATTR_FUNC_DC_OFFSET
GF_ATTR_FUNC_FREQUENCY
GF_ATTR_FUNC_START_PHASE
GF_ATTR_DUTY_CYCLE_HIGH
Functions: GF_ConfigureStandardWaveform
GF_GenerateStandardWaveform
- Arbitrary Waveform Generation Group: This group controls function
generators capable of producing user-specified arbitrary waveforms.
Attributes: GF_ATTR_ARB_WAVEFORM_HANDLE
GF_ATTR_ARB_WAVEFORM_GAIN
GF_ATTR_ARB_WAVEFORM_OFFSET
GF_ATTR_ARB_SAMPLE_RATE
GF_ATTR_MAX_NUM_WAVEFORMS
GF_ATTR_WAVEFORM_QUANTUM
GF_ATTR_MIN_WAVEFORM_SIZE
GF_ATTR_MAX_WAVEFORM_SIZE
Functions: GF_CreateArbWaveform
GF_ClearArbWaveform
GF_ConfigureArbWaveform
GF_QueryArbWfmCapabilities
GF_ConfigureSampleRate
GF_GenerateArbWaveform
- Arbitrary Sequence Generation Group: This group controls function
generators capable of producing a sequence of arbitrary waveforms.
You must implement the Arbitrary Waveform Generation Group in order
to implement this group.
Attributes : GF_ATTR_ARB_SEQUENCE_HANDLE
GF_ATTR_MAX_NUM_SEQUENCES
GF_ATTR_MIN_SEQUENCE_LENGTH
GF_ATTR_MAX_SEQUENCE_LENGTH
GF_ATTR_MAX_LOOP_COUNT
Functions: GF_CreateArbSequence
GF_ClearArbSequence
GF_ClearArbMemory
GF_ConfigureArbSequence
GF_QueryArbSeqCapabilities
GF_GenerateArbSequence
- Triggered Generation Group: This group controls function generators
capable of generating a signal when they receive a trigger.
Attributes: GF_ATTR_TRIGGER_SOURCE
GF_ATTR_CYCLE_COUNT
Functions: GF_ConfigureTrigger
- Amplitude Modulation Generation Group: This group controls function
generators capable of applying amplitude modulation to an output signal.
Attributes: GF_ATTR_AM_ENABLED
GF_ATTR_AM_SOURCE
GF_ATTR_AM_INTERNAL_WAVEFORM
GF_ATTR_AM_INTERNAL_DEPTH
GF_ATTR_AM_INTERNAL_FREQUENCY
Functions: GF_EnableAM
GF_DisableAM
GF_ConfigureAMInternal
- Frequency Modulation Generation Group: This group controls function
generators capable of applying frequency modulation to an output signal.
Attributes: GF_ATTR_FM_ENABLED
GF_ATTR_FM_SOURCE
GF_ATTR_FM_INTERNAL_WAVEFORM
GF_ATTR_FM_INTERNAL_DEVIATION
GF_ATTR_FM_INTERNAL_FREQUENCY
Functions: GF_EnableFM
GF_DisableFM
GF_ConfigureFMInternal
*============================================================END=Sung=*/
/*****************************************************************************
* GPIB_FG Instrument Driver
* LabWindows/CVI 5.0 Instrument Driver
* Original Release: 02-8-7
* By: ,
* PH. Fax
*
* Modification History:
*
* 02-8-7 - Instrument Driver Created.
*
*****************************************************************************/
#include <string.h>
#include <stdio.h>
#include <formatio.h>
#include <math.h>
#include "GF.h"
/*****************************************************************************
*--------------------- Hidden Attribute Declarations -----------------------*
*****************************************************************************/
#define GF_ATTR_OPC_TIMEOUT (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 1L) /* ViInt32 */
#define GF_ATTR_CONFIGURABLE (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 101L) /* ViBoolean*/
#define GF_ATTR_WFM_STRUCTURE (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 102L) /* ViAddr */
#define GF_ATTR_SEQ_STRUCTURE (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 103L) /* ViAddr */
/*****************************************************************************
*---------------------------- Useful Macros --------------------------------*
*****************************************************************************/
/*- 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
/*- List of channels passed to the Ivi_BuildChannelTable function -------*/
#define CHANNEL_LIST "1"
#define GF_WFM_HANDLE_FROM_INDEX(x) (GF_VAL_FIRST_WAVEFORM_HANDLE + x)
#define GF_WFM_INDEX_FROM_HANDLE(x) (x - GF_VAL_FIRST_WAVEFORM_HANDLE)
#define GF_SEQ_HANDLE_FROM_INDEX(y) (GF_VAL_FIRST_SEQUENCE_HANDLE + y)
#define GF_SEQ_INDEX_FROM_HANDLE(y) (y - GF_VAL_FIRST_SEQUENCE_HANDLE)
/*- Defined values for attribute GF_ATTR_ARB_WAVEFORM_HANDLE----*/
#define GF_VAL_FIRST_WAVEFORM_HANDLE IVIFGEN_VAL_FIRST_WAVEFORM_HANDLE
#define GF_VAL_LAST_WAVEFORM_HANDLE IVIFGEN_VAL_LAST_WAVEFORM_HANDLE
/*- Defined values for attribute GF_ATTR_ARB_SEQUENCE_HANDLE ---*/
#define GF_VAL_FIRST_SEQUENCE_HANDLE IVIFGEN_VAL_FIRST_SEQUENCE_HANDLE
#define GF_VAL_LAST_SEQUENCE_HANDLE IVIFGEN_VAL_LAST_SEQUENCE_HANDLE
/*- Defined value for length of arbitrary waveform and sequence names -*/
#define GF_VAL_NAME_LENGTH (9L)
/*
The driver uses this structure in its utility functions for creating and
removing arbitray waveforms.
*/
typedef struct wfmNode
{
ViInt32 wfmSize;
ViChar wfmName[GF_VAL_NAME_LENGTH];
} wfmNode;
typedef wfmNode *wfmNodePtr;
/*
The driver uses this structure in its utility functions for creating and
removing arbitray sequences.
*/
typedef struct seqNode
{
ViInt32 seqLength;
ViChar seqName[GF_VAL_NAME_LENGTH];
ViInt32 *wfmHandles;
} seqNode;
typedef seqNode *seqNodePtr;
/*****************************************************************************
*-------------- Utility Function Declarations (Non-Exported) ---------------*
*****************************************************************************/
static ViStatus GF_InitAttributes (ViSession vi);
static ViStatus GF_DefaultInstrSetup (ViSession openInstrSession);
static ViStatus GF_CheckStatus (ViSession vi);
static ViStatus GF_WaitForOPC (ViSession vi, ViInt32 maxTime);
static ViStatus GF_VerifyConfigurable (ViSession vi);
static ViStatus GF_VerifyGenerating (ViSession vi);
static ViStatus GF_MarkConfigurable (ViSession vi);
static ViStatus GF_MarkGenerating (ViSession vi);
static ViStatus GF_VerifyOutputMode (ViSession vi, ViInt32 outputMode);
static ViStatus GF_CreateDriverWfmRecord (ViSession vi);
static ViStatus GF_VerifyWfmCreatable (ViSession vi, ViInt32 wfmSize, ViReal64 wfmData[]);
static ViStatus GF_GetNewWfmInfo (ViSession vi, ViInt32 *wfmHandle, ViChar wfmName[]);
static ViStatus GF_GetNumDefinedWaveforms (ViSession vi, ViInt32 *numWfms);
static ViStatus GF_GetNewWfmName (ViSession vi, wfmNodePtr wfmStruct, ViInt32 maxNumWfms, ViInt32 wfmHandle, ViChar wfmName[]);
static ViStatus GF_UpdateDriverWfmRecord (ViSession vi, ViInt32 wfmHandle, ViInt32 wfmSize, ViChar wfmName[]);
static ViStatus GF_WfmExists (ViSession vi, ViInt32 wfmHandle, ViBoolean *wfmExists);
static ViStatus GF_WfmInSeq (ViSession vi, ViInt32 wfmHandle);
static ViStatus GF_GetWfmNameFromHandleUtil (ViSession vi, ViInt32 wfmHandle, ViInt32 arraySize, ViChar wfmName[]);
static ViStatus GF_GetWfmHandleFromNameUtil (ViSession vi, ViConstString wfmName, ViInt32 *wfmHandle);
static ViStatus GF_ClearDriverWfmRecord (ViSession vi, ViInt32 wfmHandle);
static ViStatus GF_CreateDriverSeqRecord (ViSession vi);
static ViStatus GF_VerifySeqCreatable (ViSession vi, ViInt32 seqLength, ViInt32 wfmArray[], ViInt32 loopArray[]);
static ViStatus GF_GetNewSeqInfo (ViSession vi, ViInt32 *wfmHandle, ViChar seqName[]);
static ViStatus GF_GetNumDefinedSequences (ViSession vi, ViInt32 *numSeqs);
static ViStatus GF_GetNewSeqName (ViSession vi, seqNodePtr seqStruct, ViInt32 maxNumSeqs, ViInt32 seqHandle, ViChar seqName[]);
static ViStatus GF_UpdateDriverSeqRecord (ViSession vi, ViInt32 seqHandle, ViInt32 seqLength, ViInt32 wfmHandle[], ViChar seqName[]);
static ViStatus GF_SeqExists (ViSession vi, ViInt32 seqHandle, ViBoolean *seqExists);
static ViStatus GF_GetSeqNameFromHandleUtil (ViSession vi, ViInt32 seqHandle, ViInt32 arraySize, ViChar seqName[]);
static ViStatus GF_GetSeqHandleFromNameUtil (ViSession vi, ViConstString seqName, ViInt32 *seqHandle);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -