{
  "schema": 1,
  "catalog": "0.22.0",
  "source": "https://git.pcbsmt.me/rh/emb-loom.git",
  "ref": "v0.22.0",
  "commit": "b275a637e3e0114ee98fdd70ea5e584569bc6fbb",
  "units": [
    {
      "id": "clamp",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Limit sample-to-sample change.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "ADC step noise",
        "sensor dropout",
        "setpoint rate limit"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/clamp"
    },
    {
      "id": "median",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Remove impulses with an N-sample median.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "PIR impulses",
        "ADC spikes",
        "key bounce"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/median"
    },
    {
      "id": "moving-average",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Smooth with an N-sample mean.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "battery voltage",
        "temperature",
        "slow ADC"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/moving-average"
    },
    {
      "id": "ema",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "First-order lag with a power-of-two shift.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "battery gauge",
        "control loop",
        "display smoothing"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/ema"
    },
    {
      "id": "trimmed-mean",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Average a batch after dropping the minimum and maximum.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "PIR 6-sample batch",
        "ADC burst with spikes",
        "sensor batch"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/trimmed-mean"
    },
    {
      "id": "debounce",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Delay a binary change until the input is stable.",
      "tags": [
        "filter",
        "key"
      ],
      "applications": [
        "key",
        "limit switch",
        "PIR digital output"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/debounce"
    },
    {
      "id": "hysteresis",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Keep a binary state across a threshold band.",
      "tags": [
        "control",
        "battery"
      ],
      "applications": [
        "battery threshold",
        "thermostat",
        "presence"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/hysteresis"
    },
    {
      "id": "key-fsm",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Turn a key level into short and long events.",
      "tags": [
        "control",
        "key"
      ],
      "applications": [
        "power button",
        "single-key menu",
        "short and long action"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/key-fsm"
    },
    {
      "id": "crc16",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "CRC-16/CCITT-FALSE for frames and images.",
      "tags": [
        "integrity",
        "protocol"
      ],
      "applications": [
        "config block",
        "firmware image",
        "serial frame"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/crc16"
    },
    {
      "id": "ring-buffer",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Fixed-size byte ring buffer.",
      "tags": [
        "buffer",
        "uart"
      ],
      "applications": [
        "UART receive",
        "IR edge queue",
        "event queue"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/ring-buffer"
    },
    {
      "id": "mean",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Arithmetic mean of a batch.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "short ADC burst",
        "calibration average"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/mean"
    },
    {
      "id": "clamp-average",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Limit each step, then smooth with a moving average.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "noisy actuator feedback",
        "battery with spikes"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/clamp-average"
    },
    {
      "id": "weighted-average",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Weighted mean of a batch.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "trusted recent samples",
        "sensor fusion",
        "calibration weighting"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/weighted-average"
    },
    {
      "id": "clamp-debounce",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Limit each step, then accept after N stable samples.",
      "tags": [
        "filter",
        "adc"
      ],
      "applications": [
        "slow analog channel",
        "spike and drift rejection"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/filters/clamp-debounce"
    },
    {
      "id": "ir-nec-decode",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Decode NEC falling-edge intervals.",
      "tags": [
        "ir",
        "protocol"
      ],
      "applications": [
        "TV remote",
        "IR keypad",
        "appliance control"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/ir-nec-decode"
    },
    {
      "id": "i2c-master",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Blocking I2C master with a port and fake bus.",
      "tags": [
        "i2c",
        "bus"
      ],
      "applications": [
        "sensor",
        "EEPROM",
        "OLED",
        "PMIC"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/i2c-master"
    },
    {
      "id": "uart",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Blocking UART core with a port and timeout.",
      "tags": [
        "uart",
        "serial"
      ],
      "applications": [
        "AT command module",
        "debug console",
        "GPS module"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/uart"
    },
    {
      "id": "ws2812",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Encode RGB pixels into WS2812 GRB bytes.",
      "tags": [
        "led",
        "protocol"
      ],
      "applications": [
        "status LED",
        "LED strip",
        "Padauk WS2812 example"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ws2812"
    },
    {
      "id": "ir-capture",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Collect falling-edge intervals for an IR receiver.",
      "tags": [
        "ir",
        "capture"
      ],
      "applications": [
        "NEC remote",
        "IR keypad",
        "protocol capture"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ir-capture"
    },
    {
      "id": "pid",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Integer PID with integral clamping and output limits.",
      "tags": [
        "control",
        "motor"
      ],
      "applications": [
        "motor speed",
        "heater control",
        "fan control"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/pid"
    },
    {
      "id": "gamma-lut",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Map an input through a lookup table with interpolation.",
      "tags": [
        "led",
        "display"
      ],
      "applications": [
        "LED dimming",
        "sensor linearization"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/gamma-lut"
    },
    {
      "id": "crc32",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "CRC-32/ISO-HDLC for images and frames.",
      "tags": [
        "integrity",
        "protocol"
      ],
      "applications": [
        "firmware image",
        "config block",
        "zlib-compatible frame"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/crc32"
    },
    {
      "id": "fixed-sqrt",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Q16.16 integer square root.",
      "tags": [
        "math",
        "fixed-point"
      ],
      "applications": [
        "RMS",
        "magnitude",
        "sensor linearization"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/fixed-sqrt"
    },
    {
      "id": "adc-sampler",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Average N ADC reads on a channel.",
      "tags": [
        "adc",
        "sensor"
      ],
      "applications": [
        "battery voltage",
        "temperature",
        "sensor channel"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/adc-sampler"
    },
    {
      "id": "soft-pwm",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Software PWM on a single pin.",
      "tags": [
        "pwm",
        "led"
      ],
      "applications": [
        "status LED",
        "heater",
        "low-end MCU"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/soft-pwm"
    },
    {
      "id": "ds18b20",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "READ DS18B20 temperature over 1-Wire.",
      "tags": [
        "sensor",
        "onewire"
      ],
      "applications": [
        "board temperature",
        "enclosure probe"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ds18b20"
    },
    {
      "id": "biquad",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Q15 direct-form I biquad section.",
      "tags": [
        "dsp",
        "filter"
      ],
      "applications": [
        "audio filter",
        "sensor smoothing",
        "DSP chain"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/biquad"
    },
    {
      "id": "ssd1306",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Minimal SSD1306 128x64 I2C driver.",
      "tags": [
        "display",
        "oled"
      ],
      "applications": [
        "status display",
        "menu",
        "manufacturing test"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ssd1306"
    },
    {
      "id": "dht",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "DHT11 and DHT22 frame decoders.",
      "tags": [
        "sensor",
        "humidity",
        "temperature"
      ],
      "applications": [
        "room climate",
        "greenhouse",
        "enclosure monitoring"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/dht"
    },
    {
      "id": "rotary-encoder",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Quadrature decoder for a mechanical rotary encoder.",
      "tags": [
        "input",
        "quadrature",
        "knob"
      ],
      "applications": [
        "menu knob",
        "setpoint",
        "manual stage"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/rotary-encoder"
    },
    {
      "id": "fir",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Q15 finite-impulse-response filter.",
      "tags": [
        "dsp",
        "filter"
      ],
      "applications": [
        "audio filter",
        "sensor smoothing",
        "DSP chain"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/fir"
    },
    {
      "id": "at24cxx",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "AT24Cxx I2C EEPROM driver.",
      "tags": [
        "storage",
        "eeprom",
        "i2c"
      ],
      "applications": [
        "calibration storage",
        "serial numbers",
        "settings"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/at24cxx"
    },
    {
      "id": "ds3231",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "DS3231 I2C real-time clock.",
      "tags": [
        "time",
        "rtc",
        "i2c"
      ],
      "applications": [
        "data logger timestamps",
        "wall clock",
        "scheduled actions"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ds3231"
    },
    {
      "id": "max7219",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MAX7219/MAX7221 SPI LED driver.",
      "tags": [
        "display",
        "led",
        "spi"
      ],
      "applications": [
        "seven-segment display",
        "LED matrix",
        "status panel"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/max7219"
    },
    {
      "id": "pca9685",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "PCA9685 16-channel I2C PWM driver.",
      "tags": [
        "pwm",
        "servo",
        "i2c"
      ],
      "applications": [
        "servo bank",
        "LED dimming",
        "fan bank"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/pca9685"
    },
    {
      "id": "mpu6050",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MPU-6050 six-axis IMU driver.",
      "tags": [
        "imu",
        "motion",
        "i2c"
      ],
      "applications": [
        "tilt sensing",
        "motion detection",
        "acceleration logging"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/mpu6050"
    },
    {
      "id": "sht3x",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "SHT30/SHT31/SHT35 temperature and humidity sensor.",
      "tags": [
        "sensor",
        "humidity",
        "temperature",
        "i2c"
      ],
      "applications": [
        "room climate",
        "greenhouse",
        "enclosure monitoring"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/sht3x"
    },
    {
      "id": "aht20",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "AHT20 temperature and humidity sensor.",
      "tags": [
        "sensor",
        "humidity",
        "temperature",
        "i2c"
      ],
      "applications": [
        "room climate",
        "enclosure monitoring",
        "low-cost sensing"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/aht20"
    },
    {
      "id": "mcp2515",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MCP2515 CAN controller over SPI.",
      "tags": [
        "can",
        "bus",
        "spi"
      ],
      "applications": [
        "vehicle CAN node",
        "industrial bus",
        "CAN bridge"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/mcp2515"
    },
    {
      "id": "stepper",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Step/direction stepper driver for A4988 and DRV8825.",
      "tags": [
        "motion",
        "stepper",
        "gpio"
      ],
      "applications": [
        "linear stage",
        "pump actuator",
        "camera slider"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/stepper"
    },
    {
      "id": "hx711",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "HX711 24-bit load-cell amplifier.",
      "tags": [
        "sensor",
        "load-cell",
        "gpio"
      ],
      "applications": [
        "platform scale",
        "force sensor",
        "tension control"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/hx711"
    },
    {
      "id": "max31855",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MAX31855 thermocouple amplifier.",
      "tags": [
        "sensor",
        "temperature",
        "spi"
      ],
      "applications": [
        "reflow oven",
        "kiln monitor",
        "test bench"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/max31855"
    },
    {
      "id": "bme280",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "BME280 temperature, pressure, and humidity sensor.",
      "tags": [
        "sensor",
        "pressure",
        "humidity",
        "temperature",
        "i2c"
      ],
      "applications": [
        "weather station",
        "altitude",
        "greenhouse"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/bme280"
    },
    {
      "id": "adxl345",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "ADXL345 three-axis accelerometer.",
      "tags": [
        "sensor",
        "motion",
        "i2c"
      ],
      "applications": [
        "tilt sensing",
        "vibration logging",
        "motion wake-up"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/adxl345"
    },
    {
      "id": "mcp23017",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MCP23017 16-bit I2C GPIO expander.",
      "tags": [
        "gpio",
        "expander",
        "i2c"
      ],
      "applications": [
        "buttons and relays",
        "keypad",
        "control panel"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/mcp23017"
    },
    {
      "id": "ads1115",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "ADS1115 16-bit I2C analog-to-digital converter.",
      "tags": [
        "adc",
        "sensor",
        "i2c"
      ],
      "applications": [
        "precision sensor",
        "battery measurement",
        "bridge front end"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ads1115"
    },
    {
      "id": "sh1106",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Minimal SH1106 128x64 I2C OLED driver.",
      "tags": [
        "display",
        "oled",
        "i2c"
      ],
      "applications": [
        "1.3-inch status display",
        "handheld menu",
        "bring-up display"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/sh1106"
    },
    {
      "id": "mcp4725",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MCP4725 12-bit I2C digital-to-analog converter.",
      "tags": [
        "dac",
        "analog",
        "i2c"
      ],
      "applications": [
        "analog setpoint",
        "sensor calibration",
        "bias source"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/mcp4725"
    },
    {
      "id": "pcf8574",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "PCF8574 8-bit I2C GPIO expander.",
      "tags": [
        "gpio",
        "expander",
        "i2c"
      ],
      "applications": [
        "buttons and relays",
        "status LEDs",
        "control panel"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/pcf8574"
    },
    {
      "id": "hc-sr04",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "HC-SR04 ultrasonic distance sensor.",
      "tags": [
        "sensor",
        "distance",
        "ultrasonic"
      ],
      "applications": [
        "obstacle sensing",
        "tank level",
        "presence detection"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/hc-sr04"
    },
    {
      "id": "ina219",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "INA219 high-side current and power monitor.",
      "tags": [
        "sensor",
        "current",
        "power",
        "i2c"
      ],
      "applications": [
        "battery current",
        "load monitor",
        "USB power budget"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/ina219"
    },
    {
      "id": "mcp9808",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MCP9808 high-accuracy I2C temperature sensor.",
      "tags": [
        "sensor",
        "temperature",
        "i2c"
      ],
      "applications": [
        "board temperature",
        "enclosure logging",
        "thermal monitor"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/mcp9808"
    },
    {
      "id": "nrf24l01",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "nRF24L01+ 2.4 GHz SPI transceiver core.",
      "tags": [
        "radio",
        "wireless",
        "spi"
      ],
      "applications": [
        "short-range sensor link",
        "remote control",
        "low-power telemetry"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/nrf24l01"
    },
    {
      "id": "hd44780",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "HD44780-compatible character LCD, 4-bit parallel interface.",
      "tags": [
        "display",
        "lcd",
        "gpio"
      ],
      "applications": [
        "status display",
        "parameter editor",
        "legacy panel"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/hd44780"
    },
    {
      "id": "mfrc522",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "MFRC522 13.56 MHz RFID reader over SPI.",
      "tags": [
        "rfid",
        "nfc",
        "spi"
      ],
      "applications": [
        "UID reader",
        "access control",
        "tag presence"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/mfrc522"
    },
    {
      "id": "modbus-rtu",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "Modbus RTU frame builder and parser.",
      "tags": [
        "protocol",
        "industrial",
        "uart"
      ],
      "applications": [
        "RS-485 sensor bus",
        "drive control",
        "Modbus gateway"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/modbus-rtu"
    },
    {
      "id": "pir",
      "kind": "operator",
      "version": "0.1.0",
      "summary": "PIR motion detector signal chain for sampled pyroelectric data.",
      "tags": [
        "motion",
        "pir",
        "filter"
      ],
      "applications": [
        "raw PIR front end",
        "battery motion sensor",
        "warm-up and output lock"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": false
      },
      "requires": [],
      "sha256": "",
      "path": "operators/pir"
    },
    {
      "id": "scd4x",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "Sensirion SCD40/SCD41 CO2, temperature, and humidity sensor.",
      "tags": [
        "sensor",
        "co2",
        "environment",
        "i2c"
      ],
      "applications": [
        "indoor air quality",
        "ventilation control",
        "CO2 monitor"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/scd4x"
    },
    {
      "id": "sdcard",
      "kind": "driver",
      "version": "0.1.0",
      "summary": "SD card block device over SPI.",
      "tags": [
        "storage",
        "flash",
        "spi"
      ],
      "applications": [
        "data logger",
        "config store",
        "FatFs block layer"
      ],
      "compatibility": {
        "language": "c99",
        "alloc": false,
        "float": false,
        "blocking": true
      },
      "requires": [],
      "sha256": "",
      "path": "drivers/sdcard"
    }
  ]
}
