diff --git a/lact-daemon/src/server/gpu_controller/mod.rs b/lact-daemon/src/server/gpu_controller/mod.rs
index 15da3e3..690e3d4 100644
--- a/lact-daemon/src/server/gpu_controller/mod.rs
+++ b/lact-daemon/src/server/gpu_controller/mod.rs
@@ -264,6 +264,7 @@ impl GpuController {
speed_current: self.hw_mon_and_then(HwMon::get_fan_current),
speed_max: self.hw_mon_and_then(HwMon::get_fan_max),
speed_min: self.hw_mon_and_then(HwMon::get_fan_min),
+ pwm_current: self.hw_mon_and_then(HwMon::get_fan_pwm),
pmfw_info: PmfwInfo {
acoustic_limit: self.handle.get_fan_acoustic_limit().ok(),
acoustic_target: self.handle.get_fan_acoustic_target().ok(),
diff --git a/lact-gui/src/app/root_stack/thermals_page/mod.rs b/lact-gui/src/app/root_stack/thermals_page/mod.rs
index f58198d..32db0a1 100644
--- a/lact-gui/src/app/root_stack/thermals_page/mod.rs
+++ b/lact-gui/src/app/root_stack/thermals_page/mod.rs
@@ -147,22 +147,33 @@ impl ThermalsPage {
self.temperatures_label
.set_markup(&format!("{temperatures_text}",));
- match stats.fan.speed_current {
- Some(fan_speed_current) => self.fan_speed_label.set_markup(&format!(
- "{} RPM ({}%)",
- fan_speed_current,
- (fan_speed_current as f64
- / stats.fan.speed_max.unwrap_or(fan_speed_current) as f64
- * 100.0)
- .round()
- )),
+ let fan_label = if let Some(current_rpm) = stats.fan.speed_current {
+ let text = match stats.fan.speed_max {
+ Some(max_rpm) => format!(
+ "{current_rpm} RPM ({}%)",
+ ((current_rpm as f64 / max_rpm as f64) * 100.0).round(),
+ ),
+ None => format!("{current_rpm} RPM"),
+ };
+ Some(text)
+ } else {
+ stats.fan.pwm_current.map(|current_pwm| {
+ format!(
+ "{}%",
+ ((current_pwm as f64 / u8::MAX as f64) * 100.0).round()
+ )
+ })
+ };
+
+ match &fan_label {
+ Some(label) => self.fan_speed_label.set_markup(label),
None => self.fan_speed_label.set_text("No fan detected"),
}
if initial {
self.fan_control_mode_stack_switcher.set_visible(true);
self.fan_control_mode_stack_switcher
- .set_sensitive(stats.fan.speed_current.is_some());
+ .set_sensitive(fan_label.is_some());
let child_name = match stats.fan.control_mode {
Some(mode) if stats.fan.control_enabled => match mode {
diff --git a/lact-schema/src/lib.rs b/lact-schema/src/lib.rs
index 9d248ec..eb502a5 100644
--- a/lact-schema/src/lib.rs
+++ b/lact-schema/src/lib.rs
@@ -188,6 +188,7 @@ pub struct FanStats {
pub control_mode: Option,
pub static_speed: Option,
pub curve: Option,
+ pub pwm_current: Option,
pub speed_current: Option,
pub speed_max: Option,
pub speed_min: Option,