Skip to main content
The Lager Python SDK provides a powerful, object-oriented interface for controlling hardware and automating tests on your Device Under Test (DUT). It enables programmatic control of power supplies, sensors, debug probes, and more.

Import

from lager import Net, NetType  # Convenience import for Net and NetType

Core Classes

ClassDescriptionImport
binariesExecute custom binariesfrom lager.binaries import run_custom_binary
NetCore class for managing hardware connectionsfrom lager import Net, NetType
CentralBLE scanning and connectionfrom lager.ble import Central, Client

Net Types

The SDK supports various net types for different hardware:
NetTypeDescriptionHardware
NetType.PowerSupplyProgrammable power supplyRigol DP800, Keithley, Keysight
NetType.PowerSupply2QTwo-quadrant supply (solar sim)EA PSI/EL series
NetType.BatteryBattery simulatorKeithley 2281S
NetType.ELoadElectronic loadRigol DL3000
NetType.AnalogOscilloscope analog inputRigol MSO5000
NetType.LogicLogic analyzer inputRigol MSO5000
NetType.WaveformWaveform generatorRigol MSO5000
NetType.GPIODigital I/OLabJack T7
NetType.ADCAnalog-to-digital converterLabJack T7
NetType.DACDigital-to-analog converterLabJack T7
NetType.ThermocoupleTemperature sensorPhidget
NetType.RotationRotary encoderPhidget
NetType.WattMeterPower meterYocto-Watt
NetType.UARTSerial communicationUSB Serial
NetType.DebugDebug probeJ-Link, pyOCD
NetType.ArmRobotic armRotrics Dexarm
NetType.UsbUSB port controlAcroname, YKUSH
NetType.WifiWiFi moduleLager Box WiFi
NetType.ActuateActuator controlDexarm actuator

Quick Start

List Available Nets

from lager import Net

nets = Net.list_saved()
for net in nets:
    print(f"{net['name']}: {net['role']}")

Control a Power Supply

from lager import Net, NetType

# Get the power supply net
psu = Net.get('VDD', type=NetType.PowerSupply)

# Configure and enable
psu.set_voltage(3.3)
psu.set_current(0.5)
psu.enable()

# Read measurements
print(f"Voltage: {psu.voltage()}V")
print(f"Current: {psu.current()}A")

# Disable when done
psu.disable()

Read an ADC

from lager import Net, NetType

adc = Net.get('SENSOR', type=NetType.ADC)
voltage = adc.input()
print(f"Voltage: {voltage}V")

Control GPIO

from lager import Net, NetType

# Read input
button = Net.get('BUTTON', type=NetType.GPIO)
state = button.input()

# Set output
led = Net.get('LED', type=NetType.GPIO)
led.output(1)  # HIGH
led.output(0)  # LOW

Control Debug Probe

from lager import Net, NetType

# Get the debug net
debug = Net.get('jlink1', type=NetType.Debug)

# Connect and flash firmware
debug.connect()
debug.flash(['firmware.hex'])
debug.reset()

Control USB Hub

from lager import Net, NetType

# Get the USB net
usb = Net.get('SENSOR_USB', type=NetType.Usb)

# Power control
usb.enable()      # Power on
usb.disable()     # Power off
usb.toggle()      # Toggle state

Complete Example

from lager import Net, NetType
import time

# 1. Flash firmware
debug = Net.get('jlink1', type=NetType.Debug)
debug.connect()
debug.flash(['firmware.hex'])
debug.reset()
print("Firmware flashed")

# 2. Power on USB peripheral
usb = Net.get('SENSOR_USB', type=NetType.Usb)
usb.enable()
print("USB sensor powered on")

# 3. Enable main power
main_power = Net.get("VDD_MAIN", type=NetType.PowerSupply)
main_power.set_voltage(3.3)
main_power.enable()
print("Main power enabled")

# 4. Read sensor
sensor = Net.get("TEMP_SENSE", type=NetType.ADC)
temperature = sensor.input()
print(f"Temperature: {temperature}V")

# 5. Clean up
main_power.disable()
usb.disable()
print("Test complete")

API Reference

Core Classes

PageDescription
Custom BinariesExecute custom binaries on the Lager Box
NetHardware net management and core operations
DebugDevice flashing, reset, and debug control (includes RTT)
USBUSB device power control

Power & Simulation

PageDescription
Power SupplyProgrammable power supply control
BatteryBattery simulation and testing
SolarSolar panel simulation
Electronic LoadElectronic load control
Watt MeterPower measurement

Measurement

PageDescription
ScopeOscilloscope waveform capture and measurements
Logic AnalyzerDigital signal capture and protocol decode
ADCAnalog-to-digital conversion
ThermocoupleTemperature measurement

I/O & Communication

PageDescription
GPIODigital input/output control
DACDigital-to-analog conversion
UARTUART net serial communication
SerialNative pyserial support
BLEBluetooth Low Energy communication
WiFiWiFi configuration

Utilities

PageDescription
Robot ArmRobotic arm control
WebcamWebcam streaming and video capture

Error Handling

from lager import Net, NetType, InvalidNetError

try:
    net = Net.get('INVALID_NET', NetType.Analog)
except InvalidNetError as e:
    print(f"Net not found: {e}")
except Exception as e:
    print(f"Error: {e}")

Notes

  • Always call disable() when finished with power-related nets
  • Simple nets (GPIO, ADC, DAC) don’t require enable()/disable() calls
  • Complex nets (PowerSupply, Battery, Analog) require enable() before use
  • Net names must match those configured in the Lager system
  • Use try/except blocks for robust error handling