Rust library for interacting with the Bluetooth stack via RFCOMM channels.
This library currently only works on Linux/BlueZ. You can find it on crates.io.
Cargo.toml:
toml
[dependencies]
bluetooth-serial-port = "0.3"
Important functions:
rust
bluetooth_serial_port::scan_devices()
BtSocket::new()
BtSocket::connect()
BtSocket::read()
BtSocket::write()
Full example:
```rust extern crate bluetoothserialport; extern crate mio; use bluetoothserialport::{BtProtocol, BtSocket}; use std::io::{Read, Write}; use mio::{EventLoop, Handler, PollOpt, Token, EventSet};
// warning: you really should do some error handling in real code...
fn main() { // scan for devices let devices = bluetoothserialport::scan_devices().unwrap(); if devices.len() == 0 { panic!("No devices found"); }
// "device.name" is name string ot the device
// "device.addr" is the MAC address of the device
let device = &devices[0];
println!("Connecting to `{}` ({})", device.name, device.addr.to_string());
// create and connect the RFCOMM socket
let mut socket = BtSocket::new(BtProtocol::RFCOMM).unwrap();
socket.connect(device.addr).unwrap();
// BtSocket implements the `Read` and `Write` traits (they're blocking)
let mut buffer = [0; 10];
let num_bytes_read = socket.read(&mut buffer[..]).unwrap();
let num_bytes_written = socket.write(&buffer[0..num_bytes_read]).unwrap();
println!("Read `{}` bytes, wrote `{}` bytes", num_bytes_read, num_bytes_written);
// BtSocket also implements `mio::Evented` for async IO
let mut event_loop = EventLoop::new().unwrap();
event_loop.register(&socket, Token(0), EventSet::readable() | EventSet::writable(),
PollOpt::edge() | PollOpt::oneshot()).unwrap();
// run event loop with some handler...
struct NoopHandler;
impl Handler for NoopHandler { type Timeout = (); type Message = (); }
event_loop.run(&mut NoopHandler).unwrap();
} ```