#include <stdio.h>
#include "GenericSimulatedAcquisition.h"
ViStatus _VI_FUNC niScope_GenericSimulatedAcquisition (void)
{
ViStatus error = VI_SUCCESS;
ViChar errorSource[MAX_FUNCTION_NAME_SIZE];
ViChar errorMessage[MAX_ERROR_DESCRIPTION] = " ";
ViSession vi;
ViChar resourceName[MAX_STRING_SIZE];
ViChar channelName[MAX_STRING_SIZE];
ViChar model[MAX_STRING_SIZE];
ViChar type[MAX_STRING_SIZE];
ViChar triggerSource[MAX_STRING_SIZE];
ViChar tempStr[MAX_STRING_SIZE];
ViChar optionString[MAX_STRING_SIZE*2];
ViReal64 verticalRange;
ViInt32 verticalCoupling;
ViReal64 probeAttenuation;
ViReal64 verticalNoise;
ViReal64 inputImpedance;
ViReal64 maxInputFrequency;
ViReal64 minSampleRate;
ViInt32 minRecordLength;
ViBoolean enforceRealTime;
ViInt32 numRecords;
ViReal64 refPos;
ViInt32 triggerType;
ViInt32 triggerSlope;
ViReal64 triggerLevel;
ViInt32 measurement;
ViReal64 verticalOffset = 0.0;
ViReal64 triggerHoldoff = 0.0;
ViReal64 triggerDelay = 0.0;
ViInt32 triggerCoupling = NISCOPE_VAL_DC;
ViReal64 timeout = 5.0;
ViInt32 stop = NISCOPE_VAL_FALSE;
ViInt32 numWaveform;
ViInt32 actualRecordLength;
ViReal64 actualSampleRate;
struct niScope_wfmInfo *wfmInfoPtr = NULL;
ViReal64 *waveformPtr = NULL;
ViReal64 *scalarResultPtr = NULL;
ViReal64 *meanPtr = NULL;
ViReal64 *stdevPtr = NULL;
ViReal64 *minPtr = NULL;
ViReal64 *maxPtr = NULL;
ViInt32 *numInStatsPtr = NULL;
GetResourceNameFromGUI (resourceName, model, type, &verticalNoise);
strcpy (optionString, "Simulate=1,DriverSetup=Noise:");
sprintf (tempStr, "%f", verticalNoise);
strcat (optionString, tempStr);
strcat (optionString, ";Model:");
strcat (optionString, model);
strcat (optionString, ";BoardType:");
strcat (optionString, type);
strcat (optionString, ";");
handleErr (niScope_InitWithOptions (resourceName, NISCOPE_VAL_FALSE, NISCOPE_VAL_FALSE,
optionString, &vi));
while (!stop)
{
GetParametersFromGUI (channelName, &verticalRange, &verticalCoupling,
&probeAttenuation, &inputImpedance, &maxInputFrequency,
&minSampleRate, &minRecordLength, &enforceRealTime, &numRecords, &refPos,
&triggerType, triggerSource, &triggerSlope, &triggerLevel, &measurement);
handleErr (niScope_ConfigureVertical (vi, channelName, verticalRange, verticalOffset,
verticalCoupling, probeAttenuation, NISCOPE_VAL_TRUE));
handleErr (niScope_ConfigureChanCharacteristics (vi, channelName, inputImpedance,
maxInputFrequency));
handleErr (niScope_ConfigureHorizontalTiming (vi, minSampleRate, minRecordLength,
refPos, numRecords, enforceRealTime));
switch (triggerType)
{
case 0: handleErr (niScope_ConfigureTriggerEdge (vi, triggerSource, triggerLevel,
triggerSlope, triggerCoupling,
triggerHoldoff, triggerDelay));
break;
case 1: handleErr (niScope_ConfigureTriggerDigital (vi, triggerSource, triggerSlope,
triggerHoldoff, triggerDelay));
break;
case 2: handleErr (niScope_ConfigureTriggerImmediate (vi));
break;
default:
break;
}
handleErr (niScope_InitiateAcquisition (vi));
handleErr (niScope_ActualNumWfms (vi, channelName, &numWaveform));
handleErr (niScope_ActualRecordLength (vi, &actualRecordLength));
if (wfmInfoPtr)
free (wfmInfoPtr);
wfmInfoPtr = (struct niScope_wfmInfo*) malloc (sizeof (struct niScope_wfmInfo) * numWaveform);
if (waveformPtr)
free (waveformPtr);
waveformPtr = (ViReal64*) malloc (sizeof (ViReal64) * actualRecordLength * numWaveform);
if (scalarResultPtr)
free (scalarResultPtr);
scalarResultPtr = (ViReal64*) malloc (sizeof (ViReal64) * numWaveform);
if (meanPtr)
free (meanPtr);
meanPtr = (ViReal64*) malloc (sizeof (ViReal64) * numWaveform);
if (stdevPtr)
free (stdevPtr);
stdevPtr = (ViReal64*) malloc (sizeof (ViReal64) * numWaveform);
if (minPtr)
free (minPtr);
minPtr = (ViReal64*) malloc (sizeof (ViReal64) * numWaveform);
if (maxPtr)
free (maxPtr);
maxPtr = (ViReal64*) malloc (sizeof (ViReal64) * numWaveform);
if (numInStatsPtr)
free (numInStatsPtr);
numInStatsPtr = (ViInt32*) malloc (sizeof (ViInt32) * numWaveform);
if (waveformPtr == NULL || wfmInfoPtr == NULL || scalarResultPtr == NULL ||
meanPtr == NULL || stdevPtr == NULL || minPtr == NULL || maxPtr == NULL ||
numInStatsPtr == NULL)
handleErr (NISCOPE_ERROR_INSUFFICIENT_MEMORY);
handleErr (niScope_Fetch (vi, channelName, timeout, actualRecordLength,
waveformPtr, wfmInfoPtr));
handleErr (niScope_FetchMeasurementStats (vi, channelName, timeout, measurement,
scalarResultPtr, meanPtr, stdevPtr, minPtr,
maxPtr, numInStatsPtr));
handleErr (niScope_SampleRate (vi, &actualSampleRate));
PlotWfms (numWaveform, waveformPtr, wfmInfoPtr, actualSampleRate, actualRecordLength,
scalarResultPtr, meanPtr, stdevPtr, minPtr, maxPtr, numInStatsPtr);
ProcessEvent ((int*)&stop);
}
Error :
if (wfmInfoPtr)
free (wfmInfoPtr);
if (waveformPtr)
free (waveformPtr);
if (scalarResultPtr)
free (scalarResultPtr);
if (meanPtr)
free (meanPtr);
if (stdevPtr)
free (stdevPtr);
if (minPtr)
free (minPtr);
if (maxPtr)
free (maxPtr);
if (numInStatsPtr)
free (numInStatsPtr);
if (error != VI_SUCCESS)
niScope_errorHandler (vi, error, errorSource, errorMessage);
else
strcpy (errorMessage, "Acquisition successful!");
DisplayErrorMessageInGUI (error, errorMessage);
if (vi)
niScope_close (vi);
return error;
}