From 07477e9d58905c619d7e9489735aae64af07e6f9 Mon Sep 17 00:00:00 2001 From: vextrixes <113197359+vextrixes@users.noreply.github.com> Date: Wed, 3 Jun 2026 22:06:59 +0200 Subject: [PATCH] implemented keymap struct --- src/lib.rs | 4 +++- src/rgb.rs | 11 +++++++++++ src/rgb_controller/controller.rs | 6 ++++-- src/rgb_controller/keymap.rs | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 src/rgb.rs diff --git a/src/lib.rs b/src/lib.rs index ea64cdc..3e15dbb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,9 @@ mod hid_wrapper; +mod rgb; mod rgb_controller; pub use hid_wrapper::HidWrapperError; +pub use rgb::Rgb; pub use rgb_controller::controller::RGBController; pub use rgb_controller::effects::Effects; -pub use rgb_controller::keymap::KeymapKeys; +pub use rgb_controller::keymap::{Keymap, KeymapKeys}; diff --git a/src/rgb.rs b/src/rgb.rs new file mode 100644 index 0000000..19e4fd4 --- /dev/null +++ b/src/rgb.rs @@ -0,0 +1,11 @@ +pub struct Rgb { + pub red: u8, + pub green: u8, + pub blue: u8, +} + +impl Rgb { + pub fn to_array(self) -> [u8; 3] { + [self.red, self.green, self.blue] + } +} diff --git a/src/rgb_controller/controller.rs b/src/rgb_controller/controller.rs index 8500fac..5bb51be 100644 --- a/src/rgb_controller/controller.rs +++ b/src/rgb_controller/controller.rs @@ -1,5 +1,6 @@ use crate::Effects; use crate::HidWrapperError; +use crate::Keymap; use crate::hid_wrapper::HidWrapper; pub struct RGBController { @@ -258,6 +259,7 @@ impl RGBController { Ok(()) } + pub fn set_static_effect( &mut self, red: u8, @@ -678,7 +680,7 @@ impl RGBController { pub fn set_static_per_key_effect( &mut self, brightness: u8, - keymap: [[u8; 3]; 144], + keymap: Keymap, ) -> Result<(), HidWrapperError> { self.set_effect( Effects::StaticPerKey, @@ -689,7 +691,7 @@ impl RGBController { brightness, 1, 0, - Some(keymap), + Some(keymap.map()), ) } } diff --git a/src/rgb_controller/keymap.rs b/src/rgb_controller/keymap.rs index c1f3543..ce59d01 100644 --- a/src/rgb_controller/keymap.rs +++ b/src/rgb_controller/keymap.rs @@ -1,3 +1,5 @@ +use crate::rgb::Rgb; + pub enum KeymapKeys { Escape, F1, @@ -109,8 +111,8 @@ pub enum KeymapKeys { NumPlus, } -impl Into for KeymapKeys { - fn into(self) -> usize { +impl KeymapKeys { + fn to_usize(&self) -> usize { match self { KeymapKeys::Escape => 1, KeymapKeys::F1 => 2, @@ -223,3 +225,29 @@ impl Into for KeymapKeys { } } } + +pub struct Keymap { + map: [[u8; 3]; 144], +} + +impl Default for Keymap { + fn default() -> Self { + Self { map: [[0; 3]; 144] } + } +} + +impl Keymap { + pub fn set_key(&mut self, key: KeymapKeys, color: Rgb) { + self.map[key.to_usize()] = color.to_array(); + } + + pub fn set_all_keys(&mut self, color: Rgb) { + self.map = [color.to_array(); 144]; + } +} + +impl Keymap { + pub fn map(&self) -> [[u8; 3]; 144] { + self.map.clone() + } +} \ No newline at end of file