File MIES_DAC-Hardware.ipf

HW Low level hardware configuration and querying functions

Naming scheme of the functions is HW_$TYPE_$Suffix where $TYPE is one of ITC or NI.

Error codes for the ITC XOP2

Generic check for NIDAQmx XOP

In case newer functions are required which might not be present in all NIDAQmx XOP versions, check for their existance directly

static const double OLD_IGOR = 10001
static const double UNHANDLED_CPP_EXCEPTION = 10002
static const double SLOT_LOCKED_TO_OTHER_THREAD = 10003
static const double SLOT_EMPTY = 10004
static const double COULDNT_FIND_EMPTY_SLOT = 10005
static const double ITC_DLL_ERROR = 10006
static const double INVALID_DEVICETYPE_NUMERIC = 10007
static const double INVALID_DEVICETYPE_STRING = 10008
static const double DTN_DTS_DISAGREE = 10009
static const double INVALID_CHANNELTYPE_NUMERIC = 10010
static const double INVALID_CHANNELTYPE_STRING = 10011
static const double CHN_CHS_DISAGREE = 10012
static const double MUST_SPECIFY_CHN_OR_CHS = 10013
static const double ITCCONFIGCHANNEL2_BAD_S = 10014
static const double ITCCONFIGCHANNEL2_BAD_M = 10015
static const double ITCCONFIGCHANNEL2_BAD_A = 10016
static const double ITCCONFIGCHANNEL2_BAD_O = 10017
static const double ITCCONFIGCHANNEL2_BAD_U = 10018
static const double NEED_MIN_ROWS = 10019
static const double F_FLAG_REQ_ITC18_18USB_1600 = 10020
static const double D_FLAG_REQUIRES_ITC1600 = 10021
static const double H_FLAG_REQUIRES_ITC1600 = 10022
static const double R_FLAG_REQUIRES_ITC1600 = 10023
static const double THREAD_DEVICE_ID_NOT_SET = 10024

Wrapper functions redirecting to the correct internal implementations depending on #HARDWARE_DAC_TYPES

variable HW_PrepareAcq(variable hardwareType, variable deviceID, variable mode, WaveOrNull data = defaultValue, HW_WAVE_GETTER_PROTOTYPE dataFunc = defaultValue, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable flags = defaultValue, variable offset = defaultValue)

Prepare for data acquisition.

Parameters:
variable HW_SelectDevice(variable hardwareType, variable deviceID, variable flags = defaultValue)

Select a device.

Only used in special cases for ITC hardware as all ITC operations use the /DEV flag nowadays.

Parameters:
Returns:

0 if sucessfull, 1 on error

variable HW_OpenDevice(string deviceToOpen, variable *hardwareType, variable flags = defaultValue)

Open a device.

Parameters:
Returns:

device identifier

variable HW_CloseDevice(variable hardwareType, variable deviceID, variable flags = defaultValue)

Close a device.

Parameters:
variable HW_WriteDAC(variable hardwareType, variable deviceID, variable channel, variable value, variable flags = defaultValue)

Write a value to a DA/AO channel.

Parameters:
variable HW_ReadADC(variable hardwareType, variable deviceID, variable channel, variable flags = defaultValue)

Read a value from an AD/AI channel.

Parameters:
Returns:

value in volts

variable HW_ReadDigital(variable hardwareType, variable deviceID, variable channel, variable line = defaultValue, variable flags = defaultValue)

Read from a digital channel.

Parameters:
  • hardwareType – One of HardwareDACTypeConstants

  • deviceID – device identifier

  • channel – The hardware documentation terms this as port(NI). For the ITC we call that ttlBit. Takes care of special rack handling for the ITC 1600. Range depends on hardware and hardware type.

  • line – bit of TTL line, (only for hardware types which support single TTL writes/read)

  • flags – [optional, default none] One or multiple flags from HardwareInteractionFlags

Returns:

bitmask denoting the state of the channel/line

variable HW_WriteDigital(variable hardwareType, variable deviceID, variable channel, variable value, variable line = defaultValue, variable flags = defaultValue)

Write to a digital channel.

Parameters:
  • hardwareType – One of HardwareDACTypeConstants

  • deviceID – device identifier

  • channel – The hardware documentation terms this as port(NI). For the ITC we call that ttlBit. Takes care of special rack handling for the ITC 1600. Range depends on hardware and hardware type.

  • value – bitmask to write

  • line – bit of TTL line, (only for hardware types which support single TTL writes/read)

  • flags – [optional, default none] One or multiple flags from HardwareInteractionFlags

variable HW_EnableYoking(variable hardwareType, variable deviceID, variable flags = defaultValue)

Enable yoking.

Parameters:
variable HW_DisableYoking(variable hardwareType, variable deviceID, variable flags = defaultValue)

Enable yoking.

Parameters:
variable HW_StopAcq(variable hardwareType, variable deviceID, variable prepareForDAQ = defaultValue, variable zeroDAC = defaultValue, variable flags = defaultValue)

Stop data acquisition.

Parameters:
  • hardwareType – One of HardwareDACTypeConstants

  • deviceID – device identifier

  • prepareForDAQ – immediately prepare for the next data acquisition after stopping it

  • zeroDAC – set all used DA channels to zero

  • flags – [optional, default none] One or multiple flags from HardwareInteractionFlags

variable HW_IsRunning(variable hardwareType, variable deviceID, variable flags = defaultValue)

Determine if data acquisition is currently active.

Parameters:
Returns:

one if running, zero otherwise

wave HW_GetDeviceInfo(variable hardwareType, variable deviceID, variable flags = defaultValue)

Return hardware specific information from the device.

Parameters:
Returns:

free numeric/text wave with information and dimension labels

wave HW_GetDeviceInfoUnregistered(variable hardwareType, string device, variable flags = defaultValue)

Return hardware specific information from the device.

This function does not require the device to be registered compared to HW_GetDeviceInfo().

Parameters:
variable HW_WriteDeviceInfo(variable hardwareType, string device, wave deviceInfo)

Fill the device info wave.

variable HW_StartAcq(variable hardwareType, variable deviceID, variable triggerMode = defaultValue, variable flags = defaultValue, variable repeat = defaultValue)

Start data acquisition.

Parameters:
variable HW_ResetDevice(variable hardwareType, variable deviceID, variable flags = defaultValue)

Reset the device.

Parameters:
variable HW_AssertOnInvalid(variable hardwareType, variable deviceID)

Assert on using an invalid value of hardwareType or deviceID

Parameters:
static variable HW_IsValidHardwareType(variable hardwareType)

Check if the given hardware type is valid.

Invalid here means that the value is out-of-range.

static variable HW_IsValidDeviceID(variable deviceID)

Check if the given device ID is valid.

Invalid here means that the value is out-of-range.

variable HW_RegisterDevice(string mainDevice, variable hardwareType, variable deviceID, string pressureDevice = defaultValue)

Register an opened device in our device map.

Parameters:
  • mainDevice – Name of the DA_EPhys device

  • hardwareType – One of HardwareDACTypeConstants

  • deviceID – device identifier

  • pressureDevice – required for registering pressure control devices

variable HW_DeRegisterDevice(variable hardwareType, variable deviceID, variable flags = defaultValue)

Deregister an opened device in our device map.

Parameters:
string HW_GetMainDeviceName(variable hardwareType, variable deviceID, variable flags = defaultValue)

Return the name of the main device given the deviceID and the hardwareType

Use this function if you want to derive a storage location from the device name.

Parameters:
string HW_GetDeviceName(variable hardwareType, variable deviceID, variable flags = defaultValue)

Return the name of the device given the deviceID and the hardwareType

Prefers the pressure device name if set.

Parameters:
variable HW_GetEffectiveADCWaveLength(string device, variable dataAcqOrTP)

Generic function to retrieve the wave length of ADC channel(s). For ITC this is defined through stopCollectionPoint, for other devices like NI the acquisition wave had the correct size and the value can be retrieved directly from that wave.

See also

DataAcqModes

Parameters:
  • device – device name

  • dataAcqOrTP – data acquisition or tp mode

Returns:

effective size of ADC channel wave (for ITC the actual size is bigger)

variable HW_GetEffectiveDACWaveLength(string device, variable dataAcqOrTP)
variable HW_GetDAFifoPosition(string device, variable dataAcqOrTP)
std::tuple<variable, variable> HW_GetVoltageRange(variable hardwareType, variable channelType, variable isAssociated)

Return the minimum/maximum voltage ranges for the given hardware and channel type.

Parameters:

ITC

string HW_ITC_BuildDeviceString(string deviceType, string deviceNumber)

Build the device string for ITC devices.

There is no corresponding function for other hardware types like NI devices because those do not have a two part device name

string HW_ITC_ListOfOpenDevices()
string HW_ITC_ListDevices()
variable HW_ITC_HandleReturnValues(variable flags, variable ITCError, variable ITCXOPError)
static string HW_ITC_GetXOPErrorMessage(variable errCode)
variable HW_ITC_OpenDevice(variable deviceType, variable deviceNumber, variable flags = defaultValue)
variable HW_ITC_CloseAllDevices(variable flags = defaultValue)
variable HW_ITC_CloseDevice(variable deviceID, variable flags = defaultValue)
variable HW_ITC_SelectDevice(variable deviceID, variable flags = defaultValue)
wave HW_ITC_GetDeviceInfo(variable deviceID, variable flags = defaultValue)
variable HW_ITC_EnableYoking(variable deviceID, variable flags = defaultValue)
variable HW_ITC_DisableYoking(variable deviceID, variable flags = defaultValue)
variable HW_ITC_StopAcq_TS(variable deviceID, variable prepareForDAQ = defaultValue, variable flags = defaultValue)
variable HW_ITC_StopAcq(variable deviceID, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable prepareForDAQ = defaultValue, variable zeroDAC = defaultValue, variable flags = defaultValue)
variable HW_ITC_GetCurrentDevice(variable flags = defaultValue)
static wave HW_ITC_GetFifoPosFromConfig(wave config_t)
variable HW_ITC_ResetFifo_TS(variable deviceID, wave config, variable flags = defaultValue)
variable HW_ITC_ResetFifo(variable deviceID, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable flags = defaultValue)
variable HW_ITC_StartAcq_TS(variable deviceID, variable triggerMode, variable flags = defaultValue)
variable HW_ITC_StartAcq(variable deviceID, variable triggerMode, variable flags = defaultValue)
variable HW_ITC_IsRunning(variable deviceID, variable flags = defaultValue)
wave HW_ITC_GetState(variable deviceID, variable flags = defaultValue)
variable HW_ITC_ReadADC(variable deviceID, variable channel, variable flags = defaultValue)
variable HW_ITC_WriteDAC(variable deviceID, variable channel, variable value, variable flags = defaultValue)
variable HW_ITC_ReadDigital(variable deviceID, variable xopChannel, variable flags = defaultValue)
variable HW_ITC_WriteDigital(variable deviceID, variable xopChannel, variable value, variable flags = defaultValue)
variable HW_ITC_DebugMode_TS(variable state, variable flags = defaultValue)
variable HW_ITC_DebugMode(variable state, variable flags = defaultValue)
variable HW_ITC_PrepareAcq(variable deviceID, variable mode, WaveOrNull data = defaultValue, HW_WAVE_GETTER_PROTOTYPE dataFunc = defaultValue, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable flags = defaultValue, variable offset = defaultValue)
variable HW_ITC_MoreData_TS(variable deviceID, variable ADChannelToMonitor, variable stopCollectionPoint, wave config, variable *fifoPos = defaultValue, variable flags = defaultValue)
variable HW_ITC_MoreData(variable deviceID, variable ADChannelToMonitor = defaultValue, variable stopCollectionPoint = defaultValue, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable *fifoPos = defaultValue, variable flags = defaultValue)
wave HW_ITC_GetVersionInfo(variable flags = defaultValue)
variable HW_ITC_SetLoggingTemplate(string template, variable flags = defaultValue)
wave HW_WAVE_GETTER_PROTOTYPE(string str)
wave HW_ITC_Transpose(wave wv)
wave HW_ITC_TransposeAndToInt(wave wv)

Utility functions not interacting with hardware

variable HW_ITC_CalculateDevChannelOff(string device)

Returns the device channel offset for the given device.

Returns:

16 for ITC1600 and 0 for all other types

variable HW_ITC_GetRackRange(variable rack, variable *first, variable *last)

Return the first and last TTL bits/channels for the given rack

variable HW_ITC_ClipTTLBit(string device, variable ttlBit)

Clip the ttlBit to adapt for differences in notation.

The DA_Ephys panel e.g. labels the first ttlBit of RACK_ONE as 4, but the ITC XOP treats that as 0.

variable HW_ITC_GetRackForTTLBit(string device, variable ttlBit)

Return the rack number for the given ttlBit (the ttlBit is called TTL channel in the DA Ephys panel)

variable HW_ITC_GetITCXOPChannelForRack(string device, variable rack)

Return the ITC XOP channel for the given rack.

Only the ITC1600 has two racks. The channel numbers differ for the different ITC device types.

variable HW_ITC_GetNumberOfRacks(string device)

Get the number of racks for the given device.

  • ITC1600 can have 1 or 2 racks

  • other device types have 1

variable HW_ITC_AssertOnInvalid(string deviceName)

Assert on using an invalid ITC device name.

Parameters:

deviceName – ITC device name

variable HW_ITC_IsValidDeviceName(string deviceName)

Check wether the given ITC device name is valid.

Currently a device name is valid if it is not empty.

NI

variable HW_NI_AssertOnInvalid(string deviceName)

Assert on using an invalid NI device name.

Parameters:

deviceName – NI device name

variable HW_NI_IsValidDeviceName(string deviceName)

Check wether the given NI device name is valid.

Currently a device name is valid if it is not empty.

string HW_NI_AnalogInputToString(variable config)

Return the analog input configuration bits as string.

Parameters:

config – Bit combination of NIAnalogInputConfigs

variable HW_NI_StartAcq(variable deviceID, variable triggerMode, variable flags = defaultValue, variable repeat = defaultValue)
variable HW_NI_PrepareAcq(variable deviceID, variable mode, WaveOrNull data = defaultValue, HW_WAVE_GETTER_PROTOTYPE dataFunc = defaultValue, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable flags = defaultValue, variable offset = defaultValue)
string HW_NI_GetPropertyListOfDevices(string device)
variable HW_NI_PrintPropertiesOfDevices()
variable HW_NI_ReadDigital(string device, variable DIOPort = defaultValue, variable DIOLine = defaultValue, variable flags = defaultValue)
variable HW_NI_WriteDigital(string device, variable value, variable DIOPort = defaultValue, variable DIOLine = defaultValue, variable flags = defaultValue)
variable HW_NI_WriteAnalogSingleAndSlow(string device, variable channel, variable value, variable flags = defaultValue)
variable HW_NI_ReadAnalogSingleAndSlow(string device, variable channel, variable flags = defaultValue)
variable HW_NI_GetAnalogInputConfig(string device, variable channel, variable flags = defaultValue)
string HW_NI_ListDevices(variable flags = defaultValue)
variable HW_NI_StopAcq(variable deviceID, variable zeroDAC = defaultValue, variable flags = defaultValue)
variable HW_NI_StopDAC(variable deviceID, variable flags = defaultValue)
variable HW_NI_StopADC(variable deviceID, variable flags = defaultValue)
variable HW_NI_StopTTL(variable deviceID, variable flags = defaultValue)
variable HW_NI_ZeroDAC(variable deviceID, variable flags = defaultValue)
static variable HW_NI_ResetDevice(string device, variable flags = defaultValue)
static variable HW_NI_CalibrateDevice(string device, variable force = defaultValue, variable flags = defaultValue)
variable HW_NI_IsRunning(string device, variable flags = defaultValue)
variable HW_NI_OpenDevice(string device, variable flags = defaultValue)
variable HW_NI_CloseDevice(variable deviceID, variable flags = defaultValue)
wave HW_NI_GetDeviceInfo(string device, variable flags = defaultValue)
variable HW_NI_ResetTaskIDs(string device)
variable HW_SU_OpenDevice(variable flags = defaultValue)
string HW_SU_ListDevices(variable flags = defaultValue)
variable HW_SU_CloseDevice(variable deviceId, variable flags = defaultValue)
static variable HW_SU_ResetDevice(variable flags = defaultValue)
variable HW_SU_GetDeviceInfo(WaveText deviceInfo)
static variable HW_SU_IsRunning(string device)
variable HW_SU_StopAcq(variable deviceId, variable zeroDAC = defaultValue, variable flags = defaultValue)
variable HW_SU_PrepareAcq(variable deviceId, variable mode, WaveOrNull data = defaultValue, HW_WAVE_GETTER_PROTOTYPE dataFunc = defaultValue, WaveOrNull config = defaultValue, HW_WAVE_GETTER_PROTOTYPE configFunc = defaultValue, variable flags = defaultValue, variable offset = defaultValue)
variable HW_SU_StartAcq(variable deviceId, variable flags = defaultValue)
variable HW_SU_GetADCSamplePosition()
variable HW_SU_ZeroDAC(variable deviceID, variable flags = defaultValue)
variable HW_SU_ReadADC(variable deviceID, variable channel, variable flags = defaultValue)
variable HW_SU_WriteDAC(variable deviceID, variable channel, variable value, variable flags = defaultValue)

Variables

static const double HW_ITC_RUNNING_STATE = 0x10
static const double HW_ITC_MAX_TIMEOUT = 10
static const double HW_ITC_DSP_TIMEOUT = 0x80303001
static const double SUTTER_CHANNELOFFSET_TTL = 3
static const double SUTTER_ACQUISITION_FOREGROUND = 1
static const double SUTTER_ACQUISITION_BACKGROUND = 2