Skip to content

Schildkroet/CANgaroo

 
 

Repository files navigation

CANgaroo

Open-source CAN bus analyzer for Linux 🐧 / Windows 🪟

🔩 Supported Interfaces & Hardware:

Interface Linux Windows Notes
SocketCAN Any kernel CAN interface (can0, vcan0, …)
PEAK PCAN PCAN-USB, PCAN-USB Pro, PCAN-PCIe, … via PCAN-Basic SDK (CONFIG+=peakcan)
Kvaser USB/CAN Leaf and other Kvaser devices via CANlib SDK (CONFIG+=kvaser)
Vector VN-series and other Vector devices via Qt serialbus (XL Driver Library required at runtime)
TinyCAN TinyCAN USB adapters via Qt serialbus (enable in Measurement > Driver menu)
Candlelight / CANable CANable (Candlelight firmware), MKS CANable, cantact, …
SLCAN CANable (SLCAN firmware), Arduino CAN shields
CANblaster UDP-based remote CAN via CANblaster
GrIP GrIP protocol

⚙️ Features

  • Real-time CAN/CAN-FD Decoding: Support for standard and high-speed flexible data-rate frames.
  • Wide Hardware Compatibility: Works with SocketCAN (Linux), PEAK PCAN, Kvaser, Vector, TinyCAN, CANable, Candlelight, SLCAN, and CANblaster (UDP).
  • DBC Database Support: Load multiple .dbc files to instantly decode frames into human-readable signals.
  • Powerful Data Visualization: Integrated Graphing tools supporting Time-series, Scatter charts, Text-based monitoring, and interactive Gauge views with zoom and live tooltips.
  • Advanced Filtering & Logging: Isolate critical data with live filters and export captures for offline analysis.
  • Python Scripting: Built-in script editor with an embedded Python interpreter (via pybind11). Send and receive CAN messages, decode signals using loaded DBC files, and automate tasks. Scripts can be started manually or automatically with the measurement.
  • Trace Replay: Replay captured CAN logs (Vector ASC, candump, PCAP, and PCAPng formats) with adjustable speed, per-message RX/TX direction filtering, channel mapping to live interfaces, and optional autoplay with the measurement. Supports classic CAN, CAN-FD, RTR, and error frames.
  • Multiple Export Formats: Save traces as Vector ASC, Vector MDF4, Linux candump, PCAP, or PCAPng (Wireshark-compatible).
  • Modern Workspace: A clean, dockable userinterface optimized for multi-monitor setups.


Cangaroo Trace View

Languages

  • 🇩🇪 German
  • 🇺🇸 English
  • 🇪🇸 Spain
  • 🇨🇳 Chinese

🛠️ Building

🐧 Linux

Install dependencies:

Distribution Command
Ubuntu / Debian sudo apt install build-essential qt6-base-dev qt6-charts-dev qt6-serialport-dev qt6-serialbus-dev qt6-svg-dev qt6-tools-dev qt6-l10n-tools libqt6opengl6-dev libnl-3-dev libnl-route-3-dev python3-dev pybind11-dev pkg-config
Fedora sudo dnf install gcc-c++ make qt6-qtbase-devel qt6-qtcharts-devel qt6-qtserialport-devel qt6-qtserialbus-devel qt6-qtsvg-devel qt6-qttools-devel libnl3-devel python3-devel pybind11-devel pkgconfig
Arch Linux sudo pacman -S base-devel qt6-base qt6-charts qt6-serialport qt6-serialbus qt6-svg qt6-tools libnl python pybind11 pkgconf

Build:

qmake6
make -j$(nproc)

The binary will be in bin/cangaroo.

SocketCAN privileges

CANgaroo uses ip link to configure SocketCAN interfaces (bitrate, sample point, CAN FD), which requires CAP_NET_ADMIN. The recommended way is a targeted sudoers rule so no password prompt appears:

sudo groupadd cangaroo
sudo usermod -aG cangaroo $USER

Create /etc/sudoers.d/cangaroo:

%cangaroo ALL=(ALL) NOPASSWD: /sbin/ip link set * down, /sbin/ip link set * up type can *

Log out and back in for the group membership to take effect. If you prefer not to use a group, you can instead grant CAP_NET_ADMIN directly to the ip binary (applies to all users):

sudo setcap cap_net_admin+ep /sbin/ip

Note: If the interface is set to "Configured by OS" in the setup dialog, CANgaroo will not touch the interface configuration and no elevated privileges are needed.

🪟 Windows

  • Install Qt 6 (Community / Open Source) including the Qt Serial Bus component.
  • Install Python 3 and pybind11 (pip install pybind11).
  • Open cangaroo.pro in Qt Creator and build.

Deployment

Include the required Qt6 libraries or run windeployqt on the .exe:

windeployqt --release cangaroo.exe

Optional hardware drivers

PEAK PCAN (CONFIG+=peakcan) — Windows only:

  1. Download PCAN-Basic SDK and extract to src/driver/PeakCanDriver/pcan-basic-api/.
  2. Build with qmake CONFIG+=peakcan (or add peakcan to the Qt Creator qmake arguments).
  3. Place PCANBasic.dll (from pcan-basic-api/x64/) next to the built .exe.

Kvaser (CONFIG+=kvaser) — Linux and Windows:

Linux:

  1. Download and build linuxcan (V5.51.461 or newer):
    tar -xf linuxcan.tar.gz
    make -C linuxcan/canlib
    sudo make -C linuxcan/canlib install
    sudo ldconfig
  2. Build with qmake6 CONFIG+=kvaser.

Windows:

  1. Install the Kvaser CANlib SDK (V5.51.461 or newer).
  2. Build with qmake CONFIG+=kvaser CANLIB_DIR="C:/path/to/Kvaser/Canlib".
  3. Place canlib32.dll (from Canlib/Bin/) next to the built .exe.

Vector (always enabled) — Windows only:

  • Install the Vector XL Driver Library on the target machine.
  • No build-time SDK needed — Qt's serialbus module handles the integration.

TinyCAN (toggle in Measurement > Driver menu) — Linux and Windows:

  • Install the TinyCAN driver/library on the target machine.
  • No build-time SDK needed — Qt's serialbus module handles the integration.
  • Enable the driver via Measurement > Driver > TinyCAN and restart the application.

ARXML to DBC Conversion

Cangaroo natively supports DBC. If you have ARXML files, you can convert them using canconvert:

# Install canconvert
pip install canconvert

# Convert ARXML to DBC
canconvert TCU.arxml TCU.dbc

📥 Download

Download the latest release from the Releases.

📜 Credits

Written by Hubert Denkmair hubert@denkmair.de

Further development by:

About

Open source CAN bus analyzer software - with support for CANable / CANable2 / USB2CANFDV1, CANFD, and other new features

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

No contributors

Languages

  • C++ 93.0%
  • C 5.8%
  • QMake 1.1%
  • Shell 0.1%