eStreamRead [LJM User's Guide]
Returns ScansPerRead * NumAddresses samples from an initialized and running LJM stream buffer. By default, eStreamRead waits for data to become available, if necessary.
Syntax
LJM_ERROR_RETURN LJM_eStreamRead(
int Handle,
double * aData,
int * DeviceScanBacklog,
int * LJMScanBacklog)
Parameters
Handle [in]
A device handle. The handle is a connection ID for an active device. Generate a handle with LJM_Open or LJM_OpenS.
aData [out]
An array that contains the samples being read. Returns all channels interleaved (see note below). Must be large enough to hold ScansPerRead * NumAddresses values, where ScansPerRead and NumAddresses are values passed to LJM_eStreamStart. The data returned is removed from the LJM stream buffer according to first in, first out (FIFO) order.
DeviceScanBacklog [out]
The number of scans left in the device buffer, as measured from when data was last collected from the device. DeviceScanBacklog should usually be near zero and not growing.
LJMScanBacklog [out]
The number of scans left in the LJM buffer, which does not include concurrent data sent in the aData array. LJMScanBacklog should usually be near zero and not growing.
Returns
LJM errorcodes or 0 for no error.
By default, eStreamRead should be considered a blocking call. To make eStreamRead always return immediately, configure LJM_STREAM_SCANS_RETURN to LJM_STREAM_SCANS_RETURN_ALL_OR_NONE.
If LJM_eStreamRead returns an error, LJM nearly always attempts to command the device to stop streaming. LJM does not do so for the case when LJME_NO_SCANS_RETURNED is returned (due to LJM_STREAM_SCANS_RETURN_ALL_OR_NONE).
Remarks
Before calling this function, create a data buffer using LJM_eStreamStart. To stop stream, use LJM_eStreamStop.
If LJM_eStreamRead gives error 1301 (LJME_LJM_BUFFER_FULL) or many -9999 values in aData, here are some strategies to help.
LJM 1.2100 and later: If this function returns the error LJME_SYNCHRONIZATION_TIMEOUT, try setting a large send/receive timeout for the appropriate connection type.
Interleaved Channels
aData returns interleaved data. For example, when streaming two channels, AIN0 and AIN1, aData will look like this:
aData[0] contains the first AIN0 sample aData[1] contains the first AIN1 sample aData[2] contains the second AIN0 sample aData[3] contains the second AIN1 sample ...
Example
See the LJM_eStreamStart page for an example using LJM_eStreamRead.