Drivers
A driver is what knows one device. A board file names a driver on a device; a pipeline then reads that device as a source or writes to it through an outlet.
There are 11 drivers in the tree. A device's driver: value is the directory name
below, and the crate it resolves to is that name plus -driver.
Sensor drivers
These produce values a pipeline can tap.
| Driver | Reads over | Publishes | Extra pins |
|---|---|---|---|
ads1115 | I2C | ain0 (f32, V), ain1 (f32, V), ain2 (f32, V), ain3 (f32, V) | - |
bme280 | I2C | temperature (f32, °C), pressure (f32, hPa), humidity (f32, %RH) | - |
bmp180 | I2C | temperature (f32, °C), pressure (f32, hPa) | - |
ccs811 | I2C | eco2 (f32, ppm), tvoc (f32, ppb) | nint |
sim-source | I2C | value (f32) | - |
spi-loopback | SPI | echo_ok (f32), counter (f32) | - |
veml7700 | I2C | lux (f32, lux) | - |
wsen-itds | I2C | accel_x (f32, g), accel_y (f32, g), accel_z (f32, g) | - |
Output drivers
These consume a command written to an outlet.
| Driver | Command | Mode | Pins | Reports back |
|---|---|---|---|---|
gpio-output-feedback | DigitalState | digital | out, feedback | contact |
gpio-output | DigitalState | digital | out | nothing |
pwm-output | PwmDuty | pwm | out | nothing |
Each driver in detail
ads1115
Texas Instruments ADS1115 16-bit 4-channel ADC over I2C. Reads all four single-ended channels (AIN0-AIN3) and reports voltages.
Requires - bus: I2C
Publishes
| Name | Type | Unit |
|---|---|---|
ain0 | f32 | V |
ain1 | f32 | V |
ain2 | f32 | V |
ain3 | f32 | V |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
i2c_addr | board file | u8 | 72 |
fs_mv | pipeline | FullScale | Mv2048 |
data_rate | pipeline | DataRate | Sps128 |
sample_interval_ms | pipeline | u64 | 1000 |
bme280
Bosch BME280 environmental sensor — temperature, pressure, and humidity over I2C.
Requires - bus: I2C
Publishes
| Name | Type | Unit |
|---|---|---|
temperature | f32 | °C |
pressure | f32 | hPa |
humidity | f32 | %RH |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
i2c_addr | board file | u8 | 118 |
osrs_t | pipeline | Oversampling | X1 |
osrs_p | pipeline | Oversampling | X1 |
osrs_h | pipeline | Oversampling | X1 |
filter | pipeline | Filter | Off |
t_sb | pipeline | Standby | Ms0_5 |
sample_interval_ms | pipeline | u64 | 1000 |
bmp180
Bosch BMP180 temperature and barometric pressure sensor over I2C.
Requires - bus: I2C
Publishes
| Name | Type | Unit |
|---|---|---|
temperature | f32 | °C |
pressure | f32 | hPa |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
i2c_addr | board file | u8 | 119 |
oss | pipeline | Oversampling | Single |
sample_interval_ms | pipeline | u64 | 1000 |
ccs811
ScioSense CCS811 indoor air quality sensor over I2C. Reports equivalent CO2 (eCO2) and total volatile organic compounds (TVOC).
Requires - bus: I2C; pins: nint
Publishes
| Name | Type | Unit |
|---|---|---|
eco2 | f32 | ppm |
tvoc | f32 | ppb |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
i2c_addr | board file | u8 | 90 |
meas_mode | pipeline | MeasMode | Every1s |
sample_interval_ms | pipeline | u64 | 10000 |
gpio-output-feedback
Hybrid digital output with intrinsic feedback: drives a relay/output on the out pin
(consuming a DigitalState Outlet) AND reads the device's real state from a separate feedback
input pin (e.g. a relay's auxiliary contact). The status comes only from the real pin read —
never inferred from the command write (SDS A1 / OUT-09).
Requires - pins: out, feedback
Publishes
| Name | Type | Unit |
|---|---|---|
contact | bool | - |
Accepts - DigitalState in digital mode
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
active_low | board file | bool | false |
min_switch_interval_ms | board file | u64 | 0 |
feedback_active_low | board file | bool | false |
gpio-output
Digital on/off GPIO output (relay, LED, valve, …). Consumes a DigitalState Outlet and drives a single GPIO high/low, honouring active-low wiring.
Requires - pins: out
Accepts - DigitalState in digital mode
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
active_low | board file | bool | false |
min_switch_interval_ms | board file | u64 | 0 |
pwm-output
PWM duty-cycle output (fan, pump, dimmable LED, …). Consumes a PwmDuty Outlet (a 0.0–1.0 duty fraction) and drives a PWM channel. The driver clamps to its configured range as a non-negotiable floor.
Requires - pins: out
Accepts - PwmDuty in pwm mode
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
min_duty | board file | f32 | 0.0 |
max_duty | board file | f32 | 1.0 |
min_update_interval_ms | board file | u64 | 0 |
sim-source
Synthetic deterministic source for hardware-in-the-loop tests. Satisfies the driver contract but ignores the bus and emits a bounded sawtooth ramp, so the dataplane HIL suite can assert on exact tap values, moving-average output, and threshold-trigger alarms without any physical sensor.
Requires - bus: I2C
Publishes
| Name | Type | Unit |
|---|---|---|
value | f32 | - |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
start | pipeline | f32 | 0.0 |
step | pipeline | f32 | 1.0 |
max | pipeline | f32 | 100.0 |
sample_interval_ms | pipeline | u64 | 500 |
spi-loopback
SPI loopback test source. Each sample full-duplex-transfers an incrementing byte pattern and reports whether the echo matched: with MOSI wired to MISO it proves the whole SPI path (bus, mode, clock, chip-select) on real hardware; without the jumper it reads 0. Not a sensor — the SPI counterpart of sim-source for bring-up and HIL tests.
Requires - bus: SPI
Publishes
| Name | Type | Unit |
|---|---|---|
echo_ok | f32 | - |
counter | f32 | - |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
transfer_len | pipeline | u8 | 8 |
veml7700
Vishay VEML7700 ambient light sensor over I2C.
Requires - bus: I2C
Publishes
| Name | Type | Unit |
|---|---|---|
lux | f32 | lux |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
i2c_addr | board file | u8 | 16 |
gain | pipeline | Gain | X1 |
integration_time | pipeline | IntegrationTime | Ms100 |
sample_interval_ms | pipeline | u64 | 1000 |
wsen-itds
Würth Elektronik WSEN-ITDS 3-axis MEMS accelerometer over I2C.
Requires - bus: I2C
Publishes
| Name | Type | Unit |
|---|---|---|
accel_x | f32 | g |
accel_y | f32 | g |
accel_z | f32 | g |
Configuration
| Field | Where it is set | Type | Default |
|---|---|---|---|
i2c_addr | board file | u8 | 24 |
full_scale_g | pipeline | FullScale | G2 |
odr | pipeline | Odr | Hz100 |
power_mode | pipeline | PowerMode | Normal |
sample_interval_ms | pipeline | u64 | 100 |