use crate::{HciChannel, HciDevice};
pub trait ToHciSocketAddr {
fn to_socket_addr(&self) -> HciSocketAddr;
}
#[allow(missing_docs)]
#[allow(non_camel_case_types)]
#[derive(Copy, Clone)]
pub struct sockaddr_hci {
hci_family: libc::sa_family_t,
hci_dev: u16,
hci_channel: u16,
}
#[derive(Copy, Clone)]
pub struct HciSocketAddr {
inner: sockaddr_hci,
}
#[allow(clippy::len_without_is_empty)]
impl HciSocketAddr {
pub fn new(dev: HciDevice, chan: HciChannel) -> HciSocketAddr {
HciSocketAddr {
inner: sockaddr_hci {
hci_family: libc::AF_BLUETOOTH as libc::sa_family_t,
hci_dev: match dev {
None => 0xffff,
Some(d) => d,
},
hci_channel: chan as u16,
},
}
}
pub fn len(self) -> libc::socklen_t {
0x5 as libc::socklen_t
}
}
impl ToHciSocketAddr for HciSocketAddr {
fn to_socket_addr(&self) -> HciSocketAddr {
*self
}
}
impl From<HciSocketAddr> for libc::sockaddr {
fn from(hsa: HciSocketAddr) -> libc::sockaddr {
let b1 = ((hsa.inner.hci_dev) & 0x00ff) as libc::c_char;
let b2 = ((hsa.inner.hci_dev >> 8) & 0x00ff) as libc::c_char;
let c1 = ((hsa.inner.hci_channel) & 0x00ff) as libc::c_char;
let c2 = ((hsa.inner.hci_channel >> 8) & 0x00ff) as libc::c_char;
libc::sockaddr {
sa_family: hsa.inner.hci_family,
sa_data: [b1, b2, c1, c2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
}
}
}