Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ cargo nextest run --no-default-features --features=split,vial,storage,async_matr

Run macro tests from `rmk-macro/` (requires `cargo expand`).

Run format test from root:
```bash
sh scripts/format_all.sh
```

Full feature matrix (what CI runs, ~40 s when clean):
```bash
sh scripts/test_all.sh
Expand All @@ -40,16 +45,6 @@ cd examples/use_config/nrf52840_ble
cargo build --release
```

### Checks
```bash
# Format all Rust files
sh scripts/format_all.sh
# Run clippy for all examples and crates
sh scripts/clippy_all.sh
# Build all examples to check
sh scripts/check_all.sh
```

## Architecture

### Basic Data flow
Expand All @@ -70,3 +65,4 @@ Config is loaded in three layers (later overrides earlier): `event_default.toml`
## Rules

- Don't use `pub use` for convenient usage **within** the crate
- Don't add a small helper function (≤ 10 lines) that has only one call site — inline it at the call site
17 changes: 7 additions & 10 deletions examples/use_config/stm32h7/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ mod my_keyboard {
use embassy_stm32::Config;
use embassy_stm32::time::Hertz;
use embassy_stm32::usb::Driver;
use rmk::core_traits::Runnable;
use rmk::futures::future::join4;
use rmk::{run_all, run_rmk};
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::run_all;
use rmk::usb::UsbTransport;
use static_cell::StaticCell;

// If you want customize interrupte binding , use `#[Override(bind_interrupt)]` to override default interrupt binding
Expand Down Expand Up @@ -81,13 +81,10 @@ mod my_keyboard {
// Use `#[Override(entry)]` to override default rmk keyboard runner
#[Override(entry)]
fn run() {
let mut usb_transport = UsbTransport::new(driver, rmk_config.device_config);
let mut wpm_processor = WpmProcessor::new();

// Start
join4(
run_all!(matrix),
keyboard.run(),
host_service.run(),
run_rmk(driver, rmk_config),
)
.await;
run_all!(matrix, usb_transport, wpm_processor, keyboard, host_service).await;
}
}
18 changes: 7 additions & 11 deletions examples/use_rust/esp32c3_ble/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@ use esp_hal::rng::TrngSource;
use esp_hal::timer::timg::TimerGroup;
use esp_radio::ble::controller::BleConnector;
use esp_storage::FlashStorage;
use rmk::ble::build_ble_stack;
use rmk::ble::{BleTransport, build_ble_stack};
use rmk::config::{BehaviorConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig};
use rmk::core_traits::Runnable;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::futures::future::join4;
use rmk::host::HostService;
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::storage::async_flash_wrapper;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all};

use crate::keymap::*;
use crate::vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};
Expand Down Expand Up @@ -92,11 +91,8 @@ async fn main(_s: Spawner) {
let mut keyboard = Keyboard::new(&keymap); // Initialize the light controller
let mut host_service = HostService::new(&keymap, &rmk_config);

join4(
run_all!(matrix, storage),
keyboard.run(), // Keyboard is special
host_service.run(),
run_rmk(&stack, rmk_config),
)
.await;
let mut ble_transport = BleTransport::new(&stack, rmk_config).await;
let mut wpm_processor = WpmProcessor::new();

run_all!(matrix, storage, ble_transport, wpm_processor, keyboard, host_service).await;
}
18 changes: 7 additions & 11 deletions examples/use_rust/esp32c6_ble/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@ use esp_hal::rng::TrngSource;
use esp_hal::timer::timg::TimerGroup;
use esp_radio::ble::controller::BleConnector;
use esp_storage::FlashStorage;
use rmk::ble::build_ble_stack;
use rmk::ble::{BleTransport, build_ble_stack};
use rmk::config::{BehaviorConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig};
use rmk::core_traits::Runnable;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::futures::future::join4;
use rmk::host::HostService;
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::storage::async_flash_wrapper;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all};

use crate::keymap::*;
use crate::vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};
Expand Down Expand Up @@ -92,11 +91,8 @@ async fn main(_s: Spawner) {
let mut keyboard = Keyboard::new(&keymap); // Initialize the light controller
let mut host_service = HostService::new(&keymap, &rmk_config);

join4(
run_all!(matrix, storage),
keyboard.run(), // Keyboard is special
host_service.run(),
run_rmk(&stack, rmk_config),
)
.await;
let mut ble_transport = BleTransport::new(&stack, rmk_config).await;
let mut wpm_processor = WpmProcessor::new();

run_all!(matrix, storage, ble_transport, wpm_processor, keyboard, host_service).await;
}
25 changes: 16 additions & 9 deletions examples/use_rust/esp32s3_ble/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ use esp_hal::rng::TrngSource;
use esp_hal::timer::timg::TimerGroup;
use esp_radio::ble::controller::BleConnector;
use esp_storage::FlashStorage;
use rmk::ble::build_ble_stack;
use rmk::ble::{BleTransport, build_ble_stack};
use rmk::config::{BehaviorConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig};
use rmk::core_traits::Runnable;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::futures::future::join4;
use rmk::host::HostService;
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::storage::async_flash_wrapper;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::usb::UsbTransport;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all};

use crate::keymap::*;
use crate::vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};
Expand Down Expand Up @@ -103,11 +103,18 @@ async fn main(_s: Spawner) {
let mut keyboard = Keyboard::new(&keymap); // Initialize the light controller
let mut host_service = HostService::new(&keymap, &rmk_config);

join4(
run_all!(matrix, storage),
keyboard.run(), // Keyboard is special
host_service.run(),
run_rmk(usb_driver, &stack, rmk_config),
let mut usb_transport = UsbTransport::new(usb_driver, rmk_config.device_config);
let mut ble_transport = BleTransport::new(&stack, rmk_config).await;
let mut wpm_processor = WpmProcessor::new();

run_all!(
matrix,
storage,
usb_transport,
ble_transport,
wpm_processor,
keyboard,
host_service
)
.await;
}
18 changes: 7 additions & 11 deletions examples/use_rust/nrf52832_ble/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,14 @@ use nrf_sdc::{self as sdc, mpsl};
use panic_probe as _;
use rand_chacha::ChaCha12Rng;
use rand_core::SeedableRng;
use rmk::ble::build_ble_stack;
use rmk::ble::{BleTransport, build_ble_stack};
use rmk::config::{BehaviorConfig, DeviceConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig};
use rmk::core_traits::Runnable as _;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::futures::future::join4;
use rmk::host::HostService;
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all};
use static_cell::StaticCell;
use vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};

Expand Down Expand Up @@ -162,11 +161,8 @@ async fn main(spawner: Spawner) {
let mut keyboard = Keyboard::new(&keymap);
let mut host_service = HostService::new(&keymap, &rmk_config);

join4(
run_all!(matrix, storage),
keyboard.run(), // Keyboard is special
host_service.run(),
run_rmk(&stack, rmk_config),
)
.await;
let mut ble_transport = BleTransport::new(&stack, rmk_config).await;
let mut wpm_processor = WpmProcessor::new();

run_all!(matrix, storage, ble_transport, wpm_processor, keyboard, host_service).await;
}
17 changes: 7 additions & 10 deletions examples/use_rust/nrf52840/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ use embassy_nrf::{bind_interrupts, peripherals};
use keymap::{COL, ROW};
use panic_probe as _;
use rmk::config::{BehaviorConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig};
use rmk::core_traits::Runnable;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::futures::future::join4;
use rmk::host::HostService;
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::storage::async_flash_wrapper;
use rmk::{KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::usb::UsbTransport;
use rmk::{KeymapData, initialize_keymap_and_storage, run_all};
use vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};

bind_interrupts!(struct Irqs {
Expand Down Expand Up @@ -83,12 +83,9 @@ async fn main(_spawner: Spawner) {
let mut keyboard = Keyboard::new(&keymap);
let mut host_service = HostService::new(&keymap, &rmk_config);

let mut usb_transport = UsbTransport::new(driver, rmk_config.device_config);
let mut wpm_processor = WpmProcessor::new();

// Start
join4(
run_all!(matrix, storage),
keyboard.run(),
host_service.run(),
run_rmk(driver, rmk_config),
)
.await;
run_all!(matrix, storage, usb_transport, wpm_processor, keyboard, host_service).await;
}
31 changes: 19 additions & 12 deletions examples/use_rust/nrf52840_ble/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,20 @@ use nrf_sdc::{self as sdc, mpsl};
use panic_probe as _;
use rand_chacha::ChaCha12Rng;
use rand_core::SeedableRng;
use rmk::ble::build_ble_stack;
use rmk::ble::{BleTransport, build_ble_stack};
use rmk::config::{
BehaviorConfig, BleBatteryConfig, DeviceConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig,
};
use rmk::core_traits::Runnable;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::futures::future::join5;
use rmk::host::HostService;
use rmk::input_device::adc::{AnalogEventType, NrfAdc};
use rmk::input_device::battery::BatteryProcessor;
use rmk::input_device::rotary_encoder::{DefaultPhase, RotaryEncoder};
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::usb::UsbTransport;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all};
use static_cell::StaticCell;
use vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};

Expand Down Expand Up @@ -213,14 +213,21 @@ async fn main(spawner: Spawner) {
);
let mut batt_proc = BatteryProcessor::new(2000, 2806);

join5(
run_all!(matrix, encoder, adc_device, storage),
run_all! {
batt_proc
},
keyboard.run(), // Keyboard is special
host_service.run(),
run_rmk(driver, &stack, rmk_config),
let mut usb_transport = UsbTransport::new(driver, rmk_config.device_config);
let mut ble_transport = BleTransport::new(&stack, rmk_config).await;
let mut wpm_processor = WpmProcessor::new();

run_all!(
matrix,
encoder,
adc_device,
storage,
usb_transport,
ble_transport,
wpm_processor,
batt_proc,
keyboard,
host_service
)
.await;
}
40 changes: 25 additions & 15 deletions examples/use_rust/nrf52840_ble_split/src/central.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,25 @@ use nrf_sdc::{self as sdc, mpsl};
use panic_probe as _;
use rand_chacha::ChaCha12Rng;
use rand_core::SeedableRng;
use rmk::ble::build_ble_stack;
use rmk::ble::{BleTransport, build_ble_stack};
use rmk::config::{
BehaviorConfig, BleBatteryConfig, DeviceConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig,
};
use rmk::core_traits::Runnable;
use rmk::debounce::default_debouncer::DefaultDebouncer;
use rmk::event::*;
use rmk::futures::future::join5;
use rmk::futures::future::join;
use rmk::host::HostService;
use rmk::input_device::adc::{AnalogEventType, NrfAdc};
use rmk::input_device::battery::BatteryProcessor;
use rmk::input_device::rotary_encoder::RotaryEncoder;
use rmk::keyboard::Keyboard;
use rmk::matrix::Matrix;
use rmk::processor::builtin::led_indicator::KeyboardIndicatorProcessor;
use rmk::processor::builtin::wpm::WpmProcessor;
use rmk::split::ble::central::scan_peripherals;
use rmk::split::central::run_peripheral_manager;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all, run_rmk};
use rmk::usb::UsbTransport;
use rmk::{HostResources, KeymapData, initialize_keymap_and_storage, run_all};
use static_cell::StaticCell;
use vial::{VIAL_KEYBOARD_DEF, VIAL_KEYBOARD_ID};

Expand Down Expand Up @@ -257,20 +258,29 @@ async fn main(spawner: Spawner) {

let mut peripheral_battery_monitor = PeripheralBatteryMonitor {};

let mut usb_transport = UsbTransport::new(driver, rmk_config.device_config);
let mut ble_transport = BleTransport::new(&stack, rmk_config).await;
let mut wpm_processor = WpmProcessor::new();

// Start
join5(
run_all!(matrix, encoder, adc_device, storage),
run_all! {
batt_proc
},
keyboard.run(),
host_service.run(),
join5(
join(
run_all!(
matrix,
encoder,
adc_device,
storage,
usb_transport,
ble_transport,
wpm_processor,
batt_proc,
keyboard,
host_service,
capslock_led,
peripheral_battery_monitor
),
join(
run_peripheral_manager::<4, 7, 4, 0, _>(0, &peripheral_addrs, &stack),
run_rmk(driver, &stack, rmk_config),
scan_peripherals(&stack, &peripheral_addrs),
capslock_led.run(),
peripheral_battery_monitor.run(),
),
)
.await;
Expand Down
Loading