Hardware Source
On the roadmaphardware_sourceBridges live multi-channel DAQ: up to 8 channels (ea0-ea7) + alias
Signature
Outputs
ea0Signalea1Signalea2Signalea3Signalea4Signalea5Signalea6Signalea7SignalsignalSignal— alias for first non-empty
Description
Hardware Source bridges live multi-channel data acquisition (DAQ) into the graph, exposing up to eight ADC channels as distinct Signal outputs ea0 … ea7, plus a convenience signal alias that mirrors the first non-empty channel. It has no input ports and no user-facing parameters: channel-to-hardware bindings are resolved at runtime from handle IDs (handle_ids list, per-channel handle_id_<n> overrides, or a single legacy handle_id that is demuxed if it carries a Matrix/Vector), and active channels are selected via ea<n>_active booleans or a channels/channel_mask bitmask.
The node is non-blocking and stateless: on each evaluation it reads the currently available samples from every bound, active channel. Missing, idle, or inactive handles yield empty Signals rather than errors or blocking waits, so a partially wired acquisition front-end still evaluates cleanly. Because it holds no accumulator or filter state across evaluations, its output depends solely on what the hardware layer presents at that instant.
Units and uncertainty attach to each channel's samples as delivered by the acquisition backend — typically a physical unit such as V from ADC calibration, with per-sample sigma reflecting quantization and front-end noise where the driver reports it. The node itself performs no scaling or unit rewriting; it is a faithful passthrough terminal from the hardware boundary into Captyse's unit- and uncertainty-aware pipeline.
Status: roadmap. Hardware acquisition is still being finalized for a later build; the port and binding contract above is defined, but a live DAQ backend is not yet wired in this release. Treat it as the forward-looking acquisition entry point rather than a currently operational device bridge.
Examples
Reading a two-channel acquisition
Bind ea0 and ea1 to a bound DAQ and route them into analysis. Inactive channels (ea2–ea7) emit empty Signals and cost nothing downstream.
hardware_source.ea0 -> fft.signal # spectrum of channel 0
hardware_source.ea1 -> statistics.signal # RMS / mean of channel 1Each output carries the backend's unit (e.g. V) and per-sample sigma, so the fft and statistics results are already unit- and uncertainty-aware.
Single-channel via the alias
For a one-channel rig, wire the signal alias instead of picking a specific ea<n>; it tracks the first non-empty active channel automatically.
hardware_source.signal -> iir_filter.signal -> sink.inputIf no channel is active or bound, signal is an empty Signal and the chain evaluates without blocking.
Applications
- Live sensor bench: streaming multi-channel ADC voltages (strain gauges, thermocouples, accelerometers) directly into FFT, filtering, and statistics chains.
- Physical hardware-in-the-loop validation, comparing a simulated model branch against measured channels on the same time base.
- Multi-probe electronics characterization, capturing up to eight simultaneous analog channels for cross-channel timing and coherence analysis.
- Teaching and lab courses where students acquire real signals and process them with the same unit- and uncertainty-aware nodes used for simulation.
Neat
Handle resolution is layered by priority — a `handle_ids` list, then per-channel `handle_id_<n>` overrides, then a single legacy `handle_id` that is auto-demuxed if it holds a Matrix or Vector — so one binding scheme can transparently supersede another.
The `signal` alias is not a fixed channel: it dynamically points at the first non-empty active channel, so a rig can be rewired without touching downstream connections.
Known issues
Every unbound, idle, or inactive channel emits an empty Signal rather than raising an error; downstream nodes must tolerate zero-length input, and a silent mis-binding can masquerade as an idle channel.
The `signal` alias resolves to whichever channel is first non-empty, so if channel activity changes between evaluations the alias can silently switch its source.