Skip to main content

canlink_tscan_sys/
lib.rs

1//! # `CANLink` TSCan Sys
2//! <a id="en"></a>
3//! [English](#en) | [中文](#zh)
4//!
5//! Low-level, unsafe Rust FFI bindings to the `LibTSCAN` C API.
6//!
7//! ## Warning
8//!
9//! This crate exposes raw C functions. For a safe, high-level API, use
10//! `canlink-tscan` instead.
11//!
12//! ## Platform
13//!
14//! Windows 10/11 x64 is validated. `LibTSCAN` runtime (`libTSCAN.dll` +
15//! `libTSCAN.lib`) is required and is not distributed by this project.
16//!
17//! ## Basic Usage
18//!
19//! ```rust,no_run
20//! use canlink_tscan_sys::*;
21//! use std::ptr;
22//!
23//! unsafe {
24//!     initialize_lib_tscan(true, false, true);
25//!
26//!     let mut device_count = 0;
27//!     tscan_scan_devices(&mut device_count);
28//!
29//!     let mut handle = 0;
30//!     tscan_connect(ptr::null(), &mut handle);
31//!
32//!     // ... use device ...
33//!
34//!     tscan_disconnect_by_handle(handle);
35//!     finalize_lib_tscan();
36//! }
37//! ```
38//!
39//! ## Related Crates
40//!
41//! - [`canlink-hal`](https://docs.rs/canlink-hal) - HAL abstraction
42//! - [`canlink-tscan`](https://docs.rs/canlink-tscan) - Safe `LibTSCAN` backend
43//! - [`canlink-cli`](https://docs.rs/canlink-cli) - CLI tool
44//!
45//! <a id="zh"></a>
46//! [中文](#zh) | [English](#en)
47//!
48//! `CANLink` TSCan Sys 提供 `LibTSCAN` C API 的底层 Rust FFI 绑定(不安全接口)。
49//!
50//! ## 警告
51//!
52//! 此 crate 直接暴露 C 函数。若需要安全、高层 API,请使用 `canlink-tscan`。
53//!
54//! ## 平台
55//!
56//! 当前仅在 Windows 10/11 x64 环境验证。需要 `LibTSCAN` 运行库
57//! (`libTSCAN.dll` + `libTSCAN.lib`),且本项目不分发该运行库。
58//!
59//! ## 基础用法
60//!
61//! ```rust,no_run
62//! use canlink_tscan_sys::*;
63//! use std::ptr;
64//!
65//! unsafe {
66//!     initialize_lib_tscan(true, false, true);
67//!
68//!     let mut device_count = 0;
69//!     tscan_scan_devices(&mut device_count);
70//!
71//!     let mut handle = 0;
72//!     tscan_connect(ptr::null(), &mut handle);
73//!
74//!     // ... 使用设备 ...
75//!
76//!     tscan_disconnect_by_handle(handle);
77//!     finalize_lib_tscan();
78//! }
79//! ```
80//!
81//! ## 相关包
82//!
83//! - [`canlink-hal`](https://docs.rs/canlink-hal) - HAL 抽象层
84//! - [`canlink-tscan`](https://docs.rs/canlink-tscan) - 安全的 `LibTSCAN` 后端
85//! - [`canlink-cli`](https://docs.rs/canlink-cli) - 命令行工具
86//!
87#![cfg(windows)]
88#![allow(non_camel_case_types)]
89#![allow(non_snake_case)]
90#![deny(missing_docs)]
91
92pub mod functions;
93pub mod types;
94
95#[cfg(test)]
96mod bundle;
97
98// Re-export everything for convenience
99pub use functions::*;
100pub use types::*;
101
102#[cfg(test)]
103mod tests {
104    use super::*;
105
106    #[test]
107    fn test_constants() {
108        assert_eq!(CHN1, 0);
109        assert_eq!(CHN2, 1);
110        assert_eq!(MASK_CANPROP_DIR_TX, 0x01);
111        assert_eq!(MASK_CANPROP_EXTEND, 0x04);
112    }
113
114    #[test]
115    fn test_enum_values() {
116        assert_eq!(TLIBCANFDControllerType::lfdtCAN as i32, 0);
117        assert_eq!(TLIBCANFDControllerType::lfdtISOCAN as i32, 1);
118        assert_eq!(TLIBCANFDControllerMode::lfdmNormal as i32, 0);
119    }
120}