Crates.io | bluez-async-ots |
lib.rs | bluez-async-ots |
version | 0.2.0 |
source | src |
created_at | 2023-10-16 08:09:27.168134 |
updated_at | 2023-11-27 15:23:26.668786 |
description | Bluetooth Object Transfer Service (OTS) Client for bluez-async. |
homepage | |
repository | https://github.com/katyo/bluetooth-ots-rs/ |
max_upload_size | |
id | 1004542 |
size | 32,391 |
This crate implements Bluetooth Object Transfer Service (OTS) client for bluez using bluez-async. Implementation compatible with OTS 1.0 specification.
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(())
}