Skip to content

Concepts & glossary

dtollib mirrors the DT-Open Layers object model closely, so a handful of SDK terms recur across the guides. This page defines them once.

The acquisition model

A board (e.g. DT9805(00)) hosts one or more subsystems. A subsystem is a functional unit of a fixed kind — analog input, analog output, digital in, digital out, counter/timer, quadrature, tachometer. You configure one subsystem per TaskSpec; a task may not mix kinds.

Each subsystem has a number of channels. physical_channel on a channel spec is the zero-based index of the channel on that subsystem. A task reads or writes a channel list (CGL) — the ordered set of channels it touches.

A configured task moves through a lifecycle — configured → committed → (armed) → running → stopped — driven by DtolSession / the TaskBuilder. Single-value tasks poll() / write() on demand; continuous tasks stream under the hardware clock via record().

SDK handles and terms

Term Meaning
HDRVR A driver handle for one open board. One per board; ref-counted and shared by every session on that board (the per-board lock guards it).
HDASS A subsystem handle (session.raw_hdass) — the SDK "device" for one configured subsystem.
OLSS_* SDK subsystem-type selectors: OLSS_AD (analog in), OLSS_DA (analog out), OLSS_DIN/OLSS_DOUT (digital), OLSS_CT (counter/timer), OLSS_QUAD, OLSS_TACH.
OLSSC_* Capability flags queried per subsystem — surfaced on CapabilitySet (e.g. OLSSC_SUP_CONTINUOUS, OLSSC_RETURNS_FLOATS).
element When a board has more than one subsystem of the same kind, element indexes them (0 = first).
CGL / cgl_depth Channel-Gain List and its maximum size.
gain Programmable-gain-amplifier setting applied before the A/D. Thermocouples use a high gain to resolve µV-level emf.

Data shapes

Term Meaning
DaqReading One on-demand sample set: values (per channel), units, sensor_status, timestamps, optional error. Returned by poll() / read_events().
DaqBlock A continuous-mode chunk: a (n_channels, n_samples) array plus channels, units, block_index, timestamps. Yielded by record().
DaqSample One scalar (channel, sample) row — what block_to_long_rows yields.
sentinel A non-numeric sensor condition (sensor_open, out-of-range) preserved on sensor_status while the matching values cell is NaN-filled — never coerced to a plausible number. See Channels.

Continuous-acquisition machinery

Term Meaning
HBUF / buffer pool The ring of driver buffers (BufferPlan.buffers, min 3) the SDK fills and the consumer drains. Distinct from the AnyIO stream_buffer_size.
callback bridge The §12.3.2 mechanism translating the driver thread's window messages (BUFFER_DONE, overrun, etc.) into the async block stream.
wrap mode For output: SINGLE loops one pre-filled period; MULTIPLE refills each emptied buffer. See Waveform output.
overrun / underrun SDK-level loss: input overrun (consumer too slow), output underrun (refill too slow). Counted in AcquisitionSummary, distinct from consumer-side payloads_dropped.

Thermocouples on the DT9805 / DT9806

These boards do not linearise thermocouples in firmware (returns_floats=False). The wrapper reads the differential thermo-emf at high gain plus the CJC (cold-junction-compensation) sensor on channel 0 (10 mV/°C), then applies the NIST ITS-90 polynomials in software. Raw A/D samples are offset-binary codes, converted to volts in software. See the TC read-path detail.