mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
76 lines
2.4 KiB
Rust
76 lines
2.4 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use log::{info, warn};
|
|
|
|
use crate::error::{PlatformError, Result};
|
|
use crate::{attr_num, to_device};
|
|
|
|
/// The "backlight" device provides access to screen brightness control
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Clone)]
|
|
pub struct Backlight {
|
|
path: PathBuf,
|
|
device_type: BacklightType,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Clone)]
|
|
pub enum BacklightType {
|
|
Primary,
|
|
Screenpad,
|
|
}
|
|
|
|
impl Backlight {
|
|
attr_num!("brightness", path, i32);
|
|
|
|
attr_num!("max_brightness", path, i32);
|
|
|
|
attr_num!("bl_power", path, i32);
|
|
|
|
pub fn new(device_type: BacklightType) -> Result<Self> {
|
|
let mut enumerator = udev::Enumerator::new().map_err(|err| {
|
|
warn!("{}", err);
|
|
PlatformError::Udev("enumerator failed".into(), err)
|
|
})?;
|
|
enumerator.match_subsystem("backlight").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)
|
|
})? {
|
|
info!("Backlight: Checking {:?}", device.syspath());
|
|
match device_type {
|
|
BacklightType::Primary => {
|
|
if device.sysname().to_string_lossy() == "intel_backlight" {
|
|
info!("Found primary backlight at {:?}", device.sysname());
|
|
return Ok(Self {
|
|
path: device.syspath().to_path_buf(),
|
|
device_type,
|
|
});
|
|
}
|
|
}
|
|
BacklightType::Screenpad => {
|
|
let name = device.sysname().to_string_lossy();
|
|
if name == "asus_screenpad" || name == "asus_screenpad_backlight" {
|
|
info!("Found screenpad backlight at {:?}", device.sysname());
|
|
return Ok(Self {
|
|
path: device.syspath().to_path_buf(),
|
|
device_type,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Err(PlatformError::MissingFunction(format!(
|
|
"Backlight {:?} not found",
|
|
device_type
|
|
)))
|
|
}
|
|
|
|
pub fn device_type(&self) -> &BacklightType {
|
|
&self.device_type
|
|
}
|
|
}
|