canlink-tscan 0.3.2

Rust CAN backend via LibTSCAN, validated on TOSUN hardware
Documentation

CANLink TSCan Backend

Crates.io Documentation License

English | 中文

CANLink TSCan Backend is the real-hardware backend built on LibTSCAN. It implements CanBackend from canlink-hal and connects to CAN hardware that LibTSCAN can recognize.

Validation Scope

  • Real-hardware regression in this repository is limited to TOSUN-related devices.
  • LibTSCAN headers and API docs enumerate multiple device types on the same backend path, but they are not individually validated here.
  • If a future vendor SDK path is required, it should land as a separate backend crate rather than extending canlink-tscan.

Documented Device Types (Not Yet Individually Validated)

The list below is derived from official TSMaster/LibTSCAN headers and API docs (see docs/vendor/tsmaster/README.md). It indicates device types visible on the same backend path, not a compatibility promise for each device.

Device Type Enum Value Status
TOSUN TCP device TS_TCP_DEVICE Documented, not validated
TOSUN USB EX device TS_USB_DEVICE_EX Documented, not validated
TOSUN Wireless OBD TS_WIRELESS_OBD Documented, not validated
TOSUN TC1005 series TS_TC1005_DEVICE Documented, not validated
Vector XL XL_USB_DEVICE Documented, not validated
PEAK / PCAN PEAK_USB_DEVICE Documented, not validated
Kvaser KVASER_USB_DEVICE Documented, not validated
ZLG ZLG_USB_DEVICE Documented, not validated
Intrepid / Vehicle Spy devices ICS_USB_DEVICE Documented, not validated
IXXAT IXXAT_USB_DEVICE Documented, not validated
CANable CANABLE_USB_DEVICE Documented, not validated

Requirements

  • Windows 10/11 x64 (validated; other platforms not validated)
  • LibTSCAN runtime (libTSCAN.dll + libTSCAN.lib)
  • LibTSCAN is not distributed by this project

Installation

[dependencies]

canlink-hal = "0.3.0"

canlink-tscan = "0.3.0"

Setup LibTSCAN

  1. Download the TSMaster API bundle or install TSMaster to obtain LibTSCAN.
  2. Prepare libTSCAN.dll and libTSCAN.lib (x64).
  3. Configure runtime paths by following docs/guides/libtscan-setup-guide.md.

This backend depends on the LibTSCAN runtime, not the TSMaster GUI itself.

Quick Start

use canlink_hal::{BackendConfig, CanBackend, CanMessage};
use canlink_tscan::TSCanBackend;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut backend = TSCanBackend::new();
    let config = BackendConfig::new("tscan");

    backend.initialize(&config)?;
    backend.open_channel(0)?;

    let msg = CanMessage::new_standard(0x123, &[0x01, 0x02, 0x03, 0x04])?;
    backend.send_message(&msg)?;

    backend.close_channel(0)?;
    backend.close()?;
    Ok(())
}

TSCan Daemon Workaround (Vendor Bug)

To isolate a known vendor DLL hang in DISCONNECT_*, canlink-tscan supports an out-of-process daemon path and enables it by default. When the vendor provides a stable fix, this workaround can be removed or downgraded in a future release.

canlink-tscan.toml

use_daemon = true

request_timeout_ms = 2000

disconnect_timeout_ms = 3000

restart_max_retries = 3

recv_timeout_ms = 0

# daemon_path = "C:/path/to/canlink-tscan-daemon.exe"

Config Priority

Priority from high to low:

  1. BackendConfig.parameters
  2. canlink-tscan.toml
  3. Built-in defaults

When use_daemon = false, the backend falls back to direct DLL calls.

Related Crates

Documentation

License

MIT OR Apache-2.0

中文 | English

CANLink TSCan Backend 是基于 LibTSCAN 的真实硬件后端,实现了 canlink-halCanBackend,用于连接 LibTSCAN 可识别的 CAN 硬件。

验证范围

  • 当前仓库的实机回归仅覆盖同星 / TOSUN 相关硬件。
  • LibTSCAN 头文件与 API 文档列出了更多设备类型,但尚未逐项验证。
  • 若未来需要走厂商原生 SDK 路径,应以新的独立 backend crate 落地,而不是扩展 canlink-tscan

文档可见但未专项验证的设备类型

下表依据官方 TSMaster/LibTSCAN 头文件与 API 文档整理(来源见 docs/vendor/tsmaster/README.md)。它表示同一后端路径下文档可见的设备类型,并不代表逐项兼容承诺。

设备类型 文档枚举值 当前状态
同星 TCP 设备 TS_TCP_DEVICE 文档可见,未专项验证
同星扩展 USB 设备 TS_USB_DEVICE_EX 文档可见,未专项验证
同星无线 OBD TS_WIRELESS_OBD 文档可见,未专项验证
同星 TC1005 系列 TS_TC1005_DEVICE 文档可见,未专项验证
Vector XL XL_USB_DEVICE 文档可见,未专项验证
PEAK / PCAN PEAK_USB_DEVICE 文档可见,未专项验证
Kvaser KVASER_USB_DEVICE 文档可见,未专项验证
ZLG ZLG_USB_DEVICE 文档可见,未专项验证
Intrepid / Vehicle Spy 生态设备 ICS_USB_DEVICE 文档可见,未专项验证
IXXAT IXXAT_USB_DEVICE 文档可见,未专项验证
CANable CANABLE_USB_DEVICE 文档可见,未专项验证

环境要求

  • Windows 10/11 x64(已验证;其他平台未验证)
  • LibTSCAN 运行库(libTSCAN.dll + libTSCAN.lib
  • 本项目不分发 LibTSCAN 文件

安装

[dependencies]

canlink-hal = "0.3.0"

canlink-tscan = "0.3.0"

安装与配置 LibTSCAN

  1. 下载 TSMaster API 包或安装 TSMaster 获取 LibTSCAN。
  2. 准备 libTSCAN.dlllibTSCAN.lib(x64)。
  3. 参考 docs/guides/libtscan-setup-guide.md 配置运行库路径。

本后端依赖的是 LibTSCAN 运行库,而不是 TSMaster GUI 本身。

快速开始

use canlink_hal::{BackendConfig, CanBackend, CanMessage};
use canlink_tscan::TSCanBackend;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut backend = TSCanBackend::new();
    let config = BackendConfig::new("tscan");

    backend.initialize(&config)?;
    backend.open_channel(0)?;

    let msg = CanMessage::new_standard(0x123, &[0x01, 0x02, 0x03, 0x04])?;
    backend.send_message(&msg)?;

    backend.close_channel(0)?;
    backend.close()?;
    Ok(())
}

TSCan 守护进程规避方案(厂商 DLL 问题)

为隔离 DISCONNECT_* 调用的厂商 DLL 卡死问题,canlink-tscan 支持独立守护进程路径,并默认启用。若厂商提供稳定修复,此规避可在后续版本移除或降级。

canlink-tscan.toml

use_daemon = true

request_timeout_ms = 2000

disconnect_timeout_ms = 3000

restart_max_retries = 3

recv_timeout_ms = 0

# daemon_path = "C:/path/to/canlink-tscan-daemon.exe"

配置优先级

从高到低:

  1. BackendConfig.parameters
  2. canlink-tscan.toml
  3. 内置默认值

use_daemon = false 时,后端会回退到直接 DLL 调用路径。

相关包

文档

许可证

MIT OR Apache-2.0