Simplifications and fixes for edge cases

monitor.rs: Removed hardcoded pwm-range of 0 to 255 and instead
correctly interpolate between pwm_min() and pwm_max()
main.rs: Simpler comparison to check whether temperature changed since
last time
hw_mon.rs: Removed unnecessary conversions between u32 and u64
This commit is contained in:
Stefan Gehr 2021-08-02 00:02:03 +02:00
parent c5f968fcf9
commit 35532b1eb7
3 changed files with 14 additions and 10 deletions

View File

@ -121,17 +121,17 @@ impl HwMon {
self.write("pwm1_enable", 2) self.write("pwm1_enable", 2)
} }
pub fn set_pwm(&self, value: u32) -> std::io::Result<()> { pub fn set_pwm(&self, value: u64) -> std::io::Result<()> {
if self.is_fan_automatic() { if self.is_fan_automatic() {
self.set_manual()?; self.set_manual()?;
} }
self.write("pwm1", value as u64) self.write("pwm1", value)
} }
pub fn set_speed(&mut self, speed: f64) -> std::io::Result<()> { pub fn set_speed(&mut self, speed: f64) -> std::io::Result<()> {
let min = self.pwm_min() as f64; let min = self.pwm_min() as f64;
let max = self.pwm_max() as f64; let max = self.pwm_max() as f64;
let pwm = linear_map(speed, 0f64, 100f64, min, max).round() as u32; let pwm = linear_map(speed, 0f64, 100f64, min, max).round() as u64;
self.set_pwm(pwm) self.set_pwm(pwm)
} }

View File

@ -152,7 +152,7 @@ fn service(config: Config) -> std::io::Result<()> {
log::debug!("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 - gpu_temp).abs() < 0.001f64 {
log::debug!("Temperature didn't change"); log::debug!("Temperature didn't change");
continue; continue;
}; };

View File

@ -48,14 +48,16 @@ pub fn verbose(config: Config) -> std::io::Result<()> {
for hw_mon in controllers.iter_mut() { for hw_mon in controllers.iter_mut() {
println!("Card {:3}", hw_mon.card.to_string().replace("card", "")); println!("Card {:3}", hw_mon.card.to_string().replace("card", ""));
println!(" MIN | MAX | PWM | %"); println!(" MIN | MAX | PWM | %");
let min = hw_mon.pwm_min();
let max = hw_mon.pwm_max();
println!( println!(
" {:>4} | {:>4} | {:>6} | {:>3}", " {:>4} | {:>4} | {:>6} | {:>3}",
hw_mon.pwm_min(), min,
hw_mon.pwm_max(), max,
hw_mon hw_mon
.pwm() .pwm()
.map_or_else(|_e| String::from("FAILED"), |f| f.to_string()), .map_or_else(|_e| String::from("FAILED"), |f| f.to_string()),
(hw_mon.pwm().unwrap_or_default() as f32 / 2.55).round(), (crate::linear_map(hw_mon.pwm().unwrap_or_default() as f64, min as f64, max as f64, 0f64, 100f64)).round(),
); );
println!(); println!();
@ -83,13 +85,15 @@ pub fn short(config: Config) -> std::io::Result<()> {
"Card {:3} | Temp | MIN | MAX | PWM | %", "Card {:3} | Temp | MIN | MAX | PWM | %",
hw_mon.card.to_string().replace("card", "") hw_mon.card.to_string().replace("card", "")
); );
let min = hw_mon.pwm_min();
let max = hw_mon.pwm_max();
println!( println!(
" | {:>5.2} | {:>4} | {:>4} | {:>4} | {:>3}", " | {:>5.2} | {:>4} | {:>4} | {:>4} | {:>3}",
hw_mon.max_gpu_temp().unwrap_or_default(), hw_mon.max_gpu_temp().unwrap_or_default(),
hw_mon.pwm_min(), min,
hw_mon.pwm_max(), max,
hw_mon.pwm().unwrap_or_default(), hw_mon.pwm().unwrap_or_default(),
(hw_mon.pwm().unwrap_or_default() as f32 / 2.55).round(), crate::linear_map(hw_mon.pwm().unwrap_or_default() as f64, min as f64, max as f64, 0f64, 100f64).round(),
); );
} }
std::thread::sleep(std::time::Duration::from_secs(4)); std::thread::sleep(std::time::Duration::from_secs(4));