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<AtomicBool>) {
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<dyn machine::Machine> = 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];
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;