Skip to content

OpenSparklink/sparklink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

35 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SparkLink Userspace Infrastructure

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 --workspace

ๅฎ‰่ฃ…

sudo make install
sudo systemctl enable --now sparklink

ไฝฟ็”จ slkconfig

# ๆŸฅ็œ‹่ฎพๅค‡ไฟกๆฏ
slkconfig info

# ๆ‰ซๆ 5 ็ง’
slkconfig scan 5

# ่ฟžๆŽฅ่ฎพๅค‡
slkconfig connect AA:BB:CC:DD:EE:FF

# ๆŸฅ็œ‹ๅฎ‰ๅ…จ็Šถๆ€
slkconfig security

# ๅˆ—ๅ‡บ SSAP ๆœๅŠก
slkconfig services

ไฝฟ็”จ slctl ไบคไบ’ๅผๆŽงๅˆถๅฐ

slctl
slctl> scan on
slctl> devices
slctl> connect AA:BB:CC:DD:EE:FF
slctl> info
slctl> disconnect 0x0001

ไฝฟ็”จ slkmon ๅ่ฎฎๅˆ†ๆž

# ็›‘ๆŽงๆ‰€ๆœ‰ไบ‹ไปถ
slkmon

# ่ฟ‡ๆปค่ฟžๆŽฅไบ‹ไปถ
slkmon -t conn

# ่พ“ๅ‡บๅˆฐๆ–‡ไปถ
slkmon -o capture.log

ไฝฟ็”จ slkdump ๅธงๆ•่Žท

# ๅๅ…ญ่ฟ›ๅˆถ+ASCII ่พ“ๅ‡บ
slkdump

# ๅŽŸๅง‹ไบŒ่ฟ›ๅˆถ่พ“ๅ‡บ
slkdump -r > raw.bin

Crate ่ฏดๆ˜Ž

slk-protocol

ๅ†…ๆ ธ UAPI ็ป‘ๅฎšๅฑ‚ใ€‚ๆไพ› 99 ไธช ioctl ๅ‘ฝไปค็š„็ฑปๅž‹ๅฎ‰ๅ…จๅŒ…่ฃ… (ๅŸบไบŽ nix ๅฎ)๏ผŒ70+ ไธช repr(C) ็ป“ๆž„ไฝ“ (็ป ABI ้ชŒ่ฏไธŽๅ†…ๆ ธไธ€่‡ด)๏ผŒไปฅๅŠ Generic Netlink ๅธธ้‡ๅฎšไน‰ (34 commands, 59 attributes)ใ€‚

libsparklink

้ซ˜ๅฑ‚ๅผ‚ๆญฅ APIใ€‚Adapter ็ฑปๅž‹ๅฐ่ฃ…ไบ†่ฎพๅค‡็ฎก็†ใ€ๆ‰ซๆใ€่ฟžๆŽฅใ€ๅฎ‰ๅ…จ้…ๅฏนใ€SSAP ๆœๅŠกใ€DLI ไบ‹ไปถใ€PHY ้…็ฝฎ็ญ‰็บฆ 50 ไธชๆ–นๆณ•ใ€‚ๅŸบไบŽ tokio AsyncFd ๅฎž็Žฐ้ž้˜ปๅกžไบ‹ไปถ่ฝฎ่ฏขใ€‚ๅŒๆ—ถๆไพ› C FFI ๅฑ‚ (ffi.rs๏ผŒ20 ไธชๅฏผๅ‡บๅ‡ฝๆ•ฐ) ๅ’Œ่‡ชๅŠจ็”Ÿๆˆ็š„ sparklink.h ๅคดๆ–‡ไปถใ€‚

slkd

D-Bus ็ฎก็†ๅฎˆๆŠค่ฟ›็จ‹๏ผŒไฝฟ็”จ zbus 5 ๅœจ org.sparklink ๆ€ป็บฟๅ็งฐไธ‹ๆšด้œฒๅ…ญไธชๆŽฅๅฃใ€‚ๆ”ฏๆŒ TOML ้…็ฝฎ (/etc/sparklink/main.conf)ใ€systemd ้›†ๆˆใ€tracing-journald ็ป“ๆž„ๅŒ–ๆ—ฅๅฟ—ใ€‚่ฎพๅค‡ๅ’Œ่ฟžๆŽฅๅฏน่ฑกๅœจไบ‹ไปถ้ฉฑๅŠจไธ‹ๅŠจๆ€ๆณจๅ†Œใ€‚

slkconfig

็ฆป็บฟ้…็ฝฎๅ‘ฝไปค่กŒๅทฅๅ…ท๏ผŒๆไพ› 22 ไธชๅญๅ‘ฝไปค๏ผŒ่ฆ†็›–่ฎพๅค‡ไฟกๆฏใ€DLI ๆŽงๅˆถๅ™จใ€PHY ๅ‚ๆ•ฐใ€ๆ‰ซๆใ€่ฟžๆŽฅใ€ๅฎ‰ๅ…จ้…ๅฏนใ€SSAP ๆœๅŠก่ฏปๅ†™ๅ’Œ่ฟœ็จ‹ๆ“ไฝœใ€‚ๅŸบไบŽ clap 4 ็š„ derive APIใ€‚

slctl

ไบคไบ’ๅผๆŽงๅˆถๅฐ (ๅฏนๆ ‡ bluetoothctl)ใ€‚ๅŸบไบŽ rustyline 15 ็š„ REPL๏ผŒ้€š่ฟ‡ D-Bus ไธŽ slkd ้€šไฟก๏ผŒๆ”ฏๆŒ 16 ไธชๅ‘ฝไปค๏ผŒๅซ่‡ชๅŠจ่กฅๅ…จๅ’Œๅކๅฒ่ฎฐๅฝ•ใ€‚

slkmon

ๅ่ฎฎๅˆ†ๆžๅ™จ (ๅฏนๆ ‡ btmon)ใ€‚ไปŽๅ†…ๆ ธๆ•่Žท DLI ไบ‹ไปถ๏ผŒๆ”ฏๆŒไบ‹ไปถ็ฑปๅž‹่ฟ‡ๆปคใ€็ป“ๆž„ๅŒ–่งฃ็  (6 ็งไบ‹ไปถ็ฑปๅž‹)ใ€hexdump ่พ“ๅ‡บๅ’Œๆ–‡ไปถๅ†™ๅ…ฅใ€‚

slkdump

่ฝป้‡็บงๅธง่ฝฌๅ‚จๅทฅๅ…ท (ๅฏนๆ ‡ hcidump)ใ€‚ๆ”ฏๆŒๅๅ…ญ่ฟ›ๅˆถ+ASCII ๆททๅˆ่พ“ๅ‡บๅ’ŒๅŽŸๅง‹ไบŒ่ฟ›ๅˆถ่พ“ๅ‡บๆจกๅผใ€‚

่ฏญ่จ€็ป‘ๅฎš

C

#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

Python

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/

D-Bus ๆŽฅๅฃ

ๆŽฅๅฃ ๅฏน่ฑก่ทฏๅพ„ ๅŠŸ่ƒฝ
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 ่ฟœ็จ‹ๆœๅŠก

ๆ‰“ๅŒ…

Debian

dpkg-buildpackage -us -uc

ไบงๅ‡บ: sparklink, libsparklink0, libsparklink-dev ไธ‰ไธชๅŒ…ใ€‚

RPM

rpmbuild -ba sparklink.spec

ไบงๅ‡บ: sparklink, libsparklink, libsparklink-devel ไธ‰ไธชๅŒ…ใ€‚

CI/CD

GitHub Actions ๅทฅไฝœๆต (.github/workflows/ci.yml) ๅŒ…ๅซ 7 ไธช job:

  • check: cargo check
  • test: cargo test
  • clippy: 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 ้…็ฝฎไผ ่พ“ๅ่ฎฎ

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors