RKTK API Docs RKTK Home Repo

rktk/config/
keymap.rs

1//! Keymap related configs.
2
3use super::CONST_CONFIG;
4
5/// Re-exports of raw [`rktk_keymanager`] types.
6///
7/// Use parent module's type if available.
8pub mod keymanager {
9    pub use rktk_keymanager::keycode;
10    pub use rktk_keymanager::keymap;
11}
12
13pub mod rktk_keys {
14    use rktk_keymanager::keycode::prelude::*;
15
16    macro_rules! gen_rktk_keys {
17        ($($name:ident = $value:literal),* $(,)?) => {
18            /// Custom key id of rktk-keymanager which is specific to rktk.
19            /// It must be used with `Custom1` variant of [`rktk_keymanager::keycode::KeyCode`]
20            ///
21            /// Custom2 and Custom3 can be used by user.
22            #[derive(
23                Debug, Clone, Copy, PartialEq, Eq, strum::EnumIter, strum::IntoStaticStr, strum::FromRepr,
24            )]
25            #[repr(u8)]
26            pub enum RktkKeys {
27                $(
28                    $name = $value,
29                )*
30            }
31
32            paste::paste! {
33                $(pub const [<$name:snake:upper>] : KeyAction = KeyAction::Normal(KeyCode::Custom1($value));)*
34            }
35        };
36    }
37
38    gen_rktk_keys! {
39        FlashClear = 0,
40        OutputBle = 1,
41        OutputUsb = 2,
42        BleBondClear = 3,
43        Bootloader = 4,
44        PowerOff = 5,
45        RgbOff = 6,
46        RgbBrightnessUp = 7,
47        RgbBrightnessDown = 8,
48        RgbPatternRainbow = 9,
49    }
50
51    use core::fmt::{self, Display, Formatter};
52    impl Display for RktkKeys {
53        fn fmt(&self, f: &mut Formatter) -> fmt::Result {
54            let s: &'static str = self.into();
55            write!(f, "{s}")
56        }
57    }
58}
59
60pub mod prelude {
61    pub use super::rktk_keys::*;
62    pub use rktk_keymanager::keycode::prelude::*;
63}
64
65pub type Keymap = rktk_keymanager::keymap::Keymap<
66    { CONST_CONFIG.key_manager.layer_count as usize },
67    { CONST_CONFIG.keyboard.rows as usize },
68    { CONST_CONFIG.keyboard.cols as usize },
69    { CONST_CONFIG.keyboard.encoder_count as usize },
70    { CONST_CONFIG.key_manager.tap_dance_max_definitions },
71    { CONST_CONFIG.key_manager.tap_dance_max_repeats },
72    { CONST_CONFIG.key_manager.combo_key_max_definitions },
73    { CONST_CONFIG.key_manager.combo_key_max_sources },
74>;
75
76pub type Layer = rktk_keymanager::keymap::Layer<
77    { CONST_CONFIG.keyboard.rows as usize },
78    { CONST_CONFIG.keyboard.cols as usize },
79    { CONST_CONFIG.keyboard.encoder_count as usize },
80>;
81
82pub type LayerKeymap = rktk_keymanager::keymap::LayerKeymap<
83    { CONST_CONFIG.keyboard.rows as usize },
84    { CONST_CONFIG.keyboard.cols as usize },
85>;