[][src]Struct hciraw::socket::HciSocket

pub struct HciSocket(_);

A HCI raw socket.

Allows exchanging HCI messages with the given device on selected channel.

After creating a HciSocket by binding it to a HCI socket address the messages can be send to and received from a Bluetooth subsystem.

Examples

use hciraw::{HciChannel, HciSocket, HciSocketAddr};

let addr = hciraw::HciSocketAddr::new(None, HciChannel::Control);
let socket = hciraw::HciSocket::bind(addr).expect("Error binding socket");

let sdata: [u8; 6] = [0x01, 0x00, 0xff, 0xff, 0x00, 0x00];
let snum = socket.send(&sdata).expect("Error sending data");

let mut rbuf = vec![0;128];
let rnum = socket.recv(rbuf.as_mut_slice()).expect("Error reading data");

Methods

impl HciSocket[src]

pub fn bind<A: ToHciSocketAddr>(addr: A) -> Result<HciSocket>[src]

Creates HCI raw socket from the given address. The socket, when created, is in the bound state.

The address type can be any implementator of ToHciSocketAddr trait.

Examples

Creates HCI raw socket bound to none device and the control channel:

use hciraw::{HciChannel, HciSocket, HciSocketAddr};

let addr = hciraw::HciSocketAddr::new(None, HciChannel::Control);
let socket = hciraw::HciSocket::bind(addr).unwrap();

Creates HCI raw socket bound to the first Bluetooth controller and the raw channel.

use hciraw::{HciChannel, HciSocket, HciSocketAddr};

let addr = HciSocketAddr::new(Some(0), HciChannel::Raw);
let socket = HciSocket::bind(addr).unwrap();

pub fn send(&self, buf: &[u8]) -> Result<usize>[src]

Sends data on the socket to the HciDevice and using the HciChannel the socket is bond to.

Return

On success the number of bytes sent, error otherwise.

Examples

use hciraw::{HciChannel, HciSocket, HciSocketAddr};

let addr = HciSocketAddr::new(None, HciChannel::Control);
let socket = HciSocket::bind(addr).expect("Error binding the socket");

let mut buf = [0; 128];
use hciraw;

let data: [u8; 6] = [0x01, 0x00, 0xff, 0xff, 0x00, 0x00];
let retval = socket.send(&data).unwrap();

pub fn recv(&self, buf: &mut [u8]) -> Result<usize>[src]

Receives a single message on the socket from the HciDevice and using the HciChannel the socket is bond to.

It must be called with valid byte array buf of sufficient size to hold the data packet. Bytes that do not fit into the buf are discarded.

Return

On success the number of bytes read, error otherwise.

Examples

use hciraw::{HciChannel, HciSocket, HciSocketAddr};

let addr = HciSocketAddr::new(None, HciChannel::Control);
let socket = HciSocket::bind(addr).expect("Error binding the socket");

let mut rbuf = vec![0;128];
match socket.recv(rbuf.as_mut_slice()) {
    Ok(n) => println!("Recv {} bytes", n),
    Err(e) => println!("Failed to read data {}", e),
}

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.