Open Source · MIT Licensed

Your SM2 Pro works
on macOS & Linux now.

Open-source USB driver for the SM2 Pro (Scanmatik 2 Pro) J2534 CAN adapter. python-can compatible. No Windows required. No kernel driver. No kext.

$ pip install sm2can

Built for the real world

Everything you need to use your SM2 Pro hardware on the platform you actually work on.

🔌

Userspace USB Transport

Communicates directly via libusb. No kernel module, no kext signing, no sudo required after initial udev setup. Plug in and go.

🐍

python-can Native Plugin

Registers as a native python-can Bus interface. can.Bus(interface='sm2') works out of the box with your existing CAN workflows.

🔍

Protocol Auto-Detection

Automatic frame format and checksum detection across Scanmatik protocol variants. Extensible codec framework for protocol evolution.

📡

USB Capture Decoder

Built-in pcap/pcapng decoder extracts and reverse-engineers the Scanmatik wire protocol from a single Windows USB capture. No Wireshark or tshark required.

🛡️

Legally Protected

Clean room reverse engineering with case law citations. Sega v. Accolade, Sony v. Connectix, EU Directive 2009/24/EC. Every byte observed, nothing stolen.

🍺

Homebrew & PyPI

Install via brew tap aldoguzman97/sm2can or pip install sm2can. First-class packaging for macOS and Linux with CLI tools included.

Project Status

What's working, what's next.

USB TransportComplete — libusb
python-can PluginComplete — Bus interface
Capture DecoderComplete — pcap/pcapng
CLI Toolssm2can, sm2can-probe
Protocol CodecFramework ready — needs captures
Bluetooth SPPArchitecture scaffolded

Simple by design

Three lines to talk CAN. Everything else is handled.

python-can usage
import can

# SM2 Pro auto-detected via python-can plugin
bus = can.Bus(interface='sm2')

# Send a CAN frame
msg = can.Message(
    arbitration_id=0x340,
    data=[0x04, 0x00, 0x00, 0x04,
          0x70, 0x00, 0x89, 0x11]
)
bus.send(msg)

# Receive
response = bus.recv(timeout=1.0)
CLI tools
# Probe your SM2 Pro hardware
$ sm2can-probe

# Decode a Windows USB capture
$ sm2can-capture decode capture.pcapng

# Interactive CAN shell
$ sm2can --bitrate 500000

# Version check
$ sm2can --version
sm2can 0.1.0

# Install from Homebrew tap
$ brew tap aldoguzman97/sm2can
$ brew install sm2can

Compatible Hardware

Tested and targeted devices.

SM2 Pro (Scanmatik 2 Pro)

Primary target. USB VID 0x20A2, PID 0x0001. Vendor-specific USB class, 2 bulk endpoints. Requires 12V from OBD connector for full operation.

USB

Scanmatik 2 (Original)

Earlier hardware revision. Same USB protocol family. May work with minimal adaptation once protocol bytes are confirmed.

USB

SM2 Pro Bluetooth

SPP (Serial Port Profile) transport architecture scaffolded. Ready for community implementation. 10-50ms latency — suitable for diagnostics, not real-time control.

Bluetooth · Planned

Frequently Asked Questions

What people ask before plugging in.

Can I use my SM2 Pro on macOS?+

Yes. SM2CAN is a userspace USB driver that communicates via libusb — no kernel extension or driver signing needed. Install with pip install sm2can and your SM2 Pro works on macOS 12+.

Does it work on Linux?+

Yes. Full Linux support with included udev rules for automatic device permissions. Works on any distribution with Python 3.8+ and libusb.

Is this compatible with python-can?+

Yes. SM2CAN registers as a native python-can Bus plugin via entry points. After installation, can.Bus(interface='sm2') works with all your existing python-can code, scripts, and tools.

Is reverse engineering my own hardware legal?+

Yes. Clean room reverse engineering of purchased hardware for interoperability is well-established in US and EU law. Sega v. Accolade (1992), Sony v. Connectix (2000), and EU Directive 2009/24/EC all affirm this right. See LEGAL.md in the repository for full citations.

What's still missing?+

The actual Scanmatik protocol bytes. The device requires 12V from the OBD connector to boot its application firmware — USB 5V alone leaves the bulk endpoints silent. One 5-minute USB capture from a Windows session completes the protocol decode for everyone. See the CONTRIBUTING guide.

How can I contribute?+

The most impactful contribution is a USB capture: install USBPcap on Windows, plug in your SM2 Pro with 12V from the OBD harness, run a short Scanmatik session, and submit the .pcapng file to the GitHub issues page. The built-in capture decoder handles the rest.