#[cfg(feature = "_esp_ble")]
mod esp_config;
#[cfg(feature = "_nrf_ble")]
mod nrf_config;
#[cfg(feature = "_esp_ble")]
pub use esp_config::BleBatteryConfig;
#[cfg(feature = "_nrf_ble")]
pub use nrf_config::BleBatteryConfig;
use embedded_hal::digital::OutputPin;
pub struct RmkConfig<'a, O: OutputPin> {
pub mouse_config: MouseConfig,
pub usb_config: KeyboardUsbConfig<'a>,
pub vial_config: VialConfig<'a>,
pub light_config: LightConfig<O>,
pub storage_config: StorageConfig,
#[cfg(feature = "_nrf_ble")]
pub ble_battery_config: BleBatteryConfig<'a>,
#[cfg(feature = "_esp_ble")]
pub ble_battery_config: BleBatteryConfig,
}
impl<'a, O: OutputPin> Default for RmkConfig<'a, O> {
fn default() -> Self {
Self {
mouse_config: MouseConfig::default(),
usb_config: KeyboardUsbConfig::default(),
vial_config: VialConfig::default(),
light_config: LightConfig::default(),
storage_config: StorageConfig::default(),
#[cfg(any(feature = "_nrf_ble", feature = "_esp_ble"))]
ble_battery_config: BleBatteryConfig::default(),
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct StorageConfig {
pub start_addr: usize,
pub num_sectors: u8,
}
impl Default for StorageConfig {
fn default() -> Self {
Self {
start_addr: 0,
num_sectors: 2,
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct LightConfig<O: OutputPin> {
pub capslock: Option<LightPinConfig<O>>,
pub scrolllock: Option<LightPinConfig<O>>,
pub numslock: Option<LightPinConfig<O>>,
}
#[derive(Clone, Copy, Default, Debug)]
pub struct LightPinConfig<O: OutputPin> {
pub pin: O,
pub low_active: bool,
}
impl<O: OutputPin> Default for LightConfig<O> {
fn default() -> Self {
Self {
capslock: None,
scrolllock: None,
numslock: None,
}
}
}
#[derive(Clone, Copy, Debug, Default)]
pub struct VialConfig<'a> {
pub vial_keyboard_id: &'a [u8],
pub vial_keyboard_def: &'a [u8],
}
impl<'a> VialConfig<'a> {
pub fn new(vial_keyboard_id: &'a [u8], vial_keyboard_def: &'a [u8]) -> Self {
Self {
vial_keyboard_id,
vial_keyboard_def,
}
}
}
pub struct DebounceConfig {
pub debounce_time: u32,
}
#[derive(Clone, Copy, Debug)]
pub struct MouseConfig {
pub mouse_key_interval: u32,
pub mouse_wheel_interval: u32,
}
impl Default for MouseConfig {
fn default() -> Self {
Self {
mouse_key_interval: 20,
mouse_wheel_interval: 80,
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct RGBLightConfig {
pub enabled: bool,
pub rgb_led_num: u32,
pub rgb_hue_step: u32,
pub rgb_val_step: u32,
pub rgb_sat_step: u32,
}
#[derive(Clone, Copy, Debug)]
pub struct KeyboardUsbConfig<'a> {
pub vid: u16,
pub pid: u16,
pub manufacturer: &'a str,
pub product_name: &'a str,
pub serial_number: &'a str,
}
impl<'a> Default for KeyboardUsbConfig<'a> {
fn default() -> Self {
Self {
vid: 0x4c4b,
pid: 0x4643,
manufacturer: "RMK",
product_name: "RMK Keyboard",
serial_number: "00000001",
}
}
}