> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lagerdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Lager Supported Instruments

> All instruments currently supported by the Lager platform.

## Overview

This document outlines the instruments currently supported by the Lager
platform. All supported devices can be controlled locally or remotely
through the `lager` CLI and integrated directly into automated hardware
testing workflows and CI/CD systems.

Lager transforms traditional bench equipment into programmable
infrastructure for embedded engineering teams.

If you use equipment not listed here, custom integration support
is available.

***

# 1. Power Control

Lager provides automated control of bench power equipment for
deterministic hardware testing, fault injection, and CI-driven
validation.

## Power Supplies

| Manufacturer         | Model        | Channels           | Control Command               |
| -------------------- | ------------ | ------------------ | ----------------------------- |
| Rigol                | DP711 \*     | 1                  | `lager supply`                |
| Rigol                | DP811        | 1                  | `lager supply`                |
| Rigol                | DP821        | 2                  | `lager supply`                |
| Rigol                | DP831        | 3                  | `lager supply`                |
| Rigol                | DP832        | 3                  | `lager supply`                |
| Keysight             | E36233A      | 2                  | `lager supply`                |
| Keysight             | E36312A      | 3                  | `lager supply`                |
| Keysight             | E36313A      | 3                  | `lager supply`                |
| EA Elektro-Automatik | PSB 10060/60 | 1 supply + 1 solar | `lager supply`, `lager solar` |
| EA Elektro-Automatik | PSB 10080/60 | 1 supply + 1 solar | `lager supply`, `lager solar` |

\* RS-232 only — connects through a USB-serial adapter and requires a one-time
manual assignment with
[`lager nets assign`](/source/reference/cli/nets#assign). The DP711 also
requires a **null-modem (crossover) cable** between the supply and the
RS232-to-USB adapter. Both ends are wired as DTE, so a straight-through
connection will not communicate. See
[RS-232 Instruments](/source/getting-started/setting-up-instruments#rs-232-instruments-manual-assignment).

**Enables:**

* Automated voltage/current control
* Power sequencing
* Brownout and glitch testing
* CI-integrated hardware validation

## Battery Simulators

| Manufacturer | Model | Control Command                 |
| ------------ | ----- | ------------------------------- |
| Keithley     | 2281S | `lager battery`, `lager supply` |

**Enables:**

* Programmable battery emulation
* Charge/discharge profile simulation
* Low-voltage testing

## Electronic Loads

| Manufacturer | Model  | Control Command |
| ------------ | ------ | --------------- |
| Rigol        | DL3021 | `lager eload`   |

**Enables:**

* Load step testing
* Current sink validation
* Automated power integrity testing

***

# 2. Measurement & Analysis

Lager integrates measurement equipment into programmable test workflows,
enabling automated signal inspection and power analysis.

## Oscilloscopes & Logic Analyzers

| Manufacturer    | Model          | Channels           | Control Command              |
| --------------- | -------------- | ------------------ | ---------------------------- |
| Rigol           | MSO5204        | 4 analog + 1 logic | `lager scope`, `lager logic` |
| Pico Technology | PicoScope 2000 | 2 analog           | `lager scope`                |

**Enables:**

* Automated waveform capture
* Trigger-based signal validation
* Digital + analog correlation

## Power Measurement

| Manufacturer         | Model      | Control Command              |
| -------------------- | ---------- | ---------------------------- |
| Yoctopuce            | Yocto-Watt | `lager watt`                 |
| Joulescope           | JS220      | `lager watt`, `lager energy` |
| Nordic Semiconductor | PPK2       | `lager watt`, `lager energy` |

**Enables:**

* Current consumption profiling
* Energy and charge integration
* Power statistics (mean/min/max/std)
* Power regression testing

## Temperature Monitoring

| Manufacturer | Model        | Channels | Control Command      |
| ------------ | ------------ | -------- | -------------------- |
| Phidgets     | Thermocouple | 4        | `lager thermocouple` |

**Enables:**

* Thermal monitoring during hardware tests
* Environmental validation
* Long-duration soak testing

***

# 3. Embedded Interfaces

Lager supports programmable hardware interface control for automated
communication testing and validation.

## Multi-Protocol Adapters

### LabJack T7

**Control Commands:** `lager i2c`, `lager spi`, `lager adc`,
`lager dac`, `lager gpi`, `lager gpo`

**Interfaces:**

* I2C (1 bus)
* SPI (1 bus)
* 14 ADC channels
* 2 DAC channels
* 24 GPIO pins

### Total Phase Aardvark

**Control Commands:** `lager i2c`, `lager spi`, `lager gpi`,
`lager gpo`

**Interfaces:**

* I2C (1 bus)
* SPI (1 bus)

### FTDI FT232H

**Control Commands:** `lager i2c`, `lager spi`, `lager gpi`,
`lager gpo`

**Interfaces:**

* I2C (1 bus)
* SPI (1 bus)
* 12 GPIO pins

### Measurement Computing USB-202

**Control Commands:** `lager adc`, `lager dac`, `lager gpi`,
`lager gpo`

**Interfaces:**

* 8 ADC channels
* 2 DAC channels
* 8 GPIO pins

**Enables:**

* Automated peripheral communication testing
* Sensor validation
* Protocol-level fault injection
* Hardware-in-the-loop simulation

***

# 4. Debug & Flashing

Lager supports industry-standard ARM debug probes, all driven through
the same `lager debug` command so probe choice is transparent to your
scripts and CI pipelines.

| Manufacturer       | Model                                                | Control Command |
| ------------------ | ---------------------------------------------------- | --------------- |
| SEGGER             | J-Link                                               | `lager debug`   |
| SEGGER             | J-Link Plus                                          | `lager debug`   |
| SEGGER             | J-Link Base Compact                                  | `lager debug`   |
| SEGGER             | J-Link Flasher Pro                                   | `lager debug`   |
| SEGGER             | Flasher ARM                                          | `lager debug`   |
| STMicroelectronics | ST-Link/V2, V2-1, V3 (including V3 Mini and V3 2VCP) | `lager debug`   |
| Raspberry Pi       | Debug Probe (RP2040 / Picoprobe, CMSIS-DAP)          | `lager debug`   |
| FTDI               | FT232H (e.g. C232HM cable, Adafruit FT232H breakout) | `lager debug`   |
| FTDI               | FT2232H (e.g. Olimex ARM-USB-OCD-H)                  | `lager debug`   |
| FTDI               | FT4232H (requires custom `openocd_config`)           | `lager debug`   |
| Any vendor         | CMSIS-DAP compatible (Atmel EDBG, NXP DAPLink, etc.) | `lager debug`   |

**Capabilities:**

* Flash firmware
* Erase device
* Reset target
* Launch GDB server
* Memory read/write

**Notes:**

* OpenOCD-backed probes auto-select an interface configuration from
  the USB VID/PID for the chips listed above. The FT4232H is supported
  but has no safe default, because quad-MPSSE boards have too many wiring
  variants. You must pass an `openocd_config` that points at the right
  interface cfg for your board. The same escape hatch covers
  non-standard FT232H/FT2232H wiring and any probe not in the table
  (e.g. Black Magic Probe, Glasgow Interface Explorer).
* Multi-channel FTDIs (FT2232H, FT4232H) expose each MPSSE channel as
  a separate debug net. The channel is an `@A`/`@B`/`@C`/`@D` suffix on
  the device field, so a single chip can drive multiple targets
  independently. Channels C and D on the FT4232H are UART-only. See the
  [nets reference](../reference/cli/nets) for the channel-suffix
  syntax.
* Lager selects the target chip configuration from the device name for
  the STM32, nRF5x, RP2040/RP2350, ATSAM, LPC, i.MX RT, and ESP32
  families. A custom OpenOCD target config drives anything else.

***

# 5. Connectivity & Control

## USB Power Switching

| Manufacturer | Model                                     | Ports | Control Command |
| ------------ | ----------------------------------------- | ----- | --------------- |
| Acroname     | 8-Port USB Hub                            | 8     | `lager usb`     |
| Acroname     | 4-Port USB Hub                            | 4     | `lager usb`     |
| Yepkit       | YKUSH                                     | 3     | `lager usb`     |
| Plugable     | UD-CAM and other RTS5411 docks[^plugable] | 4     | `lager usb`     |

[^plugable]: Unlike the Acroname and Yepkit hubs, Plugable ships no SDK. Control
    uses the standard USB hub class per-port power switching (PPPS), so support
    depends on the individual hub genuinely implementing it. Matched by VID:PID
    `2230:5411`, which Plugable reuses across its RTS5411 dock line; validated on
    a UD-CAM. **Only the four external Type-A sockets switch VBUS** — see below.
    Requires the udev rule for vendor `2230` (shipped in `99-instrument.rules`);
    without it libusb cannot open the hub and every operation fails with a
    permission error.

### Which Plugable dock ports actually switch power

A Plugable dock enumerates as **two cascaded 4-port hubs with identical
descriptors**. Both advertise per-port power switching
(`wHubCharacteristics=0x00a9`, `PortPwrCtrlMask=0xff`), so the descriptor cannot
tell them apart. Only the topology can:

| Tier                | What is on it                                                                         | Switches VBUS  |
| ------------------- | ------------------------------------------------------------------------------------- | -------------- |
| Downstream (user)   | the dock's four external Type-A sockets                                               | Yes — verified |
| Upstream (internal) | DP-AltMode billboard, audio codec, the dock's own ethernet, the link to the user tier | No             |

Lager exposes only the user tier. The four lager ports are therefore the four
external Type-A sockets. On the validated model, three are on the rear and one is
on the front. The dock's own network adapter can never be switched off by accident.

**Which lager port number is which physical socket is not defined.** Nothing ties
USB hub port order to the order of connectors on a case, and the order can differ
between models. Determine it once, empirically. Move a device that enumerates
through each socket in turn. Any USB stick or debug probe will do. Read back which
port it lands on:

```bash theme={null}
lager ssh --box <BOX> -- ls -l /sys/bus/usb/devices/<hub-path>
```

A **charge-only cable cannot do this**. It presents no device to the hub, so it
is indistinguishable from an empty socket (see the warning above).

<Warning>
  **Moving a cable between sockets silently repoints the net.** A `usb` net names a
  hub *port*, not the device plugged into it. After someone reseats a cable, the
  same command switches something else. There is no error, because from the hub's
  point of view nothing is wrong.

  This cuts the opposite way to every other instrument on the box. A debug probe,
  a USB-UART bridge, and a power supply carry a **serial number** address. Their
  nets follow the device wherever it is plugged in. A hub port net is
  addressed by **topology**, so it stays with the socket. Both are correct, and
  they behave oppositely under exactly the same physical change.

  So: after any bench rework, re-derive the map before running anything scripted.
  For automation that must survive reseating, locate the device by VID:PID under
  the hub. Then drive whichever port it is actually on, rather than a hard-coded
  net name.
</Warning>

The verification wrote a volatile setting to a device on a user port, cycled
power, and read the power-on default back. That is a real cold boot, not a
logical disconnect. The upstream tier's behavior comes from re-power timing
rather than from a register. A device there reasserts CONNECT within a
millisecond, so it never lost power. Treat that as strong evidence rather than
proof.

<Warning>
  **A powered-off port still shows up everywhere.** While a port is unpowered the
  hub raises no change bit, so Linux never polls it and never processes the
  disconnect. The device keeps its entry in `lsusb`, its `/sys` node, and any
  `/dev/ttyUSB*` it owns, for as long as the port stays off. The kernel logs
  `USB disconnect` only when power comes *back*. An off port stays off
  indefinitely; nothing re-powers it on its own.

  So **never test for a device's absence to decide whether a port is off.** It is
  wrong in both directions. Use `lager usb <net> state`, which reads the hub's own
  power bit, or `lager usb <net> cycle`, which waits for the port to re-enumerate
  after power returns.
</Warning>

<Note>
  **SuperSpeed docks are untested.** A dock linked over USB 3 enumerates as two
  virtual hubs, and VBUS drops only when power is cleared on both halves. Lager
  implements that pairing, but no SuperSpeed-linked dock was available to
  validate it. A topology that it cannot pair unambiguously is refused rather than
  half-switched. The validated configuration is a USB 2.0 link.
</Note>

**Recovering a port left unpowered.** `lager usb <net> recover` re-asserts power
on every port of that dock. If that cannot reach the hub, unbinding and
rebinding the kernel hub driver re-powers every port and re-enumerates the
children. That must be run **on the box host**, not in the container, which
mounts `/sys` read-only — replace the path with your hub's:

```bash theme={null}
echo 1-1.4.4:1.0 | sudo tee /sys/bus/usb/drivers/hub/unbind
echo 1-1.4.4:1.0 | sudo tee /sys/bus/usb/drivers/hub/bind
```

**Enables:**

* Automated USB device cycling
* Remote power reset of DUTs
* CI-controlled peripheral management

## Serial / UART Adapters

| Manufacturer | Model             | Control Command |
| ------------ | ----------------- | --------------- |
| Prolific     | PL2303            | `lager uart`    |
| Silicon Labs | CP210x            | `lager uart`    |
| FTDI         | FT232R            | `lager uart`    |
| Espressif    | ESP32 JTAG Serial | `lager uart`    |

**Enables:**

* Automated log capture
* Bootloader interaction
* Serial-based test automation

## Wireless

| Protocol                   | Control Command | Capabilities                                 |
| -------------------------- | --------------- | -------------------------------------------- |
| Bluetooth Low Energy (BLE) | `lager ble`     | Scan, connect, disconnect, service discovery |

**Enables:**

* Wireless device testing
* Remote connectivity validation
* Automated provisioning tests

***

# 6. Vision & Automation

## Cameras

| Manufacturer | Model                  | Control Command |
| ------------ | ---------------------- | --------------- |
| Logitech     | BRIO HD                | `lager webcam`  |
| Logitech     | BRIO                   | `lager webcam`  |
| Logitech     | BRIO 4K Stream Edition | `lager webcam`  |
| Logitech     | 4K Pro (Logi 4K Pro)   | `lager webcam`  |
| Logitech     | C930e                  | `lager webcam`  |
| Logitech     | C925e                  | `lager webcam`  |
| Logitech     | C922 Pro Stream        | `lager webcam`  |
| Logitech     | C920                   | `lager webcam`  |
| Logitech     | C615                   | `lager webcam`  |
| Logitech     | C270                   | `lager webcam`  |
| Logitech     | StreamCam              | `lager webcam`  |

**Enables:**

* Visual DUT inspection
* Automated visual verification

## Robotic Automation

| Manufacturer | Model  | Control Command |
| ------------ | ------ | --------------- |
| Rotrics      | Dexarm | `lager arm`     |

**Capabilities:**

* Position read/write
* Homing
* Motor enable/disable
* Acceleration configuration

**Enables:**

* Automated physical interaction with hardware
* Button press automation
* Mechanical test workflows

***

# Custom Instrument Support

Lager's modular architecture allows new instruments to be integrated
quickly through backend extensions.

If you use equipment not listed in this document, please contact
us to discuss integration support.

***

# Contact

Lager Data

[GitHub](https://github.com/lagerdata/lager)

[GitHub Issues](https://github.com/lagerdata/lager/issues)
