SparkLink 无线通信协议的完整用户态基础设施,对标 BlueZ 的架构设计。
┌──────────────────────────────────────────────┐
Applications │ slctl slkconfig slkmon slkdump │
│ (REPL) (CLI) (monitor)(dump) │
└──────┬──────────┬──────────────┬────────┬────┘
│ D-Bus │ D-Bus │ │
┌──────▼──────────▼──────────────┘ │
Daemon │ slkd │
│ org.sparklink │
│ ┌──────────────────────────┐ │
│ │ AdapterIface │ │
│ │ DeviceIface (per device) │ │
│ │ SecurityIface │ │
│ │ SsapManagerIface │ │
│ │ RemoteServiceIface │ │
│ └──────────────────────────┘ │
└─────────────┬───────────────────────────┘
│
┌─────────────▼───────────────┐
Library │ libsparklink │
│ Adapter (async, tokio) │──── C FFI (ffi.rs)
│ Error / Event types │──── Python bindings
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
Protocol │ slk-protocol │
│ 99 ioctl wrappers (nix) │
│ 70+ repr(C) structs │
│ Generic Netlink constants │
└─────────────┬───────────────┘
│ ioctl / chardev
──────────────▼──────────────────────
Linux Kernel (net/sparklink/)
/dev/sparklink
| 类别 | 行数 |
|---|---|
| Rust | ~5200 |
| Python | ~550 |
| 测试 | 55 个 (36 Rust + 19 Python) |
| Crate | 7 个 |
cargo build --release --workspacesudo make install
sudo systemctl enable --now sparklink# 查看设备信息
slkconfig info
# 扫描 5 秒
slkconfig scan 5
# 连接设备
slkconfig connect AA:BB:CC:DD:EE:FF
# 查看安全状态
slkconfig security
# 列出 SSAP 服务
slkconfig servicesslctl
slctl> scan on
slctl> devices
slctl> connect AA:BB:CC:DD:EE:FF
slctl> info
slctl> disconnect 0x0001# 监控所有事件
slkmon
# 过滤连接事件
slkmon -t conn
# 输出到文件
slkmon -o capture.log# 十六进制+ASCII 输出
slkdump
# 原始二进制输出
slkdump -r > raw.bin内核 UAPI 绑定层。提供 99 个 ioctl 命令的类型安全包装 (基于 nix 宏),70+ 个 repr(C) 结构体 (经 ABI 验证与内核一致),以及 Generic Netlink 常量定义 (34 commands, 59 attributes)。
高层异步 API。Adapter 类型封装了设备管理、扫描、连接、安全配对、SSAP 服务、DLI 事件、PHY 配置等约 50 个方法。基于 tokio AsyncFd 实现非阻塞事件轮询。同时提供 C FFI 层 (ffi.rs,20 个导出函数) 和自动生成的 sparklink.h 头文件。
D-Bus 管理守护进程,使用 zbus 5 在 org.sparklink 总线名称下暴露六个接口。支持 TOML 配置 (/etc/sparklink/main.conf)、systemd 集成、tracing-journald 结构化日志。设备和连接对象在事件驱动下动态注册。
离线配置命令行工具,提供 22 个子命令,覆盖设备信息、DLI 控制器、PHY 参数、扫描、连接、安全配对、SSAP 服务读写和远程操作。基于 clap 4 的 derive API。
交互式控制台 (对标 bluetoothctl)。基于 rustyline 15 的 REPL,通过 D-Bus 与 slkd 通信,支持 16 个命令,含自动补全和历史记录。
协议分析器 (对标 btmon)。从内核捕获 DLI 事件,支持事件类型过滤、结构化解码 (6 种事件类型)、hexdump 输出和文件写入。
轻量级帧转储工具 (对标 hcidump)。支持十六进制+ASCII 混合输出和原始二进制输出模式。
#include <sparklink.h>
SlkAdapter *adpt = slk_adapter_open("/dev/sparklink");
SciDevInfo info;
slk_device_info(adpt, &info);
printf("Device: %s\n", info.name);
slk_adapter_free(adpt);编译: gcc app.c -lsparklink -o app
from sparklink import Adapter
with Adapter("/dev/sparklink") as adpt:
info = adpt.device_info()
print(f"Device: {info.device_name}")
adpt.start_scan()
ev = adpt.poll_event()
adpt.stop_scan()安装: pip install -e bindings/python/
| 接口 | 对象路径 | 功能 |
|---|---|---|
| org.sparklink.Manager | /org/sparklink | 适配器枚举 |
| org.sparklink.Adapter | /org/sparklink/slk0 | 扫描、连接管理 |
| org.sparklink.Device | /org/sparklink/slk0/dev_* | 设备属性 |
| org.sparklink.Security | /org/sparklink/slk0/security | 配对、加密 |
| org.sparklink.ServiceManager | /org/sparklink/slk0/services | SSAP 本地服务 |
| org.sparklink.RemoteService | /org/sparklink/slk0/conn_* | SSAP 远程服务 |
dpkg-buildpackage -us -uc产出: sparklink, libsparklink0, libsparklink-dev 三个包。
rpmbuild -ba sparklink.spec产出: sparklink, libsparklink, libsparklink-devel 三个包。
GitHub Actions 工作流 (.github/workflows/ci.yml) 包含 7 个 job:
check: cargo checktest: cargo testclippy: lint 检查fmt: rustfmt 格式检查cbindgen: C 头文件生成一致性验证build-release: release 构建 + artifact 上传python-check: Python 绑定语法验证
遵循星闪技术联盟标准:
- T/XS 00001-2025 总体技术要求
- T/XS 10002-2025 星闪链路接口
- T/XS 10003-2025 安全规范
- T/XS 20001-2025 接入层通用要求
- T/XS 20002-2025 SLE 规范
- T/XS 50003-2025 SSAP 规范
- T/XS 50004-2025 配置传输协议