#[allow(unused_imports)]
use crate::error::{Error, ErrorKind};
use usb_ids::{self, FromId};
pub fn vendor(vid: u16) -> Option<String> {
hwdb_get(&format!("usb:v{vid:04X}*"), "ID_VENDOR_FROM_DATABASE")
.unwrap_or_else(|_| usb_ids::Vendor::from_id(vid).map(|v| v.name().to_owned()))
}
pub fn product(vid: u16, pid: u16) -> Option<String> {
hwdb_get(
&format!("usb:v{vid:04X}p{pid:04X}*"),
"ID_MODEL_FROM_DATABASE",
)
.unwrap_or_else(|_| usb_ids::Device::from_vid_pid(vid, pid).map(|v| v.name().to_owned()))
}
pub fn class(id: u8) -> Option<String> {
hwdb_get(
&format!("usb:v*p*d*dc{id:02X}*"),
"ID_USB_CLASS_FROM_DATABASE",
)
.unwrap_or_else(|_| usb_ids::Class::from_id(id).map(|v| v.name().to_owned()))
}
pub fn subclass(cid: u8, scid: u8) -> Option<String> {
hwdb_get(
&format!("usb:v*p*d*dc{cid:02X}dsc{scid:02X}*"),
"ID_USB_SUBCLASS_FROM_DATABASE",
)
.unwrap_or_else(|_| usb_ids::SubClass::from_cid_scid(cid, scid).map(|v| v.name().to_owned()))
}
pub fn protocol(cid: u8, scid: u8, pid: u8) -> Option<String> {
hwdb_get(
&format!("usb:v*p*d*dc{cid:02X}dsc{scid:02X}dp{pid:02X}*"),
"ID_USB_PROTOCOL_FROM_DATABASE",
)
.unwrap_or_else(|_| {
usb_ids::Protocol::from_cid_scid_pid(cid, scid, pid).map(|v| v.name().to_owned())
})
}
pub fn hid(id: u8) -> Option<String> {
usb_ids::Hid::from_id(id).map(|v| v.name().to_owned())
}
pub fn report_tag(id: u8) -> Option<String> {
usb_ids::HidItemType::from_id(id).map(|v| v.name().to_owned())
}
pub fn huts(id: u8) -> Option<String> {
usb_ids::HidUsagePage::from_id(id).map(|v| v.name().to_owned())
}
pub fn hutus(page_id: u8, id: u16) -> Option<String> {
usb_ids::HidUsage::from_pageid_uid(page_id, id).map(|v| v.name().to_owned())
}
pub fn langid(id: u16) -> Option<String> {
usb_ids::Language::from_id(id).map(|v| v.name().to_owned())
}
pub fn physdes(id: u8) -> Option<String> {
usb_ids::Phy::from_id(id).map(|v| v.name().to_owned())
}
pub fn bias(id: u8) -> Option<String> {
usb_ids::Bias::from_id(id).map(|v| v.name().to_owned())
}
pub fn countrycode(id: u8) -> Option<String> {
usb_ids::HidCountryCode::from_id(id).map(|v| v.name().to_owned())
}
pub fn videoterminal(id: u16) -> Option<String> {
usb_ids::VideoTerminal::from_id(id).map(|v| v.name().to_owned())
}
pub fn audioterminal(id: u16) -> Option<String> {
usb_ids::AudioTerminal::from_id(id).map(|v| v.name().to_owned())
}
#[allow(unused_variables)]
fn hwdb_get(modalias: &str, key: &'static str) -> Result<Option<String>, Error> {
#[cfg(all(target_os = "linux", feature = "udev_hwdb"))]
return crate::udev::hwdb::get(modalias, key);
#[cfg(not(all(target_os = "linux", feature = "udev_hwdb")))]
return Err(Error::new(
ErrorKind::Unsupported,
"hwdb_get requires 'udev_hwdb' feature",
));
}