1495 lines
58 KiB
C
1495 lines
58 KiB
C
|
//----------------------------------------------------------------------
|
||
|
//
|
||
|
// ljacklm.h
|
||
|
//
|
||
|
// Header file for ljacklm library.
|
||
|
//
|
||
|
// support@labjack.com
|
||
|
// 10/2013
|
||
|
//
|
||
|
// Revisions:
|
||
|
//
|
||
|
// Version 1.20: Initial release that uses the Exodriver.
|
||
|
// Version 1.20.01 Removed some problematic delays in AIStreamRead.
|
||
|
// Version 1.20.02 Fixed a missing link to the math library in the
|
||
|
// Makefile.
|
||
|
//----------------------------------------------------------------------
|
||
|
//
|
||
|
|
||
|
|
||
|
//Exported Functions:
|
||
|
// AISample
|
||
|
// AIBurst
|
||
|
// AIStreamStart
|
||
|
// AIStreamRead
|
||
|
// AIStreamClear
|
||
|
// AOUpdate
|
||
|
// AsynchConfig
|
||
|
// Asynch
|
||
|
// BitsToVolts
|
||
|
// VoltsToBits
|
||
|
// Counter
|
||
|
// DigitalIO
|
||
|
// EAnalogIn
|
||
|
// EAnalogOut
|
||
|
// ECount
|
||
|
// EDigitalIn
|
||
|
// EDigitalOut
|
||
|
// GetDriverVersion
|
||
|
// GetErrorString
|
||
|
// GetFirmwareVersion
|
||
|
// ListAll
|
||
|
// LocalID
|
||
|
// PulseOut
|
||
|
// PulseOutStart
|
||
|
// PulseOutFinish
|
||
|
// PulseOutCalc
|
||
|
// ReEnum
|
||
|
// Reset
|
||
|
// ResetLJ
|
||
|
// SHT1X
|
||
|
// SHTCRC
|
||
|
// SHTComm
|
||
|
// Synch
|
||
|
// Watchdog
|
||
|
// ReadMem
|
||
|
// WriteMem
|
||
|
//
|
||
|
//Low Level Exported Functions:
|
||
|
// CloseLabJack
|
||
|
// OpenLabJack
|
||
|
// WriteRead
|
||
|
// WriteLabJack
|
||
|
// ReadLabJack
|
||
|
// CloseAll
|
||
|
// BuildAICommand
|
||
|
// ParseAIResponse
|
||
|
// BuildAOCommand
|
||
|
// ParseAOResponse
|
||
|
// RoundFL
|
||
|
// SHTWriteRead
|
||
|
// GetU12Information
|
||
|
// GetTickCount
|
||
|
|
||
|
#ifndef LJACKLM_H_
|
||
|
#define LJACKLM_H_
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"{
|
||
|
#endif
|
||
|
|
||
|
//======================================================================
|
||
|
// EAnalogIn: Easy function reads the voltage from 1 analog input. Calling
|
||
|
// this function turns/leaves the status LED on.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function
|
||
|
// to be called without a LabJack, and does
|
||
|
// little but simulate execution time.
|
||
|
// channel -Channel command is 0-7 for SE or 8-11 for Diff.
|
||
|
// gain -Gain command is 0=1,1=2,...,7=20. Gain only
|
||
|
// available for differential channels.
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *overVoltage -If >0, an overvoltage has been detected
|
||
|
// on the analog input (I32).
|
||
|
// *voltage -Returns the voltage reading (SGL).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long EAnalogIn( long *idnum,
|
||
|
long demo,
|
||
|
long channel,
|
||
|
long gain,
|
||
|
long *overVoltage,
|
||
|
float *voltage);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// EAnalogOut: Easy function sets the voltages of both analog outputs.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function
|
||
|
// to be called without a LabJack, and does little
|
||
|
// but simulate execution time.
|
||
|
// analogOut0 -Voltage from 0 to 5 for AO0 (SGL).
|
||
|
// analogOut1 -Voltage from 0 to 5 for AO1 (SGL).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long EAnalogOut( long *idnum,
|
||
|
long demo,
|
||
|
float analogOut0,
|
||
|
float analogOut1);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// ECount: Easy function to read & reset the counter. Calling this
|
||
|
// function disables STB (which is the default anyway).
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// resetCounter -If >0, the counter is reset to zero after
|
||
|
// being read (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *count -Current count, before reset.
|
||
|
// *ms -Value of the current time, expressed as millisconds
|
||
|
// since the Epoch, during the counter read (within
|
||
|
// a few ms).
|
||
|
///
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long ECount( long *idnum,
|
||
|
long demo,
|
||
|
long resetCounter,
|
||
|
double *count,
|
||
|
double *ms);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// EDigitalIn: Easy function reads 1 digital input. Also configures
|
||
|
// the requested pin to input and leaves it that way.
|
||
|
//
|
||
|
// Note that this is a simplified version of the lower
|
||
|
// level function DigitalIO, which operates on all 20
|
||
|
// digital lines. The DLL keeps track of the current
|
||
|
// direction and output state of all lines, so that this
|
||
|
// easy function can operate on a single line without
|
||
|
// changing the others. When the DLL is first loaded,
|
||
|
// though, it does not know the direction and state of
|
||
|
// the lines and assumes all directions are input and
|
||
|
// output states are low.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// channel -Line to read. 0-3 for IO or 0-15 for D.
|
||
|
// readD -If >0, a D line is read instead of an IO line.
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *state -TRUE/Set if >0. FALSE/Clear if 0.
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long EDigitalIn( long *idnum,
|
||
|
long demo,
|
||
|
long channel,
|
||
|
long readD,
|
||
|
long *state);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// EDigitalOut: Easy function writes 1 digital output. Also configures
|
||
|
// the requested pin to output and leaves it that way.
|
||
|
//
|
||
|
// Note that this is a simplified version of the lower
|
||
|
// level function DigitalIO, which operates on all 20
|
||
|
// digital lines. The DLL keeps track of the current
|
||
|
// direction and output state of all lines, so that this
|
||
|
// easy function can operate on a single line without
|
||
|
// changing the others. When the DLL is first loaded,
|
||
|
// though, it does not know the direction and state of
|
||
|
// the lines and assumes all directions are input and
|
||
|
// output states are low.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// channel -Line to write. 0-3 for IO or 0-15 for D.
|
||
|
// writeD -If >0, a D line is written instead of an IO line.
|
||
|
// state -TRUE/Set if >0. FALSE/Clear if 0.
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long EDigitalOut( long *idnum,
|
||
|
long demo,
|
||
|
long channel,
|
||
|
long writeD,
|
||
|
long state);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AsynchConfig: Requires firmware V1.08 or higher.
|
||
|
//
|
||
|
// This function writes to the asynch registers and sets the
|
||
|
// direction of the D lines (input/output) as needed.
|
||
|
//
|
||
|
// The actual 1-bit time is about 1.833 plus a "full" delay (us).
|
||
|
// The actual 1/2-bit time is about 1.0 plus a "half" delay (us).
|
||
|
//
|
||
|
// full/half delay = 0.833 + 0.833C + 0.667BC + 0.5ABC
|
||
|
//
|
||
|
// Common baud rates (full A,B,C; half A,B,C):
|
||
|
// 1 55,153,232 ; 114,255,34
|
||
|
// 10 63,111,28 ; 34,123,23
|
||
|
// 100 51,191,2 ; 33,97,3
|
||
|
// 300 71,23,4 ; 84,39,1
|
||
|
// 600 183,3,6 ; 236,7,1
|
||
|
// 1000 33,29,2 ; 123,8,1
|
||
|
// 1200 23,17,4 ; 14,54,1
|
||
|
// 2400 21,37,1 ; 44,3,3
|
||
|
// 4800 10,18,2 ; 1,87,1
|
||
|
// 7200 134,2,1 ; 6,9,2
|
||
|
// 9600 200,1,1 ; 48,2,1
|
||
|
// 10000 63,3,1 ; 46,2,1
|
||
|
// 19200 96,1,1 ; 22,2,1
|
||
|
// 38400 3,5,2 ; 9,2,1
|
||
|
// 57600 3,3,2 ; 11,1,1
|
||
|
// 100000 3,3,1 ; 1,2,1
|
||
|
// 115200 9,1,1 ; 2,1,1 or 1,1,1
|
||
|
//
|
||
|
//
|
||
|
// When using data rates over 38.4 kbps, the following conditions
|
||
|
// need to be considered:
|
||
|
// -When reading the first byte, the start bit is first tested
|
||
|
// about 11.5 us after the start of the tx stop bit.
|
||
|
// -When reading bytes after the first, the start bit is first
|
||
|
// tested about "full" + 11 us after the previous bit 8 read,
|
||
|
// which occurs near the middle of bit 8.
|
||
|
//
|
||
|
// When enabled, STB does the following to aid in debugging
|
||
|
// asynchronous reads:
|
||
|
// -STB is set about 6 us after the start of the last tx stop bit, or
|
||
|
// about "full" + 6 us after the previous bit 8 read.
|
||
|
// -STB is cleared about 0-2 us after the rx start bit is detected.
|
||
|
// -STB is set after about "half".
|
||
|
// -STB is cleared after about "full".
|
||
|
// -Bit 0 is read about 1 us later.
|
||
|
// -STB is set about 1 us after the bit 0 read.
|
||
|
// -STB is cleared after about "full".
|
||
|
// -Bit 1 is read about 1 us later.
|
||
|
// -STB is set about 1 us after the bit 1 read.
|
||
|
// -STB is cleared after about "full".
|
||
|
// -This continues for all 8 data bits and the stop bit, after
|
||
|
// which STB remains low.
|
||
|
//
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// timeoutMult -If enabled, read timeout is about 100
|
||
|
// milliseconds times this value (I32, 0-255).
|
||
|
// configA -If >0, D8 is set to output-high and D9 is set to
|
||
|
// input (I32).
|
||
|
// configB -If >0, D10 is set to output-high and D11 is set to
|
||
|
// input (I32).
|
||
|
// configTE -If >0, D12 is set to output-low (I32).
|
||
|
// fullA -A time value for a full bit (I32, 1-255).
|
||
|
// fullB -B time value for a full bit (I32, 1-255).
|
||
|
// fullC -C time value for a full bit (I32, 1-255).
|
||
|
// halfA -A time value for a half bit (I32, 1-255).
|
||
|
// halfB -B time value for a half bit (I32, 1-255).
|
||
|
// halfC -C time value for a half bit (I32, 1-255).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 60 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long AsynchConfig( long *idnum,
|
||
|
long demo,
|
||
|
long timeoutMult,
|
||
|
long configA,
|
||
|
long configB,
|
||
|
long configTE,
|
||
|
long fullA,
|
||
|
long fullB,
|
||
|
long fullC,
|
||
|
long halfA,
|
||
|
long halfB,
|
||
|
long halfC);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// Asynch: Requires firmware V1.05 or higher.
|
||
|
//
|
||
|
// This function writes and then reads half-duplex asynchronous
|
||
|
// data on 1 of two pairs of D lines (8,n,1). Call AsynchConfig
|
||
|
// to set the baud rate. Similar to RS232, except that logic is
|
||
|
// normal CMOS/TTL (0=low=GND, 1=high=+5V, idle state of
|
||
|
// transmit line is high). Connection to a normal RS232 device
|
||
|
// will probably require a converter chip such as the MAX233.
|
||
|
//
|
||
|
// PortA => TX is D8 and RX is D9
|
||
|
// PortB => TX is D10 and RX is D11
|
||
|
// Transmit Enable is D12
|
||
|
//
|
||
|
// Up to 18 bytes can be written and read. If more than 4 bytes
|
||
|
// are written or read, this function uses calls to
|
||
|
// WriteMem/ReadMem to load/read the LabJack's data buffer.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// portB -If >0, asynch PortB is used instead of PortA.
|
||
|
// enableTE -If >0, D12 (Transmit Enable) is set high during
|
||
|
// transmit and low during receive (I32).
|
||
|
// enableTO -If >0, timeout is enabled for the receive phase (per byte).
|
||
|
// enableDel -If >0, a 1 bit delay is inserted between each
|
||
|
// transmit byte.
|
||
|
// baudrate -This is the bps as set by AsynchConfig. Asynch needs this
|
||
|
// so it has an idea how long the transfer should take.
|
||
|
// numWrite -Number of bytes to write (I32, 0-18).
|
||
|
// numRead -Number of bytes to read (I32, 0-18).
|
||
|
// *data -Serial data buffer. Send an 18 element
|
||
|
// array. Fill unused locations with zeros (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *data -Serial data buffer. Returns any serial read
|
||
|
// data. Unused locations are filled
|
||
|
// with 9999s. (I32).
|
||
|
//
|
||
|
// Time: 20 ms to read & write up to 4 bytes, plus 40 ms for each
|
||
|
// additional 4 bytes to read or write. Possibly extra
|
||
|
// time for slow baud rates.
|
||
|
//----------------------------------------------------------------------
|
||
|
long Asynch( long *idnum,
|
||
|
long demo,
|
||
|
long portB,
|
||
|
long enableTE,
|
||
|
long enableTO,
|
||
|
long enableDel,
|
||
|
long baudrate,
|
||
|
long numWrite,
|
||
|
long numRead,
|
||
|
long *data);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AISample: Reads the voltages from 1,2, or 4 analog inputs. Also
|
||
|
// controls/reads the 4 IO ports.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function
|
||
|
// to be called without a LabJack, and does
|
||
|
// little but simulate execution time.
|
||
|
// *stateIO -Output states for IO0-IO3 (I32).
|
||
|
// updateIO -If >0, state values will be written. Otherwise,
|
||
|
// just a read is performed (I32).
|
||
|
// ledOn -If >0, the LabJack LED is turned on (I32).
|
||
|
// numChannels -Number of channels. 1, 2, or 4 (I32).
|
||
|
// *channels -Pointer to an array of channel commands with
|
||
|
// at least numChannels elements (I32). Each
|
||
|
// channel command is 0-7 for SE or 8-11 for Diff.
|
||
|
// *gains -Pointer to an array of gain commands with at
|
||
|
// least numChannels elements (I32). Gain commands
|
||
|
// are 0=1,1=2,...,7=20. Gain only available for
|
||
|
// differential channels.
|
||
|
// disableCal -If >0, voltages returned will be raw readings
|
||
|
// that are not corrected using calibration
|
||
|
// constants (I32).
|
||
|
// *voltages -Voltage readings buffer. Send a 4 element
|
||
|
// array of zeros (SGL).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *stateIO -Returns input states for IO0-IO3 (I32).
|
||
|
// *overVoltage -If >0, an overvoltage has been detected
|
||
|
// on one of the analog inputs (I32).
|
||
|
// *voltages -Returns numChannels voltage readings (SGL).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long AISample( long *idnum,
|
||
|
long demo,
|
||
|
long *stateIO,
|
||
|
long updateIO,
|
||
|
long ledOn,
|
||
|
long numChannels,
|
||
|
long *channels,
|
||
|
long *gains,
|
||
|
long disableCal,
|
||
|
long *overVoltage,
|
||
|
float *voltages);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AIBurst: Reads a certain number of scans at a certain scan rate
|
||
|
// from 1,2, or 4 analog inputs. First, data is acquired and
|
||
|
// stored in the LabJacks 4096 sample RAM buffer. Then, the
|
||
|
// data is transferred to the PC application.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function
|
||
|
// to be called without a LabJack, and does little
|
||
|
// but simulate execution time.
|
||
|
// stateIOin -Output states for IO0-IO3 (I32).
|
||
|
// updateIO -If >0, state values will be written. Otherwise,
|
||
|
// just reads are performed (I32).
|
||
|
// ledOn -If >0, the LabJack LED is turned on (I32).
|
||
|
// numChannels -Number of channels. 1, 2, or 4 (I32).
|
||
|
// *channels -Pointer to an array of channel commands with at
|
||
|
// least numChannels elements (I32). Each channel
|
||
|
// command is 0-7 for SE or 8-11 for Diff.
|
||
|
// *gains -Pointer to an array of gain commands with at
|
||
|
// least numChannels elements (I32). Gain
|
||
|
// commands are 0=1,1=2,...,7=20. Gain only
|
||
|
// available for differential channels.
|
||
|
// *scanRate -Scans acquired per second (SGL). A scan is a
|
||
|
// reading from every channel (1,2, or 4). The
|
||
|
// sample rate (scanRate*numChannels) must
|
||
|
// be 400-8192.
|
||
|
// disableCal -If >0, voltages returned will be raw readings
|
||
|
// that are not corrected using calibration
|
||
|
// constants (I32).
|
||
|
// triggerIO -Set the IO port to trigger on. 0=none,
|
||
|
// 1=IO0, or 2=IO1 (I32).
|
||
|
// triggerState -If >0, the acquisition will be triggered
|
||
|
// when the selected IO port reads high (I32).
|
||
|
// numScans -Number of scans which will be collected (I32).
|
||
|
// Minimum is 1. Maximum numSamples is 4096 where
|
||
|
// numSamples is numScans * numChannels.
|
||
|
// timeout -Function timeout value in seconds (I32). Note
|
||
|
// that if timeout is >= 4, the transferMode
|
||
|
// is automatically set to normal.
|
||
|
// *voltages -Voltage readings buffer. Send a 4096 by 4
|
||
|
// element array of zeros (SGL).
|
||
|
// *stateIOout -IO state readings buffer. Send a 4096 element
|
||
|
// array of zeros (I32).
|
||
|
// transferMode -0=auto,1=normal,2=turbo (I32). If auto,
|
||
|
// turbo mode is used unless timeout is >= 4,
|
||
|
// or numScans/scanRate >=4.
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *scanRate -Returns the actual scan rate, which due to
|
||
|
// clock resolution is not always exactly the
|
||
|
// same as the desired scan rate (SGL).
|
||
|
// *voltages -Voltage readings are returned in this 4096 by
|
||
|
// 4 array (SGL). Unused locations are filled
|
||
|
// with 9999s.
|
||
|
// *stateIOout -The states of all 4 IO are returned in this
|
||
|
// array (I32). Unused locations are filled
|
||
|
// with 9999s.
|
||
|
// *overVoltage -If >0, an overvoltage has been detected on
|
||
|
// at least one sample of at least one of the
|
||
|
// analog inputs (I32).
|
||
|
//
|
||
|
// Time: The execution time of this function, in milliseconds, can be
|
||
|
// estimated with the below formulas. The actual number of samples
|
||
|
// collected and transferred by the LabJack is the smallest power
|
||
|
// of 2 from 64 to 4096 which is at least as big as numScans*numChannels.
|
||
|
// This is represented below as numSamplesActual.
|
||
|
// Normal => 30+(1000*numSamplesActual/sampleRate)+(2.5*numSamplesActual)
|
||
|
// Turbo => 30+(1000*numSamplesActual/sampleRate)+(0.4*numSamplesActual)
|
||
|
//----------------------------------------------------------------------
|
||
|
long AIBurst( long *idnum,
|
||
|
long demo,
|
||
|
long stateIOin,
|
||
|
long updateIO,
|
||
|
long ledOn,
|
||
|
long numChannels,
|
||
|
long *channels,
|
||
|
long *gains,
|
||
|
float *scanRate,
|
||
|
long disableCal,
|
||
|
long triggerIO,
|
||
|
long triggerState,
|
||
|
long numScans,
|
||
|
long timeout,
|
||
|
float (*voltages)[4],
|
||
|
long *stateIOout,
|
||
|
long *overVoltage,
|
||
|
long transferMode);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AIStreamStart: Starts a hardware timed continuous acquisition where data
|
||
|
// is sampled and stored in the LabJack RAM buffer, and
|
||
|
// simultaneously transferred out of the RAM buffer to the
|
||
|
// PC application. A call to this function should be
|
||
|
// followed by periodic calls to AIStreamRead, and eventually
|
||
|
// a call to AIStreamClear.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function
|
||
|
// to be called without a LabJack, and does little
|
||
|
// but simulate execution time.
|
||
|
// stateIOin -Output states for IO0-IO3 (I32).
|
||
|
// updateIO -If >0, state values will be written. Otherwise,
|
||
|
// just reads are performed (I32).
|
||
|
// ledOn -If >0, the LabJack LED is turned on (I32).
|
||
|
// numChannels -Number of channels. 1, 2, or 4 (I32). If
|
||
|
// readCount is >0, numChannels should be 4.
|
||
|
// *channels -Pointer to an array of channel commands with at
|
||
|
// least numChannels elements (I32). Each channel
|
||
|
// command is 0-7 for SE or 8-11 for Diff.
|
||
|
// *gains -Pointer to an array of gain commands with at
|
||
|
// least numChannels elements (I32). Gain commands
|
||
|
// are 0=1,1=2,...,7=20. Gain only available for
|
||
|
// differential channels.
|
||
|
// *scanRate -Scans acquired per second (SGL). A scan is a
|
||
|
// reading from every channel (1,2, or 4). The
|
||
|
// sample rate (scanRate*numChannels) must
|
||
|
// be 200-1200.
|
||
|
// disableCal -If >0, voltages returned will be raw readings
|
||
|
// that are not corrected using calibration
|
||
|
// constants (I32).
|
||
|
// reserved1 -Reserved for future use. Send 0 (I32).
|
||
|
// readCount -If >0, the counter read is returned instead of
|
||
|
// the 2nd, 3rd, and 4th channel (I32). 2nd
|
||
|
// channel is bits 0-11, 3rd channel is bits
|
||
|
// 12-23, and 4th channel is bits 24-31.
|
||
|
// Only works with firmware V1.03 or higher.
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *scanRate -Returns the actual scan rate, which due to clock
|
||
|
// resolution is not always exactly the same as the
|
||
|
// desired scan rate (SGL).
|
||
|
//----------------------------------------------------------------------
|
||
|
long AIStreamStart( long *idnum,
|
||
|
long demo,
|
||
|
long stateIOin,
|
||
|
long updateIO,
|
||
|
long ledOn,
|
||
|
long numChannels,
|
||
|
long *channels,
|
||
|
long *gains,
|
||
|
float *scanRate,
|
||
|
long disableCal,
|
||
|
long reserved1,
|
||
|
long readCount);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AIStreamRead: Waits for a specified number of scans to be available and
|
||
|
// reads them. AIStreamStart should be called before this
|
||
|
// function and AIStreamClear should be called when finished.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: localID -Send the local ID from AIStreamStart (I32).
|
||
|
// numScans -Function will wait until this number of scans is
|
||
|
// available (I32). Minimum is 1. Maximum
|
||
|
// numSamples is 4096 where numSamples is
|
||
|
// equal to numScans * numChannels. Internally,
|
||
|
// this function gets data from the LabJack in
|
||
|
// blocks of 64 samples, so it is recommended that
|
||
|
// numSamples be at least 64.
|
||
|
// timeout -Function timeout value in seconds (I32).
|
||
|
// *voltages -Voltage readings buffer. Send a 4096 by 4
|
||
|
// element array of zeros (SGL).
|
||
|
// *stateIOout -IO state readings buffer. Send a 4096 element
|
||
|
// array of zeros (I32).
|
||
|
// Outputs: *voltages -Voltage readings are returned in this 4096 by 4
|
||
|
// array (SGL). Unused locations are filled
|
||
|
// with 9999s.
|
||
|
// *stateIOout -The states of all 4 IO are returned in this
|
||
|
// array (I32). Unused locations are filled
|
||
|
// with 9999s.
|
||
|
// *reserved -Reserved for future use (I32).
|
||
|
// *ljScanBacklog -Returns the scan backlog of the LabJack RAM
|
||
|
// buffer (I32).
|
||
|
// *overVoltage -If >0, an overvoltage has been detected on
|
||
|
// at least one sample of at least one of the
|
||
|
// analog inputs (I32).
|
||
|
//----------------------------------------------------------------------
|
||
|
long AIStreamRead( long localID,
|
||
|
long numScans,
|
||
|
long timeout,
|
||
|
float (*voltages)[4],
|
||
|
long *stateIOout,
|
||
|
long *reserved,
|
||
|
long *ljScanBacklog,
|
||
|
long *overVoltage);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AIStreamClear: This function stops the continuous acquisition. It
|
||
|
// should be called after AIStreamStart and after any
|
||
|
// calls to AIStreamRead.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: localID -Send the local ID from AIStreamStart/Read (I32).
|
||
|
// Outputs: none
|
||
|
//----------------------------------------------------------------------
|
||
|
long AIStreamClear( long localID);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// AOUpdate: Sets the voltages of the analog outputs. Also
|
||
|
// controls/reads the digital IO and counter.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function
|
||
|
// to be called without a LabJack, and does little
|
||
|
// but simulate execution time.
|
||
|
// trisD -Directions for D0-D16. 0=Input, 1=Output (I32).
|
||
|
// trisIO -Directions for IO0-IO3. 0=Input, 1=Output (I32).
|
||
|
// *stateD -Output states for D0-D16 (I32).
|
||
|
// *stateIO -Output states for IO0-IO3 (I32).
|
||
|
// updateDigital -If >0, tris and state values will be written.
|
||
|
// Otherwise, just a read is performed (I32).
|
||
|
// resetCounter -If >0, the counter is reset to zero after
|
||
|
// being read (I32).
|
||
|
// analogOut0 -Voltage from 0 to 5 for AO0 (SGL).
|
||
|
// analogOut1 -Voltage from 0 to 5 for AO1 (SGL).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *stateD -States of D0-D15 (I32).
|
||
|
// *stateIO -States of IO0-IO3 (I32).
|
||
|
// *count -Current count, before reset (U32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long AOUpdate( long *idnum,
|
||
|
long demo,
|
||
|
long trisD,
|
||
|
long trisIO,
|
||
|
long *stateD,
|
||
|
long *stateIO,
|
||
|
long updateDigital,
|
||
|
long resetCounter,
|
||
|
unsigned long *count,
|
||
|
float analogOut0,
|
||
|
float analogOut1);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// BitsToVolts: Converts a 12-bit (0-4095) binary value into a LabJack
|
||
|
// voltage. Volts=((2*Bits*Vmax/4096)-Vmax)/Gain where
|
||
|
// Vmax=10 for SE, 20 for Diff.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: chnum -Channel index. 0-7=SE, 8-11=Diff (I32).
|
||
|
// chgain -Gain index. 0=1,1=2,...,7=20 (I32).
|
||
|
// bits -Binary value from 0-4095 (I32).
|
||
|
// Outputs: *volts -Voltage. SE=+/-10, Diff=+/-20 (SGL).
|
||
|
//----------------------------------------------------------------------
|
||
|
long BitsToVolts( long chnum,
|
||
|
long chgain,
|
||
|
long bits,
|
||
|
float *volts);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
//VoltsToBits: Converts a voltage to it's 12-bit (0-4095) binary
|
||
|
// representation. Bits=(4096*((Volts*Gain)+Vmax))/(2*Vmax)
|
||
|
// where Vmax=10 for SE, 20 for Diff.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: chnum -Channel index. 0-7=SE, 8-11=Diff (I32).
|
||
|
// chgain -Gain index. 0=1,1=2,...,7=20 (I32).
|
||
|
// volts -Voltage. SE=+/-10, Diff=+/-20 (SGL).
|
||
|
// Outputs: *bits -Binary value from 0-4095 (I32).
|
||
|
//----------------------------------------------------------------------
|
||
|
long VoltsToBits( long chnum,
|
||
|
long chgain,
|
||
|
float volts,
|
||
|
long *bits);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// Counter: Controls and reads the counter. The counter is disabled if
|
||
|
// the watchdog timer is enabled.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// resetCounter -If >0, the counter is reset to zero after
|
||
|
// being read (I32).
|
||
|
// enableSTB -If >0, STB is enabled (I32). Only works with
|
||
|
// firmware V1.02 or later.
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *stateD -States of D0-D15 (I32).
|
||
|
// *stateIO -States of IO0-IO3 (I32).
|
||
|
// *count -Current count, before reset (U32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long Counter( long *idnum,
|
||
|
long demo,
|
||
|
long *stateD,
|
||
|
long *stateIO,
|
||
|
long resetCounter,
|
||
|
long enableSTB,
|
||
|
unsigned long *count);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// DigitalIO: Reads and writes to the digital I/O.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// *trisD -Directions for D0-D15. 0=Input, 1=Output (I32).
|
||
|
// trisIO -Directions for IO0-IO3. 0=Input, 1=Output (I32).
|
||
|
// *stateD -Output states for D0-D15 (I32).
|
||
|
// *stateIO -Output states for IO0-IO3 (I32).
|
||
|
// updateDigital -If >0, tris and state values will be written.
|
||
|
// Otherwise, just a read is performed (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *trisD -Returns a read of the direction registers
|
||
|
// for D0-D15 (I32).
|
||
|
// *stateD -States of D0-D15 (I32).
|
||
|
// *stateIO -States of IO0-IO3 (I32).
|
||
|
// *outputD -Returns a read of the output registers
|
||
|
// for D0-D15 (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long DigitalIO( long *idnum,
|
||
|
long demo,
|
||
|
long *trisD,
|
||
|
long trisIO,
|
||
|
long *stateD,
|
||
|
long *stateIO,
|
||
|
long updateDigital,
|
||
|
long *outputD);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
//GetDriverVersion
|
||
|
//
|
||
|
// Returns: Version number of this DLL (SGL).
|
||
|
// Inputs: none
|
||
|
// Outputs: none
|
||
|
//----------------------------------------------------------------------
|
||
|
float GetDriverVersion( void);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
//GetErrorString
|
||
|
//
|
||
|
// Returns: nothing
|
||
|
// Inputs: errorcode -LabJack errorcode (I32)
|
||
|
// *errorString -Must point to an array of at least 50
|
||
|
// chars (I8).
|
||
|
// Outputs: *errorString -A sequence a characters describing the error
|
||
|
// will be copied into the char (I8) array.
|
||
|
//----------------------------------------------------------------------
|
||
|
void GetErrorString( long errorcode,
|
||
|
char *errorString);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
//GetFirmwareVersion: Used to retrieve the firmware version from
|
||
|
// the LabJack's processor.
|
||
|
//
|
||
|
// Returns: Version number of the LabJack firmware or 0 for error (SGL).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32). If error, returns 512 plus
|
||
|
// a normal LabJack errorcode.
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
float GetFirmwareVersion( long *idnum);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// ListAll: Searches the USB for all LabJacks.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *productIDList -Send a 127 element array of zeros (I32).
|
||
|
// *serialnumList -Send a 127 element array of zeros (I32).
|
||
|
// *localIDList -Send a 127 element array of zeros (I32).
|
||
|
// *powerList -Send a 127 element array of zeros (I32).
|
||
|
// *calMatrix -Send a 127 by 20 element array of
|
||
|
// zeros (I32).
|
||
|
// Outputs: *productIDList -Returns the product ID for each LabJack on
|
||
|
// the USB (I32). Unused elements filled
|
||
|
// with 9999s.
|
||
|
// *serialnumList -Returns the serial number for each LabJack
|
||
|
// on the USB (I32). Unused elements filled
|
||
|
// with 9999s.
|
||
|
// *localIDList -Returns the local ID for each LabJack on
|
||
|
// the USB (I32). Unused elements filled
|
||
|
// with 9999s.
|
||
|
// *powerList -Returns the power allowance for each LabJack
|
||
|
// on the USB (I32). Unused elements filled
|
||
|
// with 9999s.
|
||
|
// *calMatrix -Returns the cal constants for each LabJack
|
||
|
// on the USB (I32). Unused elements filled
|
||
|
// with 9999s.
|
||
|
// *numberFound -Number of LabJacks found on the USB (I32).
|
||
|
// *fcddMaxSize -Max size of fcdd (I32).
|
||
|
// *hvcMaxSize -Max size of hvc (I32).
|
||
|
//----------------------------------------------------------------------
|
||
|
long ListAll( long *productIDList,
|
||
|
long *serialnumList,
|
||
|
long *localIDList,
|
||
|
long *powerList,
|
||
|
long (*calMatrix)[20],
|
||
|
long *numberFound,
|
||
|
long *fcddMaxSize,
|
||
|
long *hvcMaxSize);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// LocalID: Change the local ID number of a LabJack. Changes will not take
|
||
|
// effect until the LabJack is re-enumerated.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// localID -New local ID (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long LocalID( long *idnum,
|
||
|
long localID);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// PulseOut: Requires firmware V1.05 or higher.
|
||
|
//
|
||
|
// The timeout of this function, in milliseconds, is set to:
|
||
|
// 5000+numPulses*((B1*C1*0.02)+(B2*C2*0.02))
|
||
|
//
|
||
|
// This command creates pulses on any/all of D0-D7. The
|
||
|
// desired D lines must be set to output using another
|
||
|
// function (DigitalIO or AOUpdate). All selected lines
|
||
|
// are pulsed at the same time, at the same rate, for the
|
||
|
// same number of pulses.
|
||
|
//
|
||
|
// This function commands the time for the first half cycle
|
||
|
// of each pulse, and the second half cycle of each pulse.
|
||
|
// Each time is commanded by sending a value B & C, where
|
||
|
// the time is,
|
||
|
//
|
||
|
// 1st half-cycle microseconds = ~17 + 0.83*C + 20.17*B*C
|
||
|
// 2nd half-cycle microseconds = ~12 + 0.83*C + 20.17*B*C
|
||
|
//
|
||
|
// which can be approximated as,
|
||
|
//
|
||
|
// microseconds = 20*B*C
|
||
|
//
|
||
|
// For best accuracy when using the approximation, minimize C.
|
||
|
// B and C must be between 1 and 255, so each half cycle can
|
||
|
// vary from about 38/33 microseconds to just over 1.3 seconds.
|
||
|
//
|
||
|
// If you have enabled the LabJack Watchdog function, make sure
|
||
|
// it's timeout is longer than the time it takes to output all
|
||
|
// pulses.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// lowFirst -If >0, each line is set low then high, otherwise
|
||
|
// the lines are set high then low (I32).
|
||
|
// bitSelect -Set bits 0 to 7 to enable pulsing on each of
|
||
|
// D0-D7 (I32, 0-255).
|
||
|
// numPulses -Number of pulses for all lines (I32, 1-32767).
|
||
|
// timeB1 -B value for first half cycle (I32, 1-255).
|
||
|
// timeC1 -C value for first half cycle (I32, 1-255).
|
||
|
// timeB2 -B value for second half cycle (I32, 1-255).
|
||
|
// timeC2 -C value for second half cycle (I32, 1-255).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 20 ms plus pulse time (make sure watchdog is longer if active)
|
||
|
//----------------------------------------------------------------------
|
||
|
long PulseOut( long *idnum,
|
||
|
long demo,
|
||
|
long lowFirst,
|
||
|
long bitSelect,
|
||
|
long numPulses,
|
||
|
long timeB1,
|
||
|
long timeC1,
|
||
|
long timeB2,
|
||
|
long timeC2);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// PulseOutStart: Requires firmware V1.07 or higher.
|
||
|
//
|
||
|
// PulseOutStart and PulseOutFinish are used as an
|
||
|
// alternative to PulseOut. PulseOutStart starts the
|
||
|
// pulse output and returns without waiting for the
|
||
|
// finish. PulseOutFinish waits for the LabJack's
|
||
|
// response which signifies the end of the pulse
|
||
|
// output. If anything besides PulseOutFinish is
|
||
|
// called after PulseOutStart, the pulse output
|
||
|
// will be terminated and the LabJack will execute
|
||
|
// the new command.
|
||
|
//
|
||
|
// Note that due to boot-up tests on the LabJack
|
||
|
// U12, if PulseOutStart is the first command sent
|
||
|
// to the LabJack after reset or power-up, there
|
||
|
// would be no response for PulseOutFinish. In
|
||
|
// practice, even if no precautions were taken, this
|
||
|
// would probably never happen, since before calling
|
||
|
// PulseOutStart a call is needed to set the desired
|
||
|
// D lines to output.
|
||
|
//
|
||
|
// Also note that PulseOutFinish must be called before
|
||
|
// the LabJack completes the pulse output to read the
|
||
|
// response. If PulseOutFinish is not called until
|
||
|
// after the LabJack sends it's response, the function
|
||
|
// will never receive the response and will timeout.
|
||
|
//
|
||
|
// This command creates pulses on any/all of D0-D7. The
|
||
|
// desired D lines must be set to output using another
|
||
|
// function (DigitalIO or AOUpdate). All selected lines
|
||
|
// are pulsed at the same time, at the same rate, for the
|
||
|
// same number of pulses.
|
||
|
//
|
||
|
// This function commands the time for the first half cycle
|
||
|
// of each pulse, and the second half cycle of each pulse.
|
||
|
// Each time is commanded by sending a value B & C, where
|
||
|
// the time is,
|
||
|
//
|
||
|
// 1st half-cycle microseconds = ~17 + 0.83*C + 20.17*B*C
|
||
|
// 2nd half-cycle microseconds = ~12 + 0.83*C + 20.17*B*C
|
||
|
//
|
||
|
// which can be approximated as,
|
||
|
//
|
||
|
// microseconds = 20*B*C
|
||
|
//
|
||
|
// For best accuracy when using the approximation, minimize C.
|
||
|
// B and C must be between 1 and 255, so each half cycle can
|
||
|
// vary from about 38/33 microseconds to just over 1.3 seconds.
|
||
|
//
|
||
|
// If you have enabled the LabJack Watchdog function, make sure
|
||
|
// it's timeout is longer than the time it takes to output all
|
||
|
// pulses.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// lowFirst -If >0, each line is set low then high, otherwise
|
||
|
// the lines are set high then low (I32).
|
||
|
// bitSelect -Set bits 0 to 7 to enable pulsing on each of
|
||
|
// D0-D7 (I32, 0-255).
|
||
|
// numPulses -Number of pulses for all lines (I32, 1-32767).
|
||
|
// timeB1 -B value for first half cycle (I32, 1-255).
|
||
|
// timeC1 -C value for first half cycle (I32, 1-255).
|
||
|
// timeB2 -B value for second half cycle (I32, 1-255).
|
||
|
// timeC2 -C value for second half cycle (I32, 1-255).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
//----------------------------------------------------------------------
|
||
|
long PulseOutStart( long *idnum,
|
||
|
long demo,
|
||
|
long lowFirst,
|
||
|
long bitSelect,
|
||
|
long numPulses,
|
||
|
long timeB1,
|
||
|
long timeC1,
|
||
|
long timeB2,
|
||
|
long timeC2);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// PulseOutFinish: Requires firmware V1.07 or higher.
|
||
|
//
|
||
|
// PulseOutStart and PulseOutFinish are used as an
|
||
|
// alternative to PulseOut. PulseOutStart starts the
|
||
|
// pulse output and returns without waiting for the
|
||
|
// finish. PulseOutFinish waits for the LabJack's
|
||
|
// response which signifies the end of the pulse
|
||
|
// output. If anything besides PulseOutFinish is
|
||
|
// called after PulseOutStart, the pulse output
|
||
|
// will be terminated and the LabJack will execute
|
||
|
// the new command.
|
||
|
//
|
||
|
// Note that due to boot-up tests on the LabJack
|
||
|
// U12, if PulseOutStart is the first command sent
|
||
|
// to the LabJack after reset or power-up, there
|
||
|
// would be no response for PulseOutFinish. In
|
||
|
// practice, even if no precautions were taken, this
|
||
|
// would probably never happen, since before calling
|
||
|
// PulseOutStart a call is needed to set the desired
|
||
|
// D lines to output.
|
||
|
//
|
||
|
// Also note that PulseOutFinish must be called before
|
||
|
// the LabJack completes the pulse output to read the
|
||
|
// response. If PulseOutFinish is not called until
|
||
|
// after the LabJack sends it's response, the function
|
||
|
// will never receive the response and will timeout.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// timeoutMS -Amount of time, in milliseconds, that this
|
||
|
// function will wait for the Pulseout response (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
//----------------------------------------------------------------------
|
||
|
long PulseOutFinish( long *idnum,
|
||
|
long demo,
|
||
|
long timeoutMS);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// PulseOutCalc:
|
||
|
//
|
||
|
// This function can be used to calculate the cycle times
|
||
|
// for PulseOut or PulseOutStart.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *frequency -Desired frequency in Hz (SGL).
|
||
|
// Outputs: *frequency -Actual best frequency found in Hz (SGL).
|
||
|
// *timeB -B value for first and second half cycle (I32).
|
||
|
// *timeC -C value for first and second half cycle (I32).
|
||
|
//
|
||
|
// Time:
|
||
|
//----------------------------------------------------------------------
|
||
|
long PulseOutCalc( float *frequency,
|
||
|
long *timeB,
|
||
|
long *timeC);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// ReEnum: Causes the LabJack to detach and re-attach from the bus
|
||
|
// so it will re-enumerate. Configuration constants (local ID,
|
||
|
// power allowance, calibration data) are updated.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 10 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long ReEnum( long *idnum);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// Reset: Causes the LabJack to reset after about 2 seconds.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 10 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long Reset( long *idnum);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// ResetLJ: Same as "Reset".
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 10 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long ResetLJ( long *idnum);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// SHT1X: This function retrieves temperature and/or humidity
|
||
|
// readings from a SHT1X sensor. Data rate is about 2 kbps
|
||
|
// with firmware V1.09 or higher (hardware communication).
|
||
|
// If firmware is less than V1.09, or TRUE is passed for
|
||
|
// softComm, data rate is about 20 bps.
|
||
|
//
|
||
|
// DATA = IO0
|
||
|
// SCK = IO1
|
||
|
//
|
||
|
// The EI-1050 has an extra enable line that allows multiple
|
||
|
// probes to be connected at the same time using only the one
|
||
|
// line for DATA and one line for SCK. This function does not
|
||
|
// control the enable line.
|
||
|
//
|
||
|
// This function automatically configures IO0 has an input
|
||
|
// and IO1 as an output.
|
||
|
//
|
||
|
// Note that internally this function operates on the state and
|
||
|
// direction of IO0 and IO1, and to operate on any of the IO
|
||
|
// lines the LabJack must operate on all 4. The DLL keeps track
|
||
|
// of the current direction and output state of all lines, so that
|
||
|
// this function can operate on IO0 and IO1 without changing
|
||
|
// IO2 and IO3. When the DLL is first loaded,
|
||
|
// though, it does not know the direction and state of
|
||
|
// the lines and assumes all directions are input and
|
||
|
// output states are low.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// softComm -If >0, forces software based communication. Otherwise
|
||
|
// software communication is only used if the LabJack U12
|
||
|
// firmware version is less than V1.09.
|
||
|
// mode -0=temp and RH,1=temp only,2=RH only. If mode is 2,
|
||
|
// the current temperature must be passed in for the
|
||
|
// RH corrections using *tempC.
|
||
|
// statusReg -Current value of the SHT1X status register. The
|
||
|
// value of the status register is 0 unless you
|
||
|
// have used advanced functions to write to the
|
||
|
// status register (enabled heater, low resolution, or
|
||
|
// no reload from OTP).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *tempC -Returns temperature in degrees C. If mode is 2,
|
||
|
// the current temperature must be passed in for the
|
||
|
// RH corrections.
|
||
|
// *tempF -Returns temperature in degrees F.
|
||
|
// *rh -Returns RH in percent.
|
||
|
//
|
||
|
// Time: About 20 ms plus SHT1X measurement time for hardware comm.
|
||
|
// Default measurement time is 210 ms for temp and 55 ms for RH.
|
||
|
// About 2 s per measurement for software comm.
|
||
|
//----------------------------------------------------------------------
|
||
|
long SHT1X( long *idnum,
|
||
|
long demo,
|
||
|
long softComm,
|
||
|
long mode,
|
||
|
long statusReg,
|
||
|
float *tempC,
|
||
|
float *tempF,
|
||
|
float *rh);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// SHTComm: Low-level public function to send and receive up to 4 bytes
|
||
|
// to from an SHT1X sensor. Data rate is about 2 kbps
|
||
|
// with firmware V1.09 or higher (hardware communication).
|
||
|
// If firmware is less than V1.09, or TRUE is passed for
|
||
|
// softComm, data rate is about 20 bps.
|
||
|
//
|
||
|
// DATA = IO0
|
||
|
// SCK = IO1
|
||
|
//
|
||
|
// The EI-1050 has an extra enable line that allows multiple
|
||
|
// probes to be connected at the same time using only the one
|
||
|
// line for DATA and one line for SCK. This function does not
|
||
|
// control the enable line.
|
||
|
//
|
||
|
// This function automatically configures IO0 has an input
|
||
|
// and IO1 as an output.
|
||
|
//
|
||
|
// Note that internally this function operates on the state and
|
||
|
// direction of IO0 and IO1, and to operate on any of the IO
|
||
|
// lines the LabJack must operate on all 4. The DLL keeps track
|
||
|
// of the current direction and output state of all lines, so that
|
||
|
// this function can operate on IO0 and IO1 without changing
|
||
|
// IO2 and IO3. When the DLL is first loaded,
|
||
|
// though, it does not know the direction and state of
|
||
|
// the lines and assumes all directions are input and
|
||
|
// output states are low.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// softComm -If >0, forces software based communication. Otherwise
|
||
|
// software communication is only used if the LabJack U12
|
||
|
// firmware version is less than V1.09.
|
||
|
// waitMeas -If >0, this is a T or RH measurement request.
|
||
|
// serialReset -If >0, a serial reset is issued before sending and
|
||
|
// receiving bytes.
|
||
|
// dataRate -0=no extra delay (default),1=medium delay,2=max delay.
|
||
|
// numWrite -Number of bytes to write (0-4,I32).
|
||
|
// numRead -Number of bytes to read (0-4,I32).
|
||
|
// *datatx -Array of 0-4 bytes to send. Make sure you pass at least
|
||
|
// numWrite number of bytes (U8).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *datarx -Returns 0-4 read bytes as determined by numRead (U8).
|
||
|
//
|
||
|
// Time: About 20 ms plus SHT1X measurement time for hardware comm.
|
||
|
// Default measurement time is 210 ms for temp and 55 ms for RH.
|
||
|
// About 2 s per measurement for software comm.
|
||
|
//----------------------------------------------------------------------
|
||
|
long SHTComm( long *idnum,
|
||
|
long softComm,
|
||
|
long waitMeas,
|
||
|
long serialReset,
|
||
|
long dataRate,
|
||
|
long numWrite,
|
||
|
long numRead,
|
||
|
unsigned char *datatx,
|
||
|
unsigned char *datarx);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// SHTCRC: Checks the CRC on a SHT1X communication. Last byte of
|
||
|
// datarx is the CRC. Returns 0 if CRC is good, or
|
||
|
// SHT1X_CRC_ERROR_LJ if CRC is bad.
|
||
|
//----------------------------------------------------------------------
|
||
|
long SHTCRC( long statusReg,
|
||
|
long numWrite, // 0-4
|
||
|
long numRead, // 0-4
|
||
|
unsigned char *datatx, //4 byte write array
|
||
|
unsigned char *datarx); //4 byte read array
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// Synch: Requires firmware V1.09 or higher.
|
||
|
//
|
||
|
// This function performs SPI communication. Data rate is
|
||
|
// about 160 kbps with no extra delay, although delays of
|
||
|
// 100 us or 1 ms per bit can be enabled.
|
||
|
//
|
||
|
// Control of CS (chip select) can be enabled in this
|
||
|
// function for D0-D7 or handled externally via any digital
|
||
|
// output.
|
||
|
//
|
||
|
// MOSI is D13
|
||
|
// MISO is D14
|
||
|
// SCK is D15
|
||
|
//
|
||
|
// If using the CB25, the protection resistors might need to be
|
||
|
// shorted on all SPI connections (MOSI,MISO,SCK,CS).
|
||
|
//
|
||
|
// The initial state of SCK is set properly (CPOL), by
|
||
|
// this function, before !CS is brought low (final state is also
|
||
|
// set properly before !CS is brought high again). If chip-select
|
||
|
// is being handled manually, outside of this function, care
|
||
|
// must be taken to make sure SCK is initially set to CPOL.
|
||
|
//
|
||
|
// All modes supported (A, B, C, and D).
|
||
|
//
|
||
|
// Mode A: CPHA=1, CPOL=1
|
||
|
// Mode B: CPHA=1, CPOL=0
|
||
|
// Mode C: CPHA=0, CPOL=1
|
||
|
// Mode D: CPHA=0, CPOL=0
|
||
|
//
|
||
|
// If Clock Phase (CPHA) is 1, data is valid on the edge
|
||
|
// going to CPOL. If CPHA is 0, data is valid on the edge
|
||
|
// going away from CPOL.
|
||
|
// Clock Polarity (CPOL) determines the idle state of SCK.
|
||
|
//
|
||
|
// Up to 18 bytes can be written/read. Communication is full
|
||
|
// duplex so 1 byte is read at the same time each byte is written.
|
||
|
// If more than 4 bytes are written or read, this function uses
|
||
|
// calls to WriteMem/ReadMem to load/read the LabJack's data buffer.
|
||
|
//
|
||
|
// This function has the option (configD) to automatically configure
|
||
|
// default state and direction for MOSI (D13 Output), MISO (D14 Input),
|
||
|
// SCK (D15 Output CPOL), and CS (D0-D7 Output High for !CS). This
|
||
|
// function uses a call to DigitalIO to do this. Similar to
|
||
|
// EDigitalIn and EDigitalOut, the DLL keeps track of the current
|
||
|
// direction and output state of all lines, so that these 4 D lines
|
||
|
// can be configured without affecting other digital lines. When the
|
||
|
// DLL is first loaded, though, it does not know the direction and
|
||
|
// state of the lines and assumes all directions are input and
|
||
|
// output states are low.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// mode -Specify SPI mode as: 0=A,1=B,2=C,3=D (I32, 0-3).
|
||
|
// msDelay -If >0, a 1 ms delay is added between each bit.
|
||
|
// husDelay -If >0, a hundred us delay is added between each bit.
|
||
|
// controlCS -If >0, D0-D7 is automatically controlled as CS. The
|
||
|
// state and direction of CS is only tested if control
|
||
|
// is enabled.
|
||
|
// csLine -D line to use as CS if enabled (I32, 0-7).
|
||
|
// csState -Active state for CS line. This would be 0 for the
|
||
|
// normal !CS, or >0 for the less common CS.
|
||
|
// configD -If >0, state and tris are configured for D13, D14,
|
||
|
// D15, and !CS.
|
||
|
// numWriteRead -Number of bytes to write and read (I32, 1-18).
|
||
|
// *data -Serial data buffer. Send an 18 element
|
||
|
// array of bytes. Fill unused locations with zeros (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *data -Serial data buffer. Returns any serial read
|
||
|
// data. Unused locations are filled
|
||
|
// with 9999s. (I32).
|
||
|
//
|
||
|
// Time: 20 ms to read & write up to 4 bytes, plus 40 ms for each
|
||
|
// additional 4 bytes to read or write. Extra 20 ms if configIO
|
||
|
// is true. Extra time if delays are enabled.
|
||
|
//----------------------------------------------------------------------
|
||
|
long Synch( long *idnum,
|
||
|
long demo,
|
||
|
long mode,
|
||
|
long msDelay,
|
||
|
long husDelay,
|
||
|
long controlCS,
|
||
|
long csLine,
|
||
|
long csState,
|
||
|
long configD,
|
||
|
long numWriteRead,
|
||
|
long *data);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// Watchdog: Controls the LabJack watchdog function.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// demo -Send 0 for normal operation, >0 for demo
|
||
|
// mode (I32). Demo mode allows this function to
|
||
|
// be called without a LabJack, and does little but
|
||
|
// simulate execution time.
|
||
|
// active -Enables the LabJack watchdog function. If
|
||
|
// enabled, the 32-bit counter is disabled.
|
||
|
// timeout -Timer reset value in seconds (I32).
|
||
|
// reset -If >0, the LabJack will reset on timeout (I32).
|
||
|
// activeDn -If >0, Dn will be set to stateDn upon
|
||
|
// timeout (I32).
|
||
|
// stateDn -Timeout state of Dn, 0=low, >0=high (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long Watchdog( long *idnum,
|
||
|
long demo,
|
||
|
long active,
|
||
|
long timeout,
|
||
|
long reset,
|
||
|
long activeD0,
|
||
|
long activeD1,
|
||
|
long activeD8,
|
||
|
long stateD0,
|
||
|
long stateD1,
|
||
|
long stateD8);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// ReadMem: Reads 4 bytes from a specified address in the LabJack's
|
||
|
// nonvolatile memory.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// address -Starting address of data to read
|
||
|
// from 0-8188 (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
// *data3 -Byte at address (I32).
|
||
|
// *data2 -Byte at address+1 (I32).
|
||
|
// *data1 -Byte at address+2 (I32).
|
||
|
// *data0 -Byte at address+3 (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long ReadMem( long *idnum,
|
||
|
long address,
|
||
|
long *data3,
|
||
|
long *data2,
|
||
|
long *data1,
|
||
|
long *data0);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// WriteMem: Writes 4 bytes to the LabJack's nonvolatile memory at a
|
||
|
// specified address. The data is read back and verified
|
||
|
// after the write. Memory 0-511 is used for configuration
|
||
|
// and calibration data. Memory from 512-1023 is unused by the
|
||
|
// the LabJack and available for the user (this corresponds to
|
||
|
// starting addresses from 512-1020). Memory 1024-8191 is
|
||
|
// used as a data buffer in hardware timed AI modes.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: *idnum -Local ID, Serial Number, or -1 for first
|
||
|
// found (I32).
|
||
|
// unlocked -If >0, addresses 0-511 are unlocked for
|
||
|
// writing (I32).
|
||
|
// address -Starting address for writing 0-8188 (I32).
|
||
|
// data3 -Byte for address (I32).
|
||
|
// data2 -Byte for address+1 (I32).
|
||
|
// data1 -Byte for address+2 (I32).
|
||
|
// data0 -Byte for address+3 (I32).
|
||
|
// Outputs: *idnum -Returns the Local ID or -1 if no LabJack is
|
||
|
// found (I32).
|
||
|
//
|
||
|
// Time: 20 ms
|
||
|
//----------------------------------------------------------------------
|
||
|
long WriteMem( long *idnum,
|
||
|
long unlocked,
|
||
|
long address,
|
||
|
long data3,
|
||
|
long data2,
|
||
|
long data1,
|
||
|
long data0);
|
||
|
|
||
|
|
||
|
//======================================================================
|
||
|
// CloseLabJack: This function forces a device to close so it is free for
|
||
|
// other programs to use. Only useful if you are using
|
||
|
// multiple programs to access the same device at the same
|
||
|
// time as closing the program will close and free the device
|
||
|
// automatically.
|
||
|
//
|
||
|
// Returns: LabJack errorcodes or 0 for no error (I32).
|
||
|
// Inputs: localID -Send the local ID for the device to close (I32).
|
||
|
// Outputs: none
|
||
|
//----------------------------------------------------------------------
|
||
|
long CloseLabJack( long localID);
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // LJACKLM_H_
|