use std::time::Duration;
pub trait UsbEndpoints {
fn write_bulk(&self, endpoint: u8, buf: &[u8], timeout: Duration) -> rusb::Result<usize>;
fn read_bulk(&self, endpoint: u8, buf: &mut [u8], timeout: Duration) -> rusb::Result<usize>;
fn write_interrupt(&self, endpoint: u8, buf: &[u8], timeout: Duration) -> rusb::Result<usize>;
fn read_interrupt(
&self,
endpoint: u8,
buf: &mut [u8],
timeout: Duration,
) -> rusb::Result<usize>;
fn clear_halt(&self, endpoint: u8) -> rusb::Result<()>;
fn release_interface(&self, iface: u8) -> rusb::Result<()>;
}
impl UsbEndpoints for Box<dyn UsbEndpoints + Send> {
fn write_bulk(&self, endpoint: u8, buf: &[u8], timeout: Duration) -> rusb::Result<usize> {
(**self).write_bulk(endpoint, buf, timeout)
}
fn read_bulk(&self, endpoint: u8, buf: &mut [u8], timeout: Duration) -> rusb::Result<usize> {
(**self).read_bulk(endpoint, buf, timeout)
}
fn write_interrupt(&self, endpoint: u8, buf: &[u8], timeout: Duration) -> rusb::Result<usize> {
(**self).write_interrupt(endpoint, buf, timeout)
}
fn read_interrupt(
&self,
endpoint: u8,
buf: &mut [u8],
timeout: Duration,
) -> rusb::Result<usize> {
(**self).read_interrupt(endpoint, buf, timeout)
}
fn clear_halt(&self, endpoint: u8) -> rusb::Result<()> {
(**self).clear_halt(endpoint)
}
fn release_interface(&self, iface: u8) -> rusb::Result<()> {
(**self).release_interface(iface)
}
}
impl<T: rusb::UsbContext> UsbEndpoints for rusb::DeviceHandle<T> {
fn write_bulk(&self, endpoint: u8, buf: &[u8], timeout: Duration) -> rusb::Result<usize> {
rusb::DeviceHandle::write_bulk(self, endpoint, buf, timeout)
}
fn read_bulk(&self, endpoint: u8, buf: &mut [u8], timeout: Duration) -> rusb::Result<usize> {
rusb::DeviceHandle::read_bulk(self, endpoint, buf, timeout)
}
fn write_interrupt(&self, endpoint: u8, buf: &[u8], timeout: Duration) -> rusb::Result<usize> {
rusb::DeviceHandle::write_interrupt(self, endpoint, buf, timeout)
}
fn read_interrupt(
&self,
endpoint: u8,
buf: &mut [u8],
timeout: Duration,
) -> rusb::Result<usize> {
rusb::DeviceHandle::read_interrupt(self, endpoint, buf, timeout)
}
fn clear_halt(&self, endpoint: u8) -> rusb::Result<()> {
rusb::DeviceHandle::clear_halt(self, endpoint)
}
fn release_interface(&self, iface: u8) -> rusb::Result<()> {
rusb::DeviceHandle::release_interface(self, iface)
}
}