Skip to content

OpenTraceCapture

OpenTraceCapture is the core library that provides hardware abstraction and signal acquisition capabilities for the OpenTraceLab ecosystem.

Overview

OpenTraceCapture handles communication with measurement hardware including: - Logic analyzers - Digital signal capture - Oscilloscopes - Analog waveform acquisition - Multimeters - Voltage, current, resistance measurements - Function generators - Signal generation - Power supplies - Programmable power sources - LCR meters - Inductance, capacitance, resistance - And many more device types

Key Features

Hardware Abstraction

  • Unified API across different device types
  • Automatic device detection and configuration
  • Hot-plug support for USB devices
  • Cross-platform compatibility (Linux, Windows, macOS)

Signal Acquisition

  • High-speed streaming capture
  • Configurable sample rates and buffer sizes
  • Trigger support (edge, pattern, protocol)
  • Real-time data processing

Device Support

OpenTraceCapture supports 200+ devices including: - FX2-based logic analyzers (fx2lafw firmware) - Saleae Logic series - Rigol oscilloscopes (DS1000, DS2000, DS4000 series) - Hantek oscilloscopes - UNI-T multimeters - Korad power supplies - And many more

Architecture

graph TD
    A[Application<br/>Your Code] --> D[OpenTraceCapture<br/>Core Library]
    B[OpenTraceView<br/>GUI] --> D
    C[OpenTraceCLI<br/>Command Line] --> D
    D --> E[USB Drivers<br/>libusb]
    D --> F[Serial Drivers<br/>libserialport]
    D --> G[Network APIs<br/>TCP/IP]
    E --> H[Logic Analyzers<br/>Function Generators]
    F --> I[Multimeters<br/>Power Supplies]
    G --> J[Oscilloscopes<br/>LCR Meters]
    style D fill:#4f46e5,stroke:#312e81,stroke-width:3px,color:#fff
    style A fill:#f8fafc,stroke:#4f46e5,color:#1e293b
    style B fill:#f8fafc,stroke:#4f46e5,color:#1e293b
    style C fill:#f8fafc,stroke:#4f46e5,color:#1e293b

Language Bindings

OpenTraceCapture provides bindings for multiple languages:

C++ Bindings

#include <libopentracecapturecxx/libopentracecapturecxx.hpp>
auto context = OpenTraceCapture::Context::create();
auto devices = context->drivers()["fx2lafw"]->scan();
auto device = devices[0];
device->open();

Python Bindings

import OpenTraceLab
context = OpenTraceLab.Context.create()
devices = context.drivers()["fx2lafw"].scan()
device = devices[0]
device.open()

Java Bindings

import org.OpenTraceLab.core.classes.*;
Context context = Context.create();
Driver driver = context.getDrivers().get("fx2lafw");
List<HardwareDevice> devices = driver.scan();

Supported Hardware

Logic Analyzers

  • FX2-based devices - 8/16 channels, up to 24MHz
  • Saleae Logic - High-speed USB logic analyzers
  • OpenBench LogicSniffer - Open hardware logic analyzer
  • IKALOGIC - ScanaPLUS, ScanaQuad series
  • Zeroplus - LAP-C series

Oscilloscopes

  • Rigol - DS1000Z, DS2000, DS4000 series
  • Hantek - DSO-2xxx, DSO-5xxx series
  • Siglent - SDS1000 series
  • Tektronix - TDS2000 series (via USBTMC)

Multimeters

  • UNI-T - UT61x, UT32x series
  • Voltcraft - VC-820, VC-840 series
  • Brymen - BM25x series
  • Fluke - 287, 289 (via serial)

Building from Source

Prerequisites

Required dependencies:

# Ubuntu/Debian
sudo apt install build-essential meson ninja-build pkg-config \
  libglib2.0-dev libusb-1.0-0-dev libzip-dev

# Fedora/RHEL
sudo dnf install gcc-c++ meson ninja-build pkgconfig \
  glib2-devel libusb1-devel libzip-devel

# macOS (with Homebrew)
brew install meson ninja pkg-config glib libusb libzip

Optional dependencies (for additional hardware support):

# Ubuntu/Debian
sudo apt install libftdi1-dev libserialport-dev libhidapi-dev \
  libnettle8-dev libieee1284-3-dev

# Fedora/RHEL  
sudo dnf install libftdi-devel libserialport-devel hidapi-devel \
  nettle-devel libieee1284-devel

Build Steps

# Clone repository
git clone https://github.com/OpenTraceLab/OpenTraceCapture.git
cd OpenTraceCapture

# Configure build
meson setup build --buildtype=release

# Compile
meson compile -C build

# Install
sudo meson install -C build

Build Options

# Enable all optional features
meson setup build --buildtype=release \
  -Dwith_nettle=enabled \
  -Dwith_ieee1284=enabled \
  -Dwith_gpib=enabled

# Development build with debug info
meson setup build --buildtype=debug

# Custom installation prefix
meson setup build --prefix=/usr/local

Configuration

Device Permissions (Linux)

# Install udev rules
sudo cp contrib/60-opentracelab.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
# Add user to plugdev group
sudo usermod -a -G plugdev $USER

Firmware Installation

Some devices require firmware upload:

# FX2-based devices need fx2lafw firmware
mkdir -p ~/.local/share/OpenTraceLab-firmware
cp fx2lafw-*.fw ~/.local/share/OpenTraceLab-firmware/

API Documentation

Integration Examples

collectd Plugin

Monitor devices with collectd:

LoadPlugin "opentracecapture"
<Plugin "opentracecapture">
   <Device "Temperature">
       Driver "uni-t-ut32x"
       conn "1a86.e008"
       MinimumInterval 1
   </Device>
</Plugin>

Custom Applications

#include <OpenTraceCapture/OpenTraceCapture.h>
struct sr_context *ctx;
struct sr_dev_inst *sdi;
sr_init(&ctx);
sr_driver_scan(driver, NULL);
sr_dev_open(sdi);
sr_session_start(session);

Contributing

  • Device drivers - Add support for new hardware
  • Protocol support - Extend communication protocols
  • Bug fixes - Improve stability and compatibility
  • Documentation - Help others use the library See our contributing guide for details.

Power Supplies

OpenTraceCapture supports various programmable power supplies for automated testing and device characterization.