From 17a8bbe42f020224a6790247b43aafa1a195aac9 Mon Sep 17 00:00:00 2001 From: vextrixes <113197359+vextrixes@users.noreply.github.com> Date: Tue, 7 Jul 2026 22:58:47 +0200 Subject: [PATCH] Created a preset struct --- src/color.rs | 2 +- src/lib.rs | 1 + src/rgb_controller.rs | 1 + src/rgb_controller/controller.rs | 46 ++++++++++++++--------------- src/rgb_controller/effect_info.rs | 16 +++++----- src/rgb_controller/effects.rs | 14 ++------- src/rgb_controller/preset.rs | 49 +++++++++++++++++++++++++++++++ 7 files changed, 86 insertions(+), 43 deletions(-) create mode 100644 src/rgb_controller/preset.rs diff --git a/src/color.rs b/src/color.rs index 580f67c..1c5f951 100644 --- a/src/color.rs +++ b/src/color.rs @@ -1,4 +1,4 @@ -#[derive(Default)] +#[derive(Default, PartialEq, Debug)] pub struct Color { pub red: u8, pub green: u8, diff --git a/src/lib.rs b/src/lib.rs index 74912e3..26efc8b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ pub use rgb_controller::effect_info::{ DirectionPolicy, EFFECTS, EffectInfo, HorizontalDirections, VerticalDirections, }; pub use rgb_controller::effects::Effects; +pub use rgb_controller::preset::Preset; #[cfg(feature = "access_hid_wrapper")] pub use hid_wrapper::HidWrapper; diff --git a/src/rgb_controller.rs b/src/rgb_controller.rs index 07882e1..93077ea 100644 --- a/src/rgb_controller.rs +++ b/src/rgb_controller.rs @@ -1,3 +1,4 @@ pub mod controller; pub mod effect_info; pub mod effects; +pub mod preset; diff --git a/src/rgb_controller/controller.rs b/src/rgb_controller/controller.rs index df1d901..3ee426f 100644 --- a/src/rgb_controller/controller.rs +++ b/src/rgb_controller/controller.rs @@ -2,8 +2,8 @@ use crate::Color; use crate::Effects; use crate::HidWrapperError; use crate::Keymap; +use crate::Preset; use crate::hid_wrapper::HidWrapper; -use crate::rgb_controller::effects::Effect; pub struct RGBController { hid_wrapper: HidWrapper, @@ -225,7 +225,7 @@ impl RGBController { speed: u8, direction: u8, keymap: Option<[[u8; 3]; 144]>, - ) -> Result { + ) -> Result { self.hid_wrapper.open_device()?; self.prepare_device()?; @@ -264,7 +264,7 @@ impl RGBController { self.hid_wrapper.close_device(); - Ok(Effect { + Ok(Preset { effect, color, full_color, @@ -280,7 +280,7 @@ impl RGBController { color: Color, brightness: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Static, color, @@ -298,7 +298,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::SingleOff, color, @@ -316,7 +316,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::SingleOn, color, @@ -334,7 +334,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Glittering, color, @@ -352,7 +352,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Rain, color, @@ -368,7 +368,7 @@ impl RGBController { &mut self, brightness: u8, speed: u8, - ) -> Result { + ) -> Result { self.set_effect( Effects::Colorful, Color::default(), @@ -386,7 +386,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Breath, color, @@ -402,7 +402,7 @@ impl RGBController { &mut self, brightness: u8, speed: u8, - ) -> Result { + ) -> Result { self.set_effect( Effects::Spectrum, Color::default(), @@ -420,7 +420,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::CentrifugalWave, color, @@ -439,7 +439,7 @@ impl RGBController { speed: u8, direction: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::VerticalWave, color, @@ -458,7 +458,7 @@ impl RGBController { speed: u8, direction: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::HorizontalWave, color, @@ -476,7 +476,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Rotating, color, @@ -494,7 +494,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Explosion, color, @@ -512,7 +512,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Launch, color, @@ -530,7 +530,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Ripples, color, @@ -548,7 +548,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Snake, color, @@ -566,7 +566,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Pulse, color, @@ -584,7 +584,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Tilt, color, @@ -602,7 +602,7 @@ impl RGBController { brightness: u8, speed: u8, full_color: Option, - ) -> Result { + ) -> Result { self.set_effect( Effects::Shuttle, color, @@ -618,7 +618,7 @@ impl RGBController { &mut self, brightness: u8, keymap: Keymap, - ) -> Result { + ) -> Result { self.set_effect( Effects::StaticPerKey, Color::default(), diff --git a/src/rgb_controller/effect_info.rs b/src/rgb_controller/effect_info.rs index 2164011..30f9d60 100644 --- a/src/rgb_controller/effect_info.rs +++ b/src/rgb_controller/effect_info.rs @@ -1,15 +1,17 @@ use crate::Effects; +#[derive(Clone)] pub struct EffectInfo<'a> { - name: &'a str, - effect: Effects, - can_set_color: bool, - can_set_speed: bool, - can_set_direction: DirectionPolicy, - can_set_full_color: bool, - requires_keymap: bool, + pub name: &'a str, + pub effect: Effects, + pub can_set_color: bool, + pub can_set_speed: bool, + pub can_set_direction: DirectionPolicy, + pub can_set_full_color: bool, + pub requires_keymap: bool, } +#[derive(PartialEq, Clone)] pub enum DirectionPolicy { None, Horizontal01, diff --git a/src/rgb_controller/effects.rs b/src/rgb_controller/effects.rs index 9b8ed7a..feecd94 100644 --- a/src/rgb_controller/effects.rs +++ b/src/rgb_controller/effects.rs @@ -4,10 +4,10 @@ use Effects::{ VerticalWave, }; -use crate::Color; - /// Effects of the keyboard +#[derive(Clone, Default, PartialEq, Debug)] pub enum Effects { + #[default] Static, SingleOn, SingleOff, @@ -83,13 +83,3 @@ impl Effects { } } } - -pub struct Effect { - pub effect: Effects, - pub color: Color, - pub full_color: bool, - pub brightness: u8, - pub speed: u8, - pub direction: u8, - pub keymap: Option<[[u8; 3]; 144]>, -} diff --git a/src/rgb_controller/preset.rs b/src/rgb_controller/preset.rs new file mode 100644 index 0000000..df997e4 --- /dev/null +++ b/src/rgb_controller/preset.rs @@ -0,0 +1,49 @@ +use crate::Color; +use crate::Effects; + +#[derive(PartialEq, Debug)] +pub struct Preset { + pub effect: Effects, + pub color: Color, + pub full_color: bool, + pub brightness: u8, + pub speed: u8, + pub direction: u8, + pub keymap: Option<[[u8; 3]; 144]>, +} + +impl Preset { + pub fn new( + effect: Effects, + color: Color, + full_color: bool, + brightness: u8, + speed: u8, + direction: u8, + keymap: Option<[[u8; 3]; 144]>, + ) -> Self { + Self { + effect, + color, + full_color, + brightness: brightness.clamp(0, 16), + speed: speed.clamp(1, 16), + direction: direction.clamp(0, 3), + keymap, + } + } +} + +impl Default for Preset { + fn default() -> Self { + Self::new( + Default::default(), + Default::default(), + Default::default(), + Default::default(), + Default::default(), + Default::default(), + Default::default(), + ) + } +}