[−][src]Struct hciraw::socket::HciSocket
A HCI raw socket.
Allows exchanging HCI messages with the given device on selected channel.
After creating a HciSocket
by bind
ing 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
impl RefUnwindSafe for HciSocket
impl Send for HciSocket
impl Sync for HciSocket
impl Unpin for HciSocket
impl UnwindSafe for HciSocket
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,