Refactor after review
This commit is contained in:
parent
6eeeb3a487
commit
8c5fa618c3
54
src/main.rs
54
src/main.rs
@ -57,29 +57,29 @@ pub struct HwMon {
|
|||||||
temp_inputs: Vec<String>,
|
temp_inputs: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// pulse width modulation fan control minimum level (0)
|
|
||||||
static PULSE_WIDTH_MODULATION_MIN: &str = "pwm1_min";
|
|
||||||
|
|
||||||
/// pulse width modulation fan control maximum level (255)
|
|
||||||
static PULSE_WIDTH_MODULATION_MAX: &str = "pwm1_max";
|
|
||||||
|
|
||||||
/// pulse width modulation fan level (0-255)
|
|
||||||
static PULSE_WIDTH_MODULATION: &str = "pwm1";
|
|
||||||
|
|
||||||
/// pulse width modulation fan control method (0: no fan speed control, 1: manual fan speed control using pwm interface, 2: automatic fan speed control)
|
|
||||||
static PULSE_WIDTH_MODULATION_ENABLED: &str = "pwm1_enable";
|
|
||||||
|
|
||||||
mod hw_mon {
|
mod hw_mon {
|
||||||
use std::io::Error as IoErr;
|
use std::io::Error as IoErr;
|
||||||
|
|
||||||
use crate::config::Card;
|
use crate::config::Card;
|
||||||
use crate::{
|
use crate::{linear_map, AmdFanError, HwMon, HW_MON_DIR, ROOT_DIR};
|
||||||
linear_map, AmdFanError, HwMon, HW_MON_DIR, PULSE_WIDTH_MODULATION,
|
|
||||||
PULSE_WIDTH_MODULATION_ENABLED, PULSE_WIDTH_MODULATION_MAX, PULSE_WIDTH_MODULATION_MIN,
|
|
||||||
ROOT_DIR,
|
|
||||||
};
|
|
||||||
use std::io::ErrorKind;
|
use std::io::ErrorKind;
|
||||||
|
|
||||||
|
/// pulse width modulation fan control minimum level (0)
|
||||||
|
const PULSE_WIDTH_MODULATION_MIN: &str = "pwm1_min";
|
||||||
|
|
||||||
|
/// pulse width modulation fan control maximum level (255)
|
||||||
|
const PULSE_WIDTH_MODULATION_MAX: &str = "pwm1_max";
|
||||||
|
|
||||||
|
/// pulse width modulation fan level (0-255)
|
||||||
|
const PULSE_WIDTH_MODULATION: &str = "pwm1";
|
||||||
|
|
||||||
|
/// pulse width modulation fan control method (0: no fan speed control, 1: manual fan speed control using pwm interface, 2: automatic fan speed control)
|
||||||
|
const PULSE_WIDTH_MODULATION_MODE: &str = "pwm1_enable";
|
||||||
|
|
||||||
|
// static PULSE_WIDTH_MODULATION_DISABLED: &str = "0";
|
||||||
|
const PULSE_WIDTH_MODULATION_AUTO: &str = "2";
|
||||||
|
const PULSE_WIDTH_MODULATION_MANUAL: &str = "1";
|
||||||
|
|
||||||
impl HwMon {
|
impl HwMon {
|
||||||
pub fn new(card: &Card, name: &str) -> Self {
|
pub fn new(card: &Card, name: &str) -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -131,14 +131,14 @@ mod hw_mon {
|
|||||||
|
|
||||||
pub fn pwm_min(&mut self) -> u32 {
|
pub fn pwm_min(&mut self) -> u32 {
|
||||||
if self.pwm_min.is_none() {
|
if self.pwm_min.is_none() {
|
||||||
self.pwm_min = Some(self.value_or_fallback(PULSE_WIDTH_MODULATION_MIN, 0));
|
self.pwm_min = Some(self.value_or(PULSE_WIDTH_MODULATION_MIN, 0));
|
||||||
};
|
};
|
||||||
self.pwm_min.unwrap_or_default()
|
self.pwm_min.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pwm_max(&mut self) -> u32 {
|
pub fn pwm_max(&mut self) -> u32 {
|
||||||
if self.pwm_max.is_none() {
|
if self.pwm_max.is_none() {
|
||||||
self.pwm_max = Some(self.value_or_fallback(PULSE_WIDTH_MODULATION_MAX, 255));
|
self.pwm_max = Some(self.value_or(PULSE_WIDTH_MODULATION_MAX, 255));
|
||||||
};
|
};
|
||||||
self.pwm_max.unwrap_or(255)
|
self.pwm_max.unwrap_or(255)
|
||||||
}
|
}
|
||||||
@ -151,14 +151,14 @@ mod hw_mon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_fan_manual(&self) -> bool {
|
pub fn is_fan_manual(&self) -> bool {
|
||||||
self.read(PULSE_WIDTH_MODULATION_ENABLED)
|
self.read(PULSE_WIDTH_MODULATION_MODE)
|
||||||
.map(|s| s.as_str() == "1")
|
.map(|s| s.as_str() == PULSE_WIDTH_MODULATION_MANUAL)
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_fan_automatic(&self) -> bool {
|
pub fn is_fan_automatic(&self) -> bool {
|
||||||
self.read(PULSE_WIDTH_MODULATION_ENABLED)
|
self.read(PULSE_WIDTH_MODULATION_MODE)
|
||||||
.map(|s| s.as_str() == "2")
|
.map(|s| s.as_str() == PULSE_WIDTH_MODULATION_AUTO)
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ mod hw_mon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn value_or_fallback<R: std::str::FromStr>(&self, name: &str, fallback: R) -> R {
|
fn value_or<R: std::str::FromStr>(&self, name: &str, fallback: R) -> R {
|
||||||
self.read(name)
|
self.read(name)
|
||||||
.ok()
|
.ok()
|
||||||
.and_then(|s| s.parse().ok())
|
.and_then(|s| s.parse().ok())
|
||||||
@ -364,15 +364,15 @@ fn service(config: Config) -> std::io::Result<()> {
|
|||||||
loop {
|
loop {
|
||||||
for hw_mon in controllers.iter_mut() {
|
for hw_mon in controllers.iter_mut() {
|
||||||
let gpu_temp = hw_mon.max_gpu_temp().unwrap_or_default();
|
let gpu_temp = hw_mon.max_gpu_temp().unwrap_or_default();
|
||||||
log::info!("Current {} temperature: {}", hw_mon.card, gpu_temp);
|
log::debug!("Current {} temperature: {}", hw_mon.card, gpu_temp);
|
||||||
let last = *cache.entry(*hw_mon.card).or_insert(1_000f64);
|
let last = *cache.entry(*hw_mon.card).or_insert(1_000f64);
|
||||||
|
|
||||||
if ((last - 0.001f64)..(last + 0.001f64)).contains(&gpu_temp) {
|
if ((last - 0.001f64)..(last + 0.001f64)).contains(&gpu_temp) {
|
||||||
log::info!("Temperature didn't change");
|
log::debug!("Temperature didn't change");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
let speed = config.speed_for_temp(gpu_temp);
|
let speed = config.speed_for_temp(gpu_temp);
|
||||||
log::info!("Resolved speed {:.2}", speed);
|
log::debug!("Resolved speed {:.2}", speed);
|
||||||
|
|
||||||
if let Err(e) = hw_mon.set_speed(speed) {
|
if let Err(e) = hw_mon.set_speed(speed) {
|
||||||
log::error!("Failed to change speed to {}. {:?}", speed, e);
|
log::error!("Failed to change speed to {}. {:?}", speed, e);
|
||||||
|
Loading…
Reference in New Issue
Block a user