rog-platform: add power (basics)

- Refactor the macros
- Add inotify creator for each attribute
This commit is contained in:
Luke D. Jones
2022-08-20 21:07:34 +12:00
parent 033f2141ef
commit f8cdde2adf
17 changed files with 345 additions and 187 deletions

62
rog-platform/src/power.rs Normal file
View File

@@ -0,0 +1,62 @@
use std::path::PathBuf;
use log::warn;
use crate::{
attr_u8,
error::{PlatformError, Result},
to_device,
};
/// The "platform" device provides access to things like:
/// - dgpu_disable
/// - egpu_enable
/// - panel_od
/// - dgpu_only
/// - keyboard_mode, set keyboard RGB mode and speed
/// - keyboard_state, set keyboard power states
#[derive(Debug, PartialEq, PartialOrd, Clone)]
pub struct AsusPower {
mains: PathBuf,
battery: PathBuf,
usb: Option<PathBuf>,
}
impl AsusPower {
pub fn new() -> Result<Self> {
let mut mains = PathBuf::new();
let mut battery = PathBuf::new();
let mut usb = None;
let mut enumerator = udev::Enumerator::new().map_err(|err| {
warn!("{}", err);
PlatformError::Udev("enumerator failed".into(), err)
})?;
enumerator.match_subsystem("power_supply").map_err(|err| {
warn!("{}", err);
PlatformError::Udev("match_subsystem failed".into(), err)
})?;
for device in enumerator.scan_devices().map_err(|err| {
warn!("{}", err);
PlatformError::Udev("scan_devices failed".into(), err)
})? {
if let Some(attr) = device.attribute_value("type") {
match attr.to_os_string().as_os_str().to_str() {
Some("Mains") => mains = device.syspath().to_path_buf(),
Some("Battery") => battery = device.syspath().to_path_buf(),
Some("USB") => usb = Some(device.syspath().to_path_buf()),
_ => {}
};
}
}
Ok(Self {
mains,
battery,
usb,
})
}
attr_u8!("charge_control_end_threshold", battery);
}