#蓝牙 #OTS #bluez #BLE #对象传输 #API 绑定 #Linux

bluez-async-ots

bluez-async 的蓝牙对象传输服务(OTS)客户端

4 个版本

0.2.0 2023年11月27日
0.1.2 2023年11月24日
0.1.1 2023年11月21日
0.1.0 2023年10月16日

#413 in Unix API


用于 ots-client

MIT/Apache

76KB
2K SLoC

蓝牙 OTS 客户端

github crate docs MIT Apache-2.0 CI

此 crate 使用 bluezbluez-async 实现 Bluetooth Object Transfer Service (OTS) 客户端。兼容 OTS 1.0 规范。

使用示例

use bluez_async::{BluetoothSession, DeviceId};
use bluez_async_ots::{DirEntries, OtsClient, Result};

#[tokio::main]
async fn main() -> Result<()> {
    // First initiate bluetooth session as usual
    let (_, bs) = BluetoothSession::new().await?;

    // Next discover and connect to get interesting device identifier
    let dev_id: DeviceId = todo!();

    // Create OTS client using session and device id
    // Session will be cloned by client internally
    let ots = OtsClient::new(&bs, &dev_id, &Default::default()).await?;

    // Now you can list objects by reading special object with zero id

    // First we need select required object by identifier
    ots.go_to(0).await?;
    // Follow we can read binary data from current object
    let data = ots.read(0, None).await?;
    // To extract objects info from binary data we have create iterator
    for entry in DirEntries::from(data.as_ref()) {
        println!("{:?}", entry?);
    }

    // Sometimes server hasn't provide special object with objects info
    // In such case alternative way of exploring objects is selecting
    // first (or last) object and iterate over list to last (or first)
    // step by step

    // Select first available object
    ots.first().await?;
    loop {
        // Get all available info about current object
        println!("{:?}", ots.metadata().await?);
        // Try go to the next object
        if !ots.next().await? {
            break;
        }
    }

    Ok(())
}

依赖项

~10–20MB
~286K SLoC