X-Git-Url: https://git.euphorik.ch/?a=blobdiff_plain;f=src%2Fmain_loop.rs;h=a11c36b6f608b77762dd66a3d5fa2dccd86d5445;hb=HEAD;hp=c7872506ea7f4fe641570f1a5751a54c8b838546;hpb=9789f56d04a0a45fdb0495ca4fab6b01ba3d4f3e;p=temp2RGB.git diff --git a/src/main_loop.rs b/src/main_loop.rs index c787250..8e88ecf 100644 --- a/src/main_loop.rs +++ b/src/main_loop.rs @@ -1,11 +1,13 @@ use std::{ sync::{ - atomic::{AtomicBool, Ordering}, Arc, + atomic::{AtomicBool, Ordering}, }, time::{self, Duration}, }; +use log::warn; + use crate::{consts, machine, rgb, settings, timer, winring0}; pub fn main_loop(completed: Arc) { @@ -20,12 +22,38 @@ pub fn main_loop(completed: Arc) { winring0::init(); let sleep = timer::Sleep::new(); - let settings = settings::Settings::read(consts::FILE_CONF).expect("Cannot load settings"); - println!("Settings: {settings:?}"); + + let file_conf_path = if cfg!(debug_assertions) { + String::from(consts::FILE_CONF) + } else { + String::from( + dirs::config_dir() + .unwrap() + .join(consts::SERVICE_NAME) + .join(consts::FILE_CONF) + .to_str() + .unwrap(), + ) + }; + + let settings = settings::Settings::read(&file_conf_path).expect("Cannot load settings"); + println!("Settings: {settings:?} from {file_conf_path}"); let mut machine: Box = match settings.machine_name { - settings::MachineName::Jiji => Box::new(machine::MachineJiji::new()), - settings::MachineName::LyssMetal => Box::new(machine::MachineLyssMetal::new()), + settings::MachineName::Jiji => { + Box::new(machine::jiji::MachineJiji::new().expect("Unable to create MachineJiji")) + } + settings::MachineName::LyssMetal => Box::new( + machine::lyss_metal::MachineLyssMetal::new() + .expect("Unable to create MachineLyssMetal"), + ), + settings::MachineName::LyssMetal2 => Box::new( + machine::lyss_metal2::MachineLyssMetal2::new() + .expect("Unable to create MachineLyssMetal2"), + ), + settings::MachineName::Mshroom => { + Box::new(machine::mshroom::Mshroom::new().expect("Unable to create Mshroom")) + } }; let mut kernel = [0f32; consts::KERNEL_SIZE_SAMPLES]; @@ -59,14 +87,31 @@ pub fn main_loop(completed: Arc) { 1f32, ); // Between 0 (cold) and 1 (hot). - let color = - rgb::linear_interpolation(settings.cold_color, settings.hot_color, normalized_temp); + let color_1 = + rgb::linear_interpolation(settings.cold_color_1, settings.hot_color_1, normalized_temp); + + let color_2 = match (settings.cold_color_2, settings.hot_color_2) { + (Some(cold_color), Some(hot_color)) => Some(rgb::linear_interpolation( + cold_color, + hot_color, + normalized_temp, + )), + _ => None, + }; // println!("normalized_temp: {normalized_temp}"); if tick % (consts::FREQ_TEMP_POLLING / consts::FREQ_REFRESHING_RGB) as i64 == 0 { - println!("Update RGB: {color:?}, temp: {mean_temp}"); - machine.set_color(&color); + println!("Update RGB: {color_1:?}/{color_2:?}, temp: {mean_temp}"); + if let Err(error) = machine.set_color_1(&color_1) { + warn!("Unable to set color 1: {}", error); + }; + + if let Err(error) = + machine.set_color_2(&if let Some(c) = color_2 { c } else { color_1 }) + { + warn!("Unable to set color 2: {}", error); + }; } let elapsed = time::Instant::now() - time_beginning_loop;