uldaq/examples/utility.h
2018-12-03 13:40:46 -05:00

1248 lines
26 KiB
C

/*
This file contains some of the functions used get the device and
subsystem capabilities. To assist in displaying values from
enumerations, this file contains a group of functions to convert
the enumerated values to strings.
*/
#ifndef UTILITY_H_
#define UTILITY_H_
#include <stdio.h>
#include <unistd.h>
#include <memory.h>
#include "uldaq.h"
/****************************************************************************
* Enum Conversion Functions
****************************************************************************/
void ConvertInputModeToString(AiInputMode inputMode, char* modeStr)
{
switch(inputMode)
{
case(AI_DIFFERENTIAL):
strcpy(modeStr, "AI_DIFFERENTIAL");
break;
case(AI_SINGLE_ENDED):
strcpy(modeStr, "AI_SINGLE_ENDED");
break;
case(AI_PSEUDO_DIFFERENTIAL):
strcpy(modeStr, "AI_PSEUDO_DIFFERENTIAL");
break;
}
}
void ConvertRangeToString(Range range, char* rangeStr)
{
switch(range)
{
case(BIP60VOLTS):
strcpy(rangeStr, "BIP60VOLTS");
break;
case(BIP30VOLTS):
strcpy(rangeStr, "BIP30VOLTS");
break;
case(BIP15VOLTS):
strcpy(rangeStr, "BIP15VOLTS");
break;
case(BIP20VOLTS):
strcpy(rangeStr, "BIP20VOLTS");
break;
case(BIP10VOLTS):
strcpy(rangeStr, "BIP10VOLTS");
break;
case(BIP5VOLTS):
strcpy(rangeStr, "BIP5VOLTS");
break;
case(BIP4VOLTS):
strcpy(rangeStr, "BIP4VOLTS");
break;
case(BIP2PT5VOLTS):
strcpy(rangeStr, "BIP2PT5VOLTS");
break;
case(BIP2VOLTS):
strcpy(rangeStr, "BIP2VOLTS");
break;
case(BIP1PT25VOLTS):
strcpy(rangeStr, "BIP1PT25VOLTS");
break;
case(BIP1VOLTS):
strcpy(rangeStr, "BIP1VOLTS");
break;
case(BIPPT625VOLTS):
strcpy(rangeStr, "BIPPT625VOLTS");
break;
case(BIPPT5VOLTS):
strcpy(rangeStr, "BIPPT5VOLTS");
break;
case(BIPPT25VOLTS):
strcpy(rangeStr, "BIPPT25VOLTS");
break;
case(BIPPT125VOLTS):
strcpy(rangeStr, "BIPPT125VOLTS");
break;
case(BIPPT2VOLTS):
strcpy(rangeStr, "BIPPT2VOLTS");
break;
case(BIPPT1VOLTS):
strcpy(rangeStr, "BIPPT1VOLTS");
break;
case(BIPPT078VOLTS):
strcpy(rangeStr, "BIPPT078VOLTS");
break;
case(BIPPT05VOLTS):
strcpy(rangeStr, "BIPPT05VOLTS");
break;
case(BIPPT01VOLTS):
strcpy(rangeStr, "BIPPT01VOLTS");
break;
case(BIPPT005VOLTS):
strcpy(rangeStr, "BIPPT005VOLTS");
break;
case(UNI60VOLTS):
strcpy(rangeStr, "UNI60VOLTS");
break;
case(UNI30VOLTS):
strcpy(rangeStr, "UNI30VOLTS");
break;
case(UNI15VOLTS):
strcpy(rangeStr, "UNI15VOLTS");
break;
case(UNI20VOLTS):
strcpy(rangeStr, "UNI20VOLTS");
break;
case(UNI10VOLTS):
strcpy(rangeStr, "UNI10VOLTS");
break;
case(UNI5VOLTS):
strcpy(rangeStr, "UNI5VOLTS");
break;
case(UNI4VOLTS):
strcpy(rangeStr, "UNI4VOLTS");
break;
case(UNI2PT5VOLTS):
strcpy(rangeStr, "UNI2PT5VOLTS");
break;
case(UNI2VOLTS):
strcpy(rangeStr, "UNI2VOLTS");
break;
case(UNI1PT25VOLTS):
strcpy(rangeStr, "UNI1PT25VOLTS");
break;
case(UNI1VOLTS):
strcpy(rangeStr, "UNI1VOLTS");
break;
case(UNIPT625VOLTS):
strcpy(rangeStr, "UNIPT625VOLTS");
break;
case(UNIPT5VOLTS):
strcpy(rangeStr, "UNIPT5VOLTS");
break;
case(UNIPT25VOLTS):
strcpy(rangeStr, "UNIPT25VOLTS");
break;
case(UNIPT125VOLTS):
strcpy(rangeStr, "UNIPT125VOLTS");
break;
case(UNIPT2VOLTS):
strcpy(rangeStr, "UNIPT2VOLTS");
break;
case(UNIPT1VOLTS):
strcpy(rangeStr, "UNIPT1VOLTS");
break;
case(UNIPT078VOLTS):
strcpy(rangeStr, "UNIPT078VOLTS");
break;
case(UNIPT05VOLTS):
strcpy(rangeStr, "UNIPT05VOLTS");
break;
case(UNIPT01VOLTS):
strcpy(rangeStr, "UNIPT01VOLTS");
break;
case(UNIPT005VOLTS):
strcpy(rangeStr, "UNIPT005VOLTS");
break;
case(MA0TO20):
strcpy(rangeStr, "MA0TO20");
break;
}
}
void ConvertRangeToMinMax(Range range, double* min, double* max)
{
switch(range)
{
case(BIP60VOLTS):
*min = -60.0;
*max = 60.0;
break;
case(BIP30VOLTS):
*min = -30.0;
*max = 30.0;
break;
case(BIP15VOLTS):
*min = -15.0;
*max = 15.0;
break;
case(BIP20VOLTS):
*min = -20.0;
*max = 20.0;
break;
case(BIP10VOLTS):
*min = -10.0;
*max = 10.0;
break;
case(BIP5VOLTS):
*min = -5.0;
*max = 5.0;
break;
case(BIP4VOLTS):
*min = -4.0;
*max = 4.0;
break;
case(BIP2PT5VOLTS):
*min = -2.5;
*max = 2.5;
break;
case(BIP2VOLTS):
*min = -2.0;
*max = 2.0;
break;
case(BIP1PT25VOLTS):
*min = -1.25;
*max = 1.25;
break;
case(BIP1VOLTS):
*min = -1.0;
*max = 1.0;
break;
case(BIPPT625VOLTS):
*min = -0.625;
*max = 0.625;
break;
case(BIPPT5VOLTS):
*min = -0.5;
*max = 0.5;
break;
case(BIPPT25VOLTS):
*min = -0.25;
*max = 0.25;
break;
case(BIPPT125VOLTS):
*min = -0.125;
*max = 0.125;
break;
case(BIPPT2VOLTS):
*min = -0.2;
*max = 0.2;
break;
case(BIPPT1VOLTS):
*min = -0.1;
*max = 0.1;
break;
case(BIPPT078VOLTS):
*min = -0.078;
*max = 0.078;
break;
case(BIPPT05VOLTS):
*min = -0.05;
*max = 0.05;
break;
case(BIPPT01VOLTS):
*min = -0.01;
*max = 0.01;
break;
case(BIPPT005VOLTS):
*min = -0.005;
*max = 0.005;
break;
case(UNI60VOLTS):
*min = 0.0;
*max = 60.0;
break;
case(UNI30VOLTS):
*min = 0.0;
*max = 30.0;
break;
case(UNI15VOLTS):
*min = 0.0;
*max = 15.0;
break;
case(UNI20VOLTS):
*min = 0.0;
*max = 20.0;
break;
case(UNI10VOLTS):
*min = 0.0;
*max = 10.0;
break;
case(UNI5VOLTS):
*min = 0.0;
*max = 5.0;
break;
case(UNI4VOLTS):
*min = 0.0;
*max = 4.0;
break;
case(UNI2PT5VOLTS):
*min = 0.0;
*max = 2.5;
break;
case(UNI2VOLTS):
*min = 0.0;
*max = 2.0;
break;
case(UNI1PT25VOLTS):
*min = 0.0;
*max = 1.25;
break;
case(UNI1VOLTS):
*min = 0.0;
*max = 1.0;
break;
case(UNIPT625VOLTS):
*min = 0.0;
*max = 0.625;
break;
case(UNIPT5VOLTS):
*min = 0.0;
*max = 0.5;
break;
case(UNIPT25VOLTS):
*min = 0.0;
*max = 0.25;
break;
case(UNIPT125VOLTS):
*min = 0.0;
*max = 0.125;
break;
case(UNIPT2VOLTS):
*min = 0.0;
*max = 0.2;
break;
case(UNIPT1VOLTS):
*min = 0.0;
*max = 0.1;
break;
case(UNIPT078VOLTS):
*min = 0.0;
*max = 0.078;
break;
case(UNIPT05VOLTS):
*min = 0.0;
*max = 0.05;
break;
case(UNIPT01VOLTS):
*min = 0.0;
*max = 0.1;
break;
case(UNIPT005VOLTS):
*min = 0.0;
*max = 0.005;
break;
case(MA0TO20):
*min = 0.0;
*max = 20.0;
break;
}
}
void ConvertTriggerTypeToString(TriggerType triggerType, char* triggerTypeStr)
{
switch(triggerType)
{
case(TRIG_NONE):
strcpy(triggerTypeStr, "TRIG_NONE");
break;
case(TRIG_POS_EDGE):
strcpy(triggerTypeStr, "TRIG_POS_EDGE");
break;
case(TRIG_NEG_EDGE):
strcpy(triggerTypeStr, "TRIG_NEG_EDGE");
break;
case(TRIG_HIGH):
strcpy(triggerTypeStr, "TRIG_HIGH");
break;
case(TRIG_LOW):
strcpy(triggerTypeStr, "TRIG_LOW");
break;
case(GATE_HIGH):
strcpy(triggerTypeStr, "GATE_HIGH");
break;
case(GATE_LOW):
strcpy(triggerTypeStr, "GATE_LOW");
break;
case(TRIG_RISING):
strcpy(triggerTypeStr, "TRIG_RISING");
break;
case(TRIG_FALLING):
strcpy(triggerTypeStr, "TRIG_FALLING");
break;
case(TRIG_ABOVE):
strcpy(triggerTypeStr, "TRIG_ABOVE");
break;
case(TRIG_BELOW):
strcpy(triggerTypeStr, "TRIG_BELOW");
break;
case(GATE_ABOVE):
strcpy(triggerTypeStr, "GATE_ABOVE");
break;
case(GATE_BELOW):
strcpy(triggerTypeStr, "GATE_BELOW");
break;
case(GATE_IN_WINDOW):
strcpy(triggerTypeStr, "GATE_IN_WINDOW");
break;
case(GATE_OUT_WINDOW):
strcpy(triggerTypeStr, "GATE_OUT_WINDOW");
break;
case(TRIG_PATTERN_EQ):
strcpy(triggerTypeStr, "TRIG_PATTERN_EQ");
break;
case(TRIG_PATTERN_NE):
strcpy(triggerTypeStr, "TRIG_PATTERN_NE");
break;
case(TRIG_PATTERN_ABOVE):
strcpy(triggerTypeStr, "TRIG_PATTERN_ABOVE");
break;
case(TRIG_PATTERN_BELOW):
strcpy(triggerTypeStr, "TRIG_PATTERN_BELOW");
break;
}
}
void ConvertPortTypeToString(DigitalPortType portType, char* portTypeStr)
{
switch(portType)
{
case(AUXPORT0):
strcpy(portTypeStr, "AUXPORT0");
break;
case(AUXPORT1):
strcpy(portTypeStr, "AUXPORT1");
break;
case(AUXPORT2):
strcpy(portTypeStr, "AUXPORT2");
break;
case(FIRSTPORTA):
strcpy(portTypeStr, "FIRSTPORTA");
break;
case(FIRSTPORTB):
strcpy(portTypeStr, "FIRSTPORTB");
break;
case(FIRSTPORTCL):
strcpy(portTypeStr, "FIRSTPORTCL");
break;
case(FIRSTPORTCH):
strcpy(portTypeStr, "FIRSTPORTCH");
break;
case(SECONDPORTA):
strcpy(portTypeStr, "SECONDPORTA");
break;
case(SECONDPORTB):
strcpy(portTypeStr, "SECONDPORTBA");
break;
case(SECONDPORTCL):
strcpy(portTypeStr, "SECONDPORTCL");
break;
case(SECONDPORTCH):
strcpy(portTypeStr, "SECONDPORTCH");
break;
case(THIRDPORTA):
strcpy(portTypeStr, "THIRDPORTA");
break;
case(THIRDPORTB):
strcpy(portTypeStr, "THIRDPORTB");
break;
case(THIRDPORTCL):
strcpy(portTypeStr, "THIRDPORTCL");
break;
case(THIRDPORTCH):
strcpy(portTypeStr, "THIRDPORTCH");
break;
case(FOURTHPORTA):
strcpy(portTypeStr, "FOURTHPORTA");
break;
case(FOURTHPORTB):
strcpy(portTypeStr, "FOURTHPORTB");
break;
case(FOURTHPORTCL):
strcpy(portTypeStr, "FOURTHPORTCL");
break;
case(FOURTHPORTCH):
strcpy(portTypeStr, "FOURTHPORTCH");
break;
case(FIFTHPORTA):
strcpy(portTypeStr, "FIFTHPORTA");
break;
case(FIFTHPORTB):
strcpy(portTypeStr, "FIFTHPORTB");
break;
case(FIFTHPORTCL):
strcpy(portTypeStr, "FIFTHPORTCL");
break;
case(FIFTHPORTCH):
strcpy(portTypeStr, "FIFTHPORTCH");
break;
case(SIXTHPORTA):
strcpy(portTypeStr, "SIXTHPORTA");
break;
case(SIXTHPORTB):
strcpy(portTypeStr, "SIXTHPORTB");
break;
case(SIXTHPORTCL):
strcpy(portTypeStr, "SIXTHPORTCL");
break;
case(SIXTHPORTCH):
strcpy(portTypeStr, "SIXTHPORTCH");
break;
case(SEVENTHPORTA):
strcpy(portTypeStr, "SEVENTHPORTA");
break;
case(SEVENTHPORTB):
strcpy(portTypeStr, "SEVENTHPORTB");
break;
case(SEVENTHPORTCL):
strcpy(portTypeStr, "SEVENTHPORTCL");
break;
case(SEVENTHPORTCH):
strcpy(portTypeStr, "SEVENTHPORTCH");
break;
case(EIGHTHPORTA):
strcpy(portTypeStr, "EIGHTHPORTA");
break;
case(EIGHTHPORTB):
strcpy(portTypeStr, "EIGHTHPORTB");
break;
case(EIGHTHPORTCL):
strcpy(portTypeStr, "EIGHTHPORTCL");
break;
case(EIGHTHPORTCH):
strcpy(portTypeStr, "EIGHTHPORTCH");
break;
}
}
void ConvertPortIoTypeToString(DigitalPortIoType portIoType, char* portIoTypeStr)
{
switch(portIoType)
{
case(DPIOT_IN):
strcpy(portIoTypeStr, "DPIOT_IN");
break;
case(DPIOT_OUT):
strcpy(portIoTypeStr, "DPIOT_OUT");
break;
case(DPIOT_IO):
strcpy(portIoTypeStr, "DPIOT_IO");
break;
case(DPIOT_BITIO):
strcpy(portIoTypeStr, "DPIOT_BITIO");
break;
case(DPIOT_NONCONFIG):
strcpy(portIoTypeStr, "DPIOT_NONCONFIG");
break;
}
}
void ConvertEventTypesToString(DaqEventType eventType, char* eventTypeStr)
{
switch(eventType)
{
case(DE_NONE):
strcpy(eventTypeStr, "DE_NONE");
break;
case(DE_ON_DATA_AVAILABLE):
strcpy(eventTypeStr, "DE_ON_DATA_AVAILABLE");
break;
case(DE_ON_INPUT_SCAN_ERROR):
strcpy(eventTypeStr, "DE_ON_INPUT_SCAN_ERROR");
break;
case(DE_ON_END_OF_INPUT_SCAN):
strcpy(eventTypeStr, "DE_ON_END_OF_INPUT_SCAN");
break;
case(DE_ON_OUTPUT_SCAN_ERROR):
strcpy(eventTypeStr, "DE_ON_OUTPUT_SCAN_ERROR");
break;
case(DE_ON_END_OF_OUTPUT_SCAN):
strcpy(eventTypeStr, "DE_ON_END_OF_OUTPUT_SCAN");
break;
}
}
void ConvertScanOptionsToString(ScanOption scanOptions, char* scanOptionsStr)
{
strcpy(scanOptionsStr, "");
if (scanOptions == 0)
strcat(scanOptionsStr, "Default");
else {
if (scanOptions & SO_SINGLEIO)
strcat(scanOptionsStr, "SO_SINGLEIO, ");
if (scanOptions & SO_BLOCKIO)
strcat(scanOptionsStr, "SO_BLOCKIO, ");
if (scanOptions & SO_BURSTIO)
strcat(scanOptionsStr, "SO_BURSTIO, ");
if (scanOptions & SO_CONTINUOUS)
strcat(scanOptionsStr, "SO_CONTINUOUS, ");
if (scanOptions & SO_EXTCLOCK)
strcat(scanOptionsStr, "SO_EXTCLOCK, ");
if (scanOptions & SO_EXTTRIGGER)
strcat(scanOptionsStr, "SO_EXTTRIGGER, ");
if (scanOptions & SO_RETRIGGER)
strcat(scanOptionsStr, "SO_RETRIGGER, ");
if (scanOptions & SO_BURSTMODE)
strcat(scanOptionsStr, "SO_BURSTMODE, ");
if (scanOptions & SO_PACEROUT)
strcat(scanOptionsStr, "SO_PACEROUT, ");
*strrchr(scanOptionsStr, ',')= '\0';
}
}
void ConvertDaqIChanTypeToString(DaqInChanType daqiChanType, char* daqiChanTypeStr)
{
switch(daqiChanType)
{
case(DAQI_ANALOG_DIFF):
strcpy(daqiChanTypeStr, "DAQI_ANALOG_DIFF");
break;
case(DAQI_ANALOG_SE):
strcpy(daqiChanTypeStr, "DAQI_ANALOG_SE");
break;
case(DAQI_DIGITAL):
strcpy(daqiChanTypeStr, "DAQI_DIGITAL");
break;
case(DAQI_CTR16):
strcpy(daqiChanTypeStr, "DAQI_CTR16");
break;
case(DAQI_CTR32):
strcpy(daqiChanTypeStr, "DAQI_CTR32");
break;
case(DAQI_CTR48):
strcpy(daqiChanTypeStr, "DAQI_CTR48");
break;
}
}
void ConvertDaqOChanTypeToString(DaqOutChanType daqoChanType, char* daqoChanTypeStr)
{
switch(daqoChanType)
{
case(DAQI_ANALOG_DIFF):
strcpy(daqoChanTypeStr, "DAQO_ANALOG");
break;
case(DAQI_ANALOG_SE):
strcpy(daqoChanTypeStr, "DAQO_DIGITAL");
break;
}
}
void ConvertTCTypeToString(TcType type, char* typeStr)
{
switch(type)
{
case(TC_J):
strcpy(typeStr, "J");
break;
case(TC_K):
strcpy(typeStr, "K");
break;
case(TC_T):
strcpy(typeStr, "T");
break;
case(TC_E):
strcpy(typeStr, "E");
break;
case(TC_R):
strcpy(typeStr, "R");
break;
case(TC_S):
strcpy(typeStr, "S");
break;
case(TC_B):
strcpy(typeStr, "B");
break;
case(TC_N):
strcpy(typeStr, "N");
break;
}
}
void ConvertSensorConnectionTypeToString(SensorConnectionType type, char* typeStr)
{
switch(type)
{
case(SCT_2_WIRE_1):
strcpy(typeStr, "2-wire (1 sensor)");
break;
case(SCT_2_WIRE_2):
strcpy(typeStr, "2-wire (2 sensors)");
break;
case(SCT_3_WIRE):
strcpy(typeStr, "3-wire");
break;
case(SCT_4_WIRE):
strcpy(typeStr, "4-wire");
break;
}
}
/****************************************************************************
* Device Info Functions
****************************************************************************/
UlError getDevInfoHasAi(DaqDeviceHandle daqDeviceHandle, int* hasAi)
{
long long aiSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_AI_DEV, 0, &aiSupported);
*hasAi = (int)aiSupported;
return err;
}
UlError getDevInfoHasAo(DaqDeviceHandle daqDeviceHandle, int* hasAo)
{
long long aoSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_AO_DEV, 0, &aoSupported);
*hasAo = (int)aoSupported;
return err;
}
UlError getDevInfoHasDio(DaqDeviceHandle daqDeviceHandle, int* hasDio)
{
long long dioSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_DIO_DEV, 0, &dioSupported);
*hasDio = (int)dioSupported;
return err;
}
UlError getDevInfoHasCtr(DaqDeviceHandle daqDeviceHandle, int* hasCtr)
{
long long ctrSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_CTR_DEV, 0, &ctrSupported);
*hasCtr = (int)ctrSupported;
return err;
}
UlError getDevInfoHasTmr(DaqDeviceHandle daqDeviceHandle, int* hasTmr)
{
long long tmrSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_TMR_DEV, 0, &tmrSupported);
*hasTmr = (int)tmrSupported;
return err;
}
UlError getDevInfoHasDaqi(DaqDeviceHandle daqDeviceHandle, int* hasDaqi)
{
long long daqiSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_DAQI_DEV, 0, &daqiSupported);
*hasDaqi = (int)daqiSupported;
return err;
}
UlError getDevInfoHasDaqo(DaqDeviceHandle daqDeviceHandle, int* hasDaqo)
{
long long daqoSupported;
UlError err = ERR_NO_ERROR;
err = ulDevGetInfo(daqDeviceHandle, DEV_INFO_HAS_DAQO_DEV, 0, &daqoSupported);
*hasDaqo = (int)daqoSupported;
return err;
}
/****************************************************************************
* Analog Input Info Functions
****************************************************************************/
UlError getAiInfoHasPacer(DaqDeviceHandle daqDeviceHandle, int* hasPacer)
{
long long pacerSupported;
UlError err = ERR_NO_ERROR;
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_HAS_PACER, 0, &pacerSupported);
*hasPacer = (int)pacerSupported;
return err;
}
UlError getAiInfoFirstTriggerType(DaqDeviceHandle daqDeviceHandle, TriggerType* triggerType, char* triggerTypeStr)
{
UlError err = ERR_NO_ERROR;
long long triggerTypes = 0;
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_TRIG_TYPES, 0, &triggerTypes);
if (err == ERR_NO_ERROR && triggerTypes != 0)
{
// use the first available trigger type
long long triggerMask = 1;
while ((triggerTypes & triggerMask) == 0)
triggerMask = triggerMask << 1;
*triggerType = (TriggerType)triggerMask;
ConvertTriggerTypeToString(*triggerType, triggerTypeStr);
}
return err;
}
UlError getAiInfoRanges(DaqDeviceHandle daqDeviceHandle, AiInputMode inputMode, int *numberOfRanges, Range* ranges)
{
UlError err = ERR_NO_ERROR;
int i = 0;
long long numRanges = 0;
long long rng;
if (inputMode == AI_SINGLE_ENDED)
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_NUM_SE_RANGES, 0, &numRanges);
}
else
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_NUM_DIFF_RANGES, 0, &numRanges);
}
for (i=0; i<numRanges; i++)
{
if (inputMode == AI_SINGLE_ENDED)
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_SE_RANGE, i, &rng);
}
else
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_DIFF_RANGE, i, &rng);
}
ranges[i] = (Range)rng;
}
*numberOfRanges = (int)numRanges;
return err;
}
UlError getAiInfoFirstSupportedInputMode(DaqDeviceHandle daqDeviceHandle, int* numberOfChannels, AiInputMode *inputMode, char* inputModeStr)
{
UlError err = ERR_NO_ERROR;
long long numChans;
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_NUM_CHANS_BY_MODE, AI_SINGLE_ENDED, &numChans);
if (numChans > 0)
{
*inputMode = AI_SINGLE_ENDED;
}
else
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_NUM_CHANS_BY_MODE, AI_DIFFERENTIAL, &numChans);
if (numChans > 0)
*inputMode = AI_DIFFERENTIAL;
}
ConvertInputModeToString(*inputMode, inputModeStr);
*numberOfChannels = (int)numChans;
return err;
}
UlError getAiInfoFirstSupportedRange(DaqDeviceHandle daqDeviceHandle, AiInputMode inputMode, Range* range, char* rangeStr)
{
UlError err = ERR_NO_ERROR;
long long rng;
if (inputMode == AI_SINGLE_ENDED)
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_SE_RANGE, 0, &rng);
}
else
{
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_DIFF_RANGE, 0, &rng);
}
*range = (Range)rng;
ConvertRangeToString(*range, rangeStr);
return err;
}
UlError getAiInfoQueueTypes(DaqDeviceHandle daqDeviceHandle, int* queueTypes)
{
UlError err = ERR_NO_ERROR;
long long qTypes;
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_QUEUE_TYPES, 0, &qTypes);
*queueTypes = (int)qTypes;
return err;
}
UlError getAiInfoHasTempChan(DaqDeviceHandle daqDeviceHandle, int* hasTempChan)
{
long long chanTypeMask = 0;
UlError err = ERR_NO_ERROR;
err = ulAIGetInfo(daqDeviceHandle, AI_INFO_CHAN_TYPES, 0, &chanTypeMask);
if(chanTypeMask & (AI_TC | AI_RTD | AI_THERMISTOR | AI_SEMICONDUCTOR))
*hasTempChan = 1;
else
*hasTempChan = 0;
return err;
}
UlError getAiInfoTempChanConfig(DaqDeviceHandle daqDeviceHandle, int chan, char* chanTypeStr, char* sensorStr)
{
UlError err = ERR_NO_ERROR;
long long chanType, cfg;
char typeStr[64] = "";
char cfgStr[64] = "N/A";
err = ulAIGetConfig(daqDeviceHandle, AI_CFG_CHAN_TYPE, chan, &chanType);
if(chanType == AI_TC)
{
strcpy(typeStr, "Thermocouple");
err = ulAIGetConfig(daqDeviceHandle, AI_CFG_CHAN_TC_TYPE, chan, &cfg);
ConvertTCTypeToString((TcType)cfg, cfgStr);
}
else if(chanType == AI_RTD || chanType == AI_THERMISTOR)
{
if(chanType == AI_RTD)
strcpy(typeStr, "RTD");
else
strcpy(typeStr, "Thermistor");
err = ulAIGetConfig(daqDeviceHandle, AI_CFG_CHAN_SENSOR_CONNECTION_TYPE, chan, &cfg);
ConvertSensorConnectionTypeToString((SensorConnectionType) cfg, cfgStr);
}
else if(chanType == AI_SEMICONDUCTOR)
{
strcpy(typeStr, "Semicoductor");
}
else if(chanType == AI_VOLTAGE)
{
strcpy(typeStr, "Voltage");
}
else if(chanType == AI_DISABLED)
strcpy(typeStr, "Disabled");
strcpy(chanTypeStr, typeStr);
strcpy(sensorStr, cfgStr);
return err;
}
/****************************************************************************
* Analog Output Info Functions
****************************************************************************/
UlError getAoInfoHasPacer(DaqDeviceHandle daqDeviceHandle, int* hasPacer)
{
UlError err = ERR_NO_ERROR;
long long pacerSupport;
err = ulAOGetInfo(daqDeviceHandle, AO_INFO_HAS_PACER, 0, &pacerSupport);
*hasPacer = (int)pacerSupport;
return err;
}
UlError getAoInfoFirstSupportedRange(DaqDeviceHandle daqDeviceHandle, Range* range, char* rangeStr)
{
UlError err = ERR_NO_ERROR;
long long rng;
err = ulAOGetInfo(daqDeviceHandle, AO_INFO_RANGE, 0, &rng);
*range = (Range)rng;
ConvertRangeToString(*range, rangeStr);
return err;
}
/****************************************************************************
* Digital I/O Info Functions
****************************************************************************/
UlError getDioInfoHasPacer(DaqDeviceHandle daqDeviceHandle, DigitalDirection direction, int* hasPacer)
{
UlError err = ERR_NO_ERROR;
long long pacerSupport;
err = ulDIOGetInfo(daqDeviceHandle, DIO_INFO_HAS_PACER, direction, &pacerSupport);
*hasPacer = (int)pacerSupport;
return err;
}
UlError getDioInfoFirstSupportedPortType(DaqDeviceHandle daqDeviceHandle, DigitalPortType* portType, char* portTypeStr)
{
UlError err = ERR_NO_ERROR;
long long pType = 0;
err = ulDIOGetInfo(daqDeviceHandle, DIO_INFO_PORT_TYPE, 0, &pType);
*portType = (DigitalPortType)pType;
ConvertPortTypeToString(*portType, portTypeStr);
return err;
}
UlError getDioInfoNumberOfBitsForFirstPort(DaqDeviceHandle daqDeviceHandle, int* bitsPerPort)
{
UlError err = ERR_NO_ERROR;
long long numBits;
err = ulDIOGetInfo(daqDeviceHandle, DIO_INFO_NUM_BITS, 0, &numBits);
*bitsPerPort = (int)numBits;
return err;
}
UlError getDioInfoFirstSupportedPortIoType(DaqDeviceHandle daqDeviceHandle, DigitalPortIoType* portIoType, char* portIoTypeStr)
{
UlError err = ERR_NO_ERROR;
long long ioType;
err = ulDIOGetInfo(daqDeviceHandle, DIO_INFO_PORT_IO_TYPE, 0, &ioType);
*portIoType = (DigitalPortIoType)ioType;
ConvertPortIoTypeToString(*portIoType, portIoTypeStr);
return err;
}
/****************************************************************************
* Counter Info Functions
****************************************************************************/
UlError getCtrInfoNumberOfChannels(DaqDeviceHandle daqDeviceHandle, int* numberOfCtrChannels)
{
UlError err = ERR_NO_ERROR;
long long numChans;
err = ulCtrGetInfo(daqDeviceHandle, CTR_INFO_NUM_CTRS, 0, &numChans);
*numberOfCtrChannels = (int)numChans;
return err;
}
UlError getCtrInfoHasPacer(DaqDeviceHandle daqDeviceHandle, int* hasPacer)
{
UlError err = ERR_NO_ERROR;
long long pacerSupport;
err = ulCtrGetInfo(daqDeviceHandle, CTR_INFO_HAS_PACER, 0, &pacerSupport);
*hasPacer = (int)pacerSupport;
return err;
}
UlError getCtrInfoSupportedEventCounters(DaqDeviceHandle daqDeviceHandle, int* eventCounters, int* numberOfEventCounters)
{
UlError err = ERR_NO_ERROR;
int i = 0;
int numberOfCounters = 0;
long long measurementTypes;
int numEvntCtrs = 0;
// get the number of counter channels
err = getCtrInfoNumberOfChannels(daqDeviceHandle, &numberOfCounters);
// fill a descriptor for each channel
for (i = 0; i < numberOfCounters; i++)
{
err = ulCtrGetInfo(daqDeviceHandle, CTR_INFO_MEASUREMENT_TYPES, i, &measurementTypes);
if (measurementTypes & CMT_COUNT)
{
*eventCounters++ = i;
numEvntCtrs++;
}
}
*numberOfEventCounters = numEvntCtrs;
return err;
}
UlError getCtrInfoSupportedEncoderCounters(DaqDeviceHandle daqDeviceHandle, int* encoders, int* numberOfEncoders)
{
UlError err = ERR_NO_ERROR;
int i = 0;
int numberOfCounters = 0;
long long measurementTypes;
int numEncCtrs = 0;
// get the number of counter channels
err = getCtrInfoNumberOfChannels(daqDeviceHandle, &numberOfCounters);
// fill a descriptor for each channel
for (i = 0; i < numberOfCounters; i++)
{
err = ulCtrGetInfo(daqDeviceHandle, CTR_INFO_MEASUREMENT_TYPES, i, &measurementTypes);
if (measurementTypes & CMT_ENCODER)
{
*encoders++ = i;
numEncCtrs++;
}
}
*numberOfEncoders = numEncCtrs;
return err;
}
UlError getCtrInfoMeasurementTypes(DaqDeviceHandle daqDeviceHandle, long long counterNumber, int* measurementTypes)
{
UlError err = ERR_NO_ERROR;
long long measTypes;
err = ulCtrGetInfo(daqDeviceHandle, CTR_INFO_MEASUREMENT_TYPES, counterNumber, &measTypes);
*measurementTypes = (int)measTypes;
return err;
}
/****************************************************************************
* DAQI Info Functions
****************************************************************************/
UlError getDaqiChannelTypes(DaqDeviceHandle daqDeviceHandle, int* chanTypesMask)
{
UlError err = ERR_NO_ERROR;
long long ctMask;
err = ulDaqIGetInfo(daqDeviceHandle, DAQI_INFO_CHAN_TYPES, 0, &ctMask);
*chanTypesMask = (int)ctMask;
return err;
}
UlError getDaqiInfoFirstTriggerType(DaqDeviceHandle daqDeviceHandle, TriggerType* triggerType, char* triggerTypeStr)
{
UlError err = ERR_NO_ERROR;
long long triggerTypes = 0;
err = ulDaqIGetInfo(daqDeviceHandle, DAQI_INFO_TRIG_TYPES, 0, &triggerTypes);
if (err == ERR_NO_ERROR && triggerTypes != 0)
{
// use the first available trigger type
long long triggerMask = 1;
while ((triggerTypes & triggerMask) == 0)
triggerMask = triggerMask << 1;
*triggerType = (TriggerType)triggerMask;
ConvertTriggerTypeToString(*triggerType, triggerTypeStr);
}
return err;
}
/****************************************************************************
* DAQO Info Functions
****************************************************************************/
UlError getDaqoChannelTypes(DaqDeviceHandle daqDeviceHandle, int* chanTypesMask)
{
UlError err = ERR_NO_ERROR;
long long ctMask;
err = ulDaqOGetInfo(daqDeviceHandle, DAQO_INFO_CHAN_TYPES, 0, &ctMask);
*chanTypesMask = (int)ctMask;
return err;
}
void resetCursor() {printf("\033[1;1H");}
void clearEOL() {printf("\033[2K");}
void cursorUp() {printf("\033[A");}
void flush_stdin(void)
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
int enter_press()
{
int stdin_value = 0;
struct timeval tv;
fd_set fds;
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0
select(STDIN_FILENO+1, &fds, NULL, NULL, &tv);
stdin_value = FD_ISSET(STDIN_FILENO, &fds);
if (stdin_value != 0)
flush_stdin();
return stdin_value;
}
#endif /* UTILITY_H_ */