use serde_derive::Deserialize;
#[derive(Clone, Debug, Default, Deserialize)]
pub struct KeyboardTomlConfig {
pub keyboard: KeyboardInfo,
pub matrix: MatrixConfig,
#[serde(default = "default_light_config")]
pub light: LightConfig,
#[serde(default = "default_storage_config")]
pub storage: StorageConfig,
pub ble: Option<BleConfig>,
#[serde(default = "default_dep")]
pub dependency: DependencyConfig,
pub layout: Option<LayoutConfig>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct KeyboardInfo {
pub vendor_id: u16,
pub product_id: u16,
pub manufacturer: Option<String>,
pub product_name: Option<String>,
pub serial_number: Option<String>,
pub chip: String,
#[serde(default = "default_true")]
pub usb_enable: bool,
}
impl Default for KeyboardInfo {
fn default() -> Self {
Self {
vendor_id: 0x4c4b,
product_id: 0x4643,
manufacturer: Some("RMK".to_string()),
product_name: Some("RMK Keyboard".to_string()),
serial_number: Some("00000001".to_string()),
chip: "rp2040".to_string(),
usb_enable: true,
}
}
}
#[derive(Clone, Debug, Default, Deserialize)]
pub struct MatrixConfig {
pub rows: u8,
pub cols: u8,
pub layers: u8,
pub input_pins: Vec<String>,
pub output_pins: Vec<String>,
}
#[derive(Clone, Copy, Debug, Deserialize)]
pub struct StorageConfig {
#[serde(default)]
pub start_addr: usize,
#[serde(default = "default_num_sectors")]
pub num_sectors: u8,
#[serde(default = "default_true")]
pub enabled: bool,
}
impl Default for StorageConfig {
fn default() -> Self {
Self {
start_addr: 0,
num_sectors: 2,
enabled: false,
}
}
}
#[derive(Clone, Default, Debug, Deserialize)]
pub struct BleConfig {
pub enabled: bool,
pub battery_adc_pin: Option<String>,
pub charge_state: Option<PinConfig>,
pub charge_led: Option<PinConfig>,
}
#[derive(Clone, Default, Debug, Deserialize)]
pub struct LightConfig {
pub capslock: Option<PinConfig>,
pub scrolllock: Option<PinConfig>,
pub numslock: Option<PinConfig>,
}
fn default_num_sectors() -> u8 {
2
}
fn default_bool() -> bool {
false
}
fn default_true() -> bool {
true
}
#[derive(Clone, Default, Debug, Deserialize)]
pub struct PinConfig {
pub pin: String,
#[serde(default = "default_bool")]
pub low_active: bool,
}
#[derive(Clone, Debug, Default, Deserialize)]
pub struct DependencyConfig {
#[serde(default = "default_true")]
pub defmt_log: bool,
}
fn default_dep() -> DependencyConfig {
DependencyConfig { defmt_log: true }
}
fn default_light_config() -> LightConfig {
LightConfig::default()
}
fn default_storage_config() -> StorageConfig {
StorageConfig::default()
}
#[derive(Clone, Debug, Default, Deserialize)]
pub struct LayoutConfig {
pub default_keymap: Option<Vec<Vec<Vec<String>>>>,
}