1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//! # `CANLink` TSCan Backend
//! <a id="en"></a>
//! [English](#en) | [中文](#zh)
//!
//! Safe Rust backend for `LibTSCAN`-backed CAN hardware. This crate implements
//! `CanBackend` from `canlink-hal`.
//!
//! ## Validation Scope
//!
//! - Real-hardware regression in this repository is limited to TOSUN-related devices.
//! - `LibTSCAN` documentation lists more device types on the same backend path, but
//! they are not individually validated here.
//! - Future vendor-native SDK paths should land as separate backend crates.
//!
//! ## Requirements
//!
//! - Windows 10/11 x64 (validated)
//! - `LibTSCAN` runtime (`libTSCAN.dll` + `libTSCAN.lib`)
//! - `LibTSCAN` is not distributed by this project
//!
//! ## Quick Start
//!
//! ```rust,no_run
//! use canlink_hal::{BackendConfig, CanBackend, CanMessage};
//! use canlink_tscan::TSCanBackend;
//!
//! # fn main() -> Result<(), canlink_hal::CanError> {
//! let mut backend = TSCanBackend::new();
//! let config = BackendConfig::new("tscan");
//!
//! backend.initialize(&config)?;
//! backend.open_channel(0)?;
//!
//! let msg = CanMessage::new_standard(0x123, &[1, 2, 3, 4])?;
//! 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_*`, this crate supports an
//! out-of-process daemon path and enables it by default. See the crate README for
//! configuration details.
//!
//! ## Related Crates
//!
//! - [`canlink-hal`](https://docs.rs/canlink-hal) - Core HAL
//! - [`canlink-tscan-sys`](https://docs.rs/canlink-tscan-sys) - `LibTSCAN` FFI bindings
//! - [`canlink-cli`](https://docs.rs/canlink-cli) - CLI tool
//!
//! <a id="zh"></a>
//! [中文](#zh) | [English](#en)
//!
//! 基于 `LibTSCAN` 的安全 Rust 后端,实现 `canlink-hal` 的 `CanBackend`。
//!
//! ## 验证范围
//!
//! - 当前仓库的实机回归仅覆盖同星 / TOSUN 相关硬件。
//! - `LibTSCAN` 文档列出的其他设备类型尚未逐项验证。
//! - 若未来需要厂商原生 SDK 路径,应以新的独立后端 crate 落地。
//!
//! ## 环境要求
//!
//! - Windows 10/11 x64(已验证)
//! - `LibTSCAN` 运行库(`libTSCAN.dll` + `libTSCAN.lib`)
//! - 本项目不分发 `LibTSCAN` 文件
//!
//! ## 快速开始
//!
//! ```rust,no_run
//! use canlink_hal::{BackendConfig, CanBackend, CanMessage};
//! use canlink_tscan::TSCanBackend;
//!
//! # fn main() -> Result<(), canlink_hal::CanError> {
//! let mut backend = TSCanBackend::new();
//! let config = BackendConfig::new("tscan");
//!
//! backend.initialize(&config)?;
//! backend.open_channel(0)?;
//!
//! let msg = CanMessage::new_standard(0x123, &[1, 2, 3, 4])?;
//! backend.send_message(&msg)?;
//!
//! backend.close_channel(0)?;
//! backend.close()?;
//! # Ok(())
//! # }
//! ```
//!
//! ## TSCan 守护进程规避方案(厂商 DLL 问题)
//!
//! 为隔离 `DISCONNECT_*` 调用的厂商 DLL 卡死问题,本 crate 支持独立守护进程路径并默认启用。
//! 具体配置见 crate README。
//!
//! ## 相关包
//!
//! - [`canlink-hal`](https://docs.rs/canlink-hal) - 核心 HAL
//! - [`canlink-tscan-sys`](https://docs.rs/canlink-tscan-sys) - `LibTSCAN` FFI 绑定
//! - [`canlink-cli`](https://docs.rs/canlink-cli) - 命令行工具
//!
pub use ;
pub use ;
// Re-export commonly used types from canlink-hal
pub use ;