backend: add syspath and devnode to input devices
This commit is contained in:
parent
813f87faaa
commit
283e438d1b
9 changed files with 107 additions and 64 deletions
|
|
@ -2,78 +2,24 @@ use {
|
|||
crate::{
|
||||
backend::{BackendDrmDevice, DrmDeviceId, DrmEvent},
|
||||
state::{DrmDevData, State},
|
||||
udev::{Udev, UdevDeviceType},
|
||||
utils::{asyncevent::AsyncEvent, errorfmt::ErrorFmt},
|
||||
tasks::udev_utils::udev_props,
|
||||
utils::asyncevent::AsyncEvent,
|
||||
},
|
||||
jay_config::PciId,
|
||||
std::{cell::Cell, rc::Rc},
|
||||
};
|
||||
|
||||
pub fn handle(state: &Rc<State>, dev: Rc<dyn BackendDrmDevice>) {
|
||||
let id = dev.id();
|
||||
let mut syspath = None;
|
||||
let mut devnode = None;
|
||||
let mut vendor = None;
|
||||
let mut model = None;
|
||||
let mut pci_id = None;
|
||||
'properties: {
|
||||
let udev = match Udev::new() {
|
||||
Ok(udev) => Rc::new(udev),
|
||||
Err(e) => {
|
||||
log::error!("Could not create a udev instance: {}", e);
|
||||
break 'properties;
|
||||
}
|
||||
};
|
||||
let odev = match udev.create_device_from_devnum(UdevDeviceType::Character, dev.dev_t()) {
|
||||
Ok(dev) => dev,
|
||||
Err(e) => {
|
||||
log::error!("{}", ErrorFmt(e));
|
||||
break 'properties;
|
||||
}
|
||||
};
|
||||
let dev = match odev.parent() {
|
||||
Ok(dev) => dev,
|
||||
Err(e) => {
|
||||
log::error!("{}", ErrorFmt(e));
|
||||
break 'properties;
|
||||
}
|
||||
};
|
||||
syspath = dev.syspath().map(|s| s.to_string_lossy().into_owned());
|
||||
vendor = dev.vendor().map(|s| s.to_string_lossy().into_owned());
|
||||
model = dev.model().map(|s| s.to_string_lossy().into_owned());
|
||||
devnode = odev.devnode().map(|s| s.to_string_lossy().into_owned());
|
||||
'get_pci_id: {
|
||||
let id = match dev.pci_id() {
|
||||
Some(id) => id,
|
||||
_ => break 'get_pci_id,
|
||||
};
|
||||
let id = id.to_string_lossy();
|
||||
let colon = match id.find(':') {
|
||||
Some(pos) => pos,
|
||||
_ => break 'get_pci_id,
|
||||
};
|
||||
let vendor = &id[..colon];
|
||||
let model = &id[colon + 1..];
|
||||
let vendor = match u32::from_str_radix(vendor, 16) {
|
||||
Ok(v) => v,
|
||||
_ => break 'get_pci_id,
|
||||
};
|
||||
let model = match u32::from_str_radix(model, 16) {
|
||||
Ok(v) => v,
|
||||
_ => break 'get_pci_id,
|
||||
};
|
||||
pci_id = Some(PciId { vendor, model });
|
||||
}
|
||||
}
|
||||
let props = udev_props(dev.dev_t(), 1);
|
||||
let data = Rc::new(DrmDevData {
|
||||
dev: dev.clone(),
|
||||
handler: Cell::new(None),
|
||||
connectors: Default::default(),
|
||||
syspath,
|
||||
devnode,
|
||||
vendor,
|
||||
model,
|
||||
pci_id,
|
||||
syspath: props.syspath,
|
||||
devnode: props.devnode,
|
||||
vendor: props.vendor,
|
||||
model: props.model,
|
||||
pci_id: props.pci_id,
|
||||
});
|
||||
let oh = DrvDevHandler {
|
||||
id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue