use crate::error::{Error, Result};
#[cfg(target_os = "linux")]
use soft_fido2_transport::UhidDevice;
#[cfg(target_os = "linux")]
pub struct Uhid {
device: UhidDevice,
}
#[cfg(target_os = "linux")]
impl Uhid {
pub fn open() -> Result<Self> {
let device = UhidDevice::create_fido_device().map_err(|_| Error::Other)?;
Ok(Self { device })
}
pub fn read_packet(&self, out: &mut [u8; 64]) -> Result<usize> {
match self.device.read_packet(out) {
Ok(Some(len)) => Ok(len),
Ok(None) => Ok(0), Err(_) => Err(Error::Other),
}
}
pub fn write_packet(&self, data: &[u8; 64]) -> Result<usize> {
self.device.write_packet(data).map_err(|_| Error::Other)?;
Ok(64) }
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[ignore] fn test_uhid_creation() {
let _uhid = Uhid::open();
}
}