From d607f1b5f58c7242dc1a413541ec905d5656e317 Mon Sep 17 00:00:00 2001 From: nazo6 Date: Wed, 1 Oct 2025 12:11:26 +0900 Subject: [PATCH 1/4] rktk-ksp init --- Cargo.lock | 4 ++++ crates/rktk-ksp/Cargo.toml | 9 +++++++++ crates/rktk-ksp/src/lib.rs | 1 + 3 files changed, 14 insertions(+) create mode 100644 crates/rktk-ksp/Cargo.toml create mode 100644 crates/rktk-ksp/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index a8266fda..2fe1540b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6114,6 +6114,10 @@ dependencies = [ "static_cell", ] +[[package]] +name = "rktk-ksp" +version = "0.2.0" + [[package]] name = "rktk-log" version = "0.2.0" diff --git a/crates/rktk-ksp/Cargo.toml b/crates/rktk-ksp/Cargo.toml new file mode 100644 index 00000000..86e0e576 --- /dev/null +++ b/crates/rktk-ksp/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "rktk-ksp" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true + +[dependencies] diff --git a/crates/rktk-ksp/src/lib.rs b/crates/rktk-ksp/src/lib.rs new file mode 100644 index 00000000..0c9ac1ac --- /dev/null +++ b/crates/rktk-ksp/src/lib.rs @@ -0,0 +1 @@ +#![no_std] From d6df4e77caa87a4f3e0ff1ad2176fb114a74cbfb Mon Sep 17 00:00:00 2001 From: nazo6 Date: Wed, 1 Oct 2025 12:22:26 +0900 Subject: [PATCH 2/4] update folder structure --- Cargo.toml | 2 +- .../{corne/rktk.json => configs/corne.json} | 0 .../rktk.json => configs/keyball61.json} | 0 keyboards/{neg/rktk.json => configs/neg.json} | 0 .../corne-nrf/.cargo/config.toml | 0 .../crates => examples}/corne-nrf/Cargo.toml | 0 .../crates => examples}/corne-nrf/build.rs | 0 .../crates => examples}/corne-nrf/memory.x | 0 .../corne-nrf/src/keymap.rs | 0 .../crates => examples}/corne-nrf/src/main.rs | 0 .../corne-rp/.cargo/config.toml | 0 .../crates => examples}/corne-rp/Cargo.toml | 0 .../crates => examples}/corne-rp/README.md | 0 .../crates => examples}/corne-rp/build.rs | 0 .../crates => examples}/corne-rp/memory.x | 0 .../corne-rp/src/keymap.rs | 0 .../crates => examples}/corne-rp/src/main.rs | 0 .../keyball61-nrf/.cargo/config.toml | 0 .../keyball61-nrf/Cargo.toml | 0 .../keyball61-nrf/build.rs | 0 .../keyball61-nrf/memory.x | 0 .../keyball61-nrf/src/main.rs} | 0 .../keyball61-rp}/.cargo/config.toml | 0 .../keyball61-rp/Cargo.toml | 0 .../crates => examples}/keyball61-rp/build.rs | 0 .../crates => examples}/keyball61-rp/memory.x | 0 .../keyball61-rp/src/main.rs} | 0 .../neg-nrf/.cargo/config.toml | 0 .../crates => examples}/neg-nrf/Cargo.toml | 0 .../{neg/crates => examples}/neg-nrf/build.rs | 0 .../{neg/crates => examples}/neg-nrf/memory.x | 0 .../neg-nrf/src/bin/neg_nrf_master.rs | 0 .../neg-nrf/src/bin/neg_nrf_slave.rs | 0 keyboards/ksps/corne-nrf/Cargo.toml | 52 ++++ keyboards/ksps/corne-nrf/src/lib.rs | 0 keyboards/ksps/corne-rp/Cargo.toml | 47 ++++ keyboards/ksps/corne-rp/src/lib.rs | 0 keyboards/ksps/keyball61-common/Cargo.toml | 14 ++ .../keyball61-common/src/lib.rs | 0 keyboards/ksps/keyball61-nrf/Cargo.toml | 58 +++++ .../crates => ksps}/keyball61-nrf/src/lib.rs | 0 keyboards/ksps/keyball61-rp/Cargo.toml | 57 +++++ .../crates => ksps}/keyball61-rp/src/lib.rs | 0 keyboards/ksps/neg-nrf/Cargo.toml | 102 ++++++++ .../crates => ksps}/neg-nrf/src/common.rs | 0 .../crates => ksps}/neg-nrf/src/drivers.rs | 0 .../{neg/crates => ksps}/neg-nrf/src/lib.rs | 0 .../crates => ksps}/neg-nrf/src/master.rs | 0 .../{neg/crates => ksps}/neg-nrf/src/misc.rs | 0 .../{neg/crates => ksps}/neg-nrf/src/slave.rs | 0 .../.cargo/config.toml | 0 .../corne/.cargo/config.toml | 0 .../corne/crates/corne-nrf/.cargo/config.toml | 2 + .../corne/crates/corne-nrf/Cargo.toml | 53 ++++ keyboards_old/corne/crates/corne-nrf/build.rs | 18 ++ keyboards_old/corne/crates/corne-nrf/memory.x | 7 + .../corne/crates/corne-nrf/src/keymap.rs | 89 +++++++ .../corne/crates/corne-nrf/src/main.rs | 118 +++++++++ .../corne/crates/corne-rp}/.cargo/config.toml | 0 .../corne/crates/corne-rp/Cargo.toml | 48 ++++ keyboards_old/corne/crates/corne-rp/README.md | 27 ++ keyboards_old/corne/crates/corne-rp/build.rs | 19 ++ keyboards_old/corne/crates/corne-rp/memory.x | 17 ++ .../corne/crates/corne-rp/src/keymap.rs | 89 +++++++ .../corne/crates/corne-rp/src/main.rs | 115 +++++++++ keyboards_old/corne/rktk.json | 14 ++ .../dummy/.cargo/config.toml | 0 .../dummy/crates/dummy-rp/.cargo/config.toml | 2 + .../dummy/crates/dummy-rp/Cargo.toml | 0 .../dummy/crates/dummy-rp/src/keymap.rs | 0 .../dummy/crates/dummy-rp/src/main.rs | 0 .../keyball61/.cargo/config.toml | 0 .../crates/keyball61-common/Cargo.toml | 0 .../crates/keyball61-common/src/lib.rs | 146 +++++++++++ .../crates/keyball61-nrf/.cargo/config.toml | 2 + .../keyball61/crates/keyball61-nrf/Cargo.toml | 64 +++++ .../keyball61/crates/keyball61-nrf/build.rs | 34 +++ .../keyball61/crates/keyball61-nrf/memory.x | 7 + .../crates/keyball61-nrf/src/bin/keyball61.rs | 14 ++ .../keyball61/crates/keyball61-nrf/src/lib.rs | 235 ++++++++++++++++++ .../crates/keyball61-rp/.cargo/config.toml | 2 + .../keyball61/crates/keyball61-rp/Cargo.toml | 63 +++++ .../keyball61/crates/keyball61-rp/build.rs | 40 +++ .../keyball61/crates/keyball61-rp/memory.x | 18 ++ .../crates/keyball61-rp/src/bin/keyball61.rs | 14 ++ .../keyball61/crates/keyball61-rp/src/lib.rs | 155 ++++++++++++ keyboards_old/keyball61/rktk.json | 51 ++++ .../neg/.cargo/config.toml | 0 .../neg/crates/neg-nrf/.cargo/config.toml | 2 + keyboards_old/neg/crates/neg-nrf/Cargo.toml | 114 +++++++++ keyboards_old/neg/crates/neg-nrf/build.rs | 39 +++ keyboards_old/neg/crates/neg-nrf/memory.x | 7 + .../crates/neg-nrf/src/bin/neg_nrf_master.rs | 17 ++ .../crates/neg-nrf/src/bin/neg_nrf_slave.rs | 13 + .../neg/crates/neg-nrf/src/common.rs | 72 ++++++ .../neg/crates/neg-nrf/src/drivers.rs | 173 +++++++++++++ keyboards_old/neg/crates/neg-nrf/src/lib.rs | 61 +++++ .../neg/crates/neg-nrf/src/master.rs | 93 +++++++ keyboards_old/neg/crates/neg-nrf/src/misc.rs | 110 ++++++++ keyboards_old/neg/crates/neg-nrf/src/slave.rs | 38 +++ keyboards_old/neg/rktk.json | 54 ++++ 101 files changed, 2587 insertions(+), 1 deletion(-) rename keyboards/{corne/rktk.json => configs/corne.json} (100%) rename keyboards/{keyball61/rktk.json => configs/keyball61.json} (100%) rename keyboards/{neg/rktk.json => configs/neg.json} (100%) rename keyboards/{corne/crates => examples}/corne-nrf/.cargo/config.toml (100%) rename keyboards/{corne/crates => examples}/corne-nrf/Cargo.toml (100%) rename keyboards/{corne/crates => examples}/corne-nrf/build.rs (100%) rename keyboards/{corne/crates => examples}/corne-nrf/memory.x (100%) rename keyboards/{corne/crates => examples}/corne-nrf/src/keymap.rs (100%) rename keyboards/{corne/crates => examples}/corne-nrf/src/main.rs (100%) rename keyboards/{corne/crates => examples}/corne-rp/.cargo/config.toml (100%) rename keyboards/{corne/crates => examples}/corne-rp/Cargo.toml (100%) rename keyboards/{corne/crates => examples}/corne-rp/README.md (100%) rename keyboards/{corne/crates => examples}/corne-rp/build.rs (100%) rename keyboards/{corne/crates => examples}/corne-rp/memory.x (100%) rename keyboards/{corne/crates => examples}/corne-rp/src/keymap.rs (100%) rename keyboards/{corne/crates => examples}/corne-rp/src/main.rs (100%) rename keyboards/{keyball61/crates => examples}/keyball61-nrf/.cargo/config.toml (100%) rename keyboards/{keyball61/crates => examples}/keyball61-nrf/Cargo.toml (100%) rename keyboards/{keyball61/crates => examples}/keyball61-nrf/build.rs (100%) rename keyboards/{keyball61/crates => examples}/keyball61-nrf/memory.x (100%) rename keyboards/{keyball61/crates/keyball61-nrf/src/bin/keyball61.rs => examples/keyball61-nrf/src/main.rs} (100%) rename keyboards/{dummy/crates/dummy-rp => examples/keyball61-rp}/.cargo/config.toml (100%) rename keyboards/{keyball61/crates => examples}/keyball61-rp/Cargo.toml (100%) rename keyboards/{keyball61/crates => examples}/keyball61-rp/build.rs (100%) rename keyboards/{keyball61/crates => examples}/keyball61-rp/memory.x (100%) rename keyboards/{keyball61/crates/keyball61-rp/src/bin/keyball61.rs => examples/keyball61-rp/src/main.rs} (100%) rename keyboards/{neg/crates => examples}/neg-nrf/.cargo/config.toml (100%) rename keyboards/{neg/crates => examples}/neg-nrf/Cargo.toml (100%) rename keyboards/{neg/crates => examples}/neg-nrf/build.rs (100%) rename keyboards/{neg/crates => examples}/neg-nrf/memory.x (100%) rename keyboards/{neg/crates => examples}/neg-nrf/src/bin/neg_nrf_master.rs (100%) rename keyboards/{neg/crates => examples}/neg-nrf/src/bin/neg_nrf_slave.rs (100%) create mode 100644 keyboards/ksps/corne-nrf/Cargo.toml create mode 100644 keyboards/ksps/corne-nrf/src/lib.rs create mode 100644 keyboards/ksps/corne-rp/Cargo.toml create mode 100644 keyboards/ksps/corne-rp/src/lib.rs create mode 100644 keyboards/ksps/keyball61-common/Cargo.toml rename keyboards/{keyball61/crates => ksps}/keyball61-common/src/lib.rs (100%) create mode 100644 keyboards/ksps/keyball61-nrf/Cargo.toml rename keyboards/{keyball61/crates => ksps}/keyball61-nrf/src/lib.rs (100%) create mode 100644 keyboards/ksps/keyball61-rp/Cargo.toml rename keyboards/{keyball61/crates => ksps}/keyball61-rp/src/lib.rs (100%) create mode 100644 keyboards/ksps/neg-nrf/Cargo.toml rename keyboards/{neg/crates => ksps}/neg-nrf/src/common.rs (100%) rename keyboards/{neg/crates => ksps}/neg-nrf/src/drivers.rs (100%) rename keyboards/{neg/crates => ksps}/neg-nrf/src/lib.rs (100%) rename keyboards/{neg/crates => ksps}/neg-nrf/src/master.rs (100%) rename keyboards/{neg/crates => ksps}/neg-nrf/src/misc.rs (100%) rename keyboards/{neg/crates => ksps}/neg-nrf/src/slave.rs (100%) rename {keyboards => keyboards_old}/.cargo/config.toml (100%) rename {keyboards => keyboards_old}/corne/.cargo/config.toml (100%) create mode 100644 keyboards_old/corne/crates/corne-nrf/.cargo/config.toml create mode 100644 keyboards_old/corne/crates/corne-nrf/Cargo.toml create mode 100644 keyboards_old/corne/crates/corne-nrf/build.rs create mode 100644 keyboards_old/corne/crates/corne-nrf/memory.x create mode 100644 keyboards_old/corne/crates/corne-nrf/src/keymap.rs create mode 100644 keyboards_old/corne/crates/corne-nrf/src/main.rs rename {keyboards/keyball61/crates/keyball61-rp => keyboards_old/corne/crates/corne-rp}/.cargo/config.toml (100%) create mode 100644 keyboards_old/corne/crates/corne-rp/Cargo.toml create mode 100644 keyboards_old/corne/crates/corne-rp/README.md create mode 100644 keyboards_old/corne/crates/corne-rp/build.rs create mode 100644 keyboards_old/corne/crates/corne-rp/memory.x create mode 100644 keyboards_old/corne/crates/corne-rp/src/keymap.rs create mode 100644 keyboards_old/corne/crates/corne-rp/src/main.rs create mode 100644 keyboards_old/corne/rktk.json rename {keyboards => keyboards_old}/dummy/.cargo/config.toml (100%) create mode 100644 keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml rename {keyboards => keyboards_old}/dummy/crates/dummy-rp/Cargo.toml (100%) rename {keyboards => keyboards_old}/dummy/crates/dummy-rp/src/keymap.rs (100%) rename {keyboards => keyboards_old}/dummy/crates/dummy-rp/src/main.rs (100%) rename {keyboards => keyboards_old}/keyball61/.cargo/config.toml (100%) rename {keyboards => keyboards_old}/keyball61/crates/keyball61-common/Cargo.toml (100%) create mode 100644 keyboards_old/keyball61/crates/keyball61-common/src/lib.rs create mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml create mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml create mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/build.rs create mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/memory.x create mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs create mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs create mode 100644 keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml create mode 100644 keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml create mode 100644 keyboards_old/keyball61/crates/keyball61-rp/build.rs create mode 100644 keyboards_old/keyball61/crates/keyball61-rp/memory.x create mode 100644 keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs create mode 100644 keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs create mode 100644 keyboards_old/keyball61/rktk.json rename {keyboards => keyboards_old}/neg/.cargo/config.toml (100%) create mode 100644 keyboards_old/neg/crates/neg-nrf/.cargo/config.toml create mode 100644 keyboards_old/neg/crates/neg-nrf/Cargo.toml create mode 100644 keyboards_old/neg/crates/neg-nrf/build.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/memory.x create mode 100644 keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/common.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/drivers.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/lib.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/master.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/misc.rs create mode 100644 keyboards_old/neg/crates/neg-nrf/src/slave.rs create mode 100644 keyboards_old/neg/rktk.json diff --git a/Cargo.toml b/Cargo.toml index 47e87b5e..30faca0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ cargo-features = ["profile-rustflags"] [workspace] resolver = "3" -members = ["crates/*", "keyboards/*/crates/*"] +members = ["crates/*", "keyboards/ksps/*"] exclude = ["crates/.cargo"] [workspace.package] diff --git a/keyboards/corne/rktk.json b/keyboards/configs/corne.json similarity index 100% rename from keyboards/corne/rktk.json rename to keyboards/configs/corne.json diff --git a/keyboards/keyball61/rktk.json b/keyboards/configs/keyball61.json similarity index 100% rename from keyboards/keyball61/rktk.json rename to keyboards/configs/keyball61.json diff --git a/keyboards/neg/rktk.json b/keyboards/configs/neg.json similarity index 100% rename from keyboards/neg/rktk.json rename to keyboards/configs/neg.json diff --git a/keyboards/corne/crates/corne-nrf/.cargo/config.toml b/keyboards/examples/corne-nrf/.cargo/config.toml similarity index 100% rename from keyboards/corne/crates/corne-nrf/.cargo/config.toml rename to keyboards/examples/corne-nrf/.cargo/config.toml diff --git a/keyboards/corne/crates/corne-nrf/Cargo.toml b/keyboards/examples/corne-nrf/Cargo.toml similarity index 100% rename from keyboards/corne/crates/corne-nrf/Cargo.toml rename to keyboards/examples/corne-nrf/Cargo.toml diff --git a/keyboards/corne/crates/corne-nrf/build.rs b/keyboards/examples/corne-nrf/build.rs similarity index 100% rename from keyboards/corne/crates/corne-nrf/build.rs rename to keyboards/examples/corne-nrf/build.rs diff --git a/keyboards/corne/crates/corne-nrf/memory.x b/keyboards/examples/corne-nrf/memory.x similarity index 100% rename from keyboards/corne/crates/corne-nrf/memory.x rename to keyboards/examples/corne-nrf/memory.x diff --git a/keyboards/corne/crates/corne-nrf/src/keymap.rs b/keyboards/examples/corne-nrf/src/keymap.rs similarity index 100% rename from keyboards/corne/crates/corne-nrf/src/keymap.rs rename to keyboards/examples/corne-nrf/src/keymap.rs diff --git a/keyboards/corne/crates/corne-nrf/src/main.rs b/keyboards/examples/corne-nrf/src/main.rs similarity index 100% rename from keyboards/corne/crates/corne-nrf/src/main.rs rename to keyboards/examples/corne-nrf/src/main.rs diff --git a/keyboards/corne/crates/corne-rp/.cargo/config.toml b/keyboards/examples/corne-rp/.cargo/config.toml similarity index 100% rename from keyboards/corne/crates/corne-rp/.cargo/config.toml rename to keyboards/examples/corne-rp/.cargo/config.toml diff --git a/keyboards/corne/crates/corne-rp/Cargo.toml b/keyboards/examples/corne-rp/Cargo.toml similarity index 100% rename from keyboards/corne/crates/corne-rp/Cargo.toml rename to keyboards/examples/corne-rp/Cargo.toml diff --git a/keyboards/corne/crates/corne-rp/README.md b/keyboards/examples/corne-rp/README.md similarity index 100% rename from keyboards/corne/crates/corne-rp/README.md rename to keyboards/examples/corne-rp/README.md diff --git a/keyboards/corne/crates/corne-rp/build.rs b/keyboards/examples/corne-rp/build.rs similarity index 100% rename from keyboards/corne/crates/corne-rp/build.rs rename to keyboards/examples/corne-rp/build.rs diff --git a/keyboards/corne/crates/corne-rp/memory.x b/keyboards/examples/corne-rp/memory.x similarity index 100% rename from keyboards/corne/crates/corne-rp/memory.x rename to keyboards/examples/corne-rp/memory.x diff --git a/keyboards/corne/crates/corne-rp/src/keymap.rs b/keyboards/examples/corne-rp/src/keymap.rs similarity index 100% rename from keyboards/corne/crates/corne-rp/src/keymap.rs rename to keyboards/examples/corne-rp/src/keymap.rs diff --git a/keyboards/corne/crates/corne-rp/src/main.rs b/keyboards/examples/corne-rp/src/main.rs similarity index 100% rename from keyboards/corne/crates/corne-rp/src/main.rs rename to keyboards/examples/corne-rp/src/main.rs diff --git a/keyboards/keyball61/crates/keyball61-nrf/.cargo/config.toml b/keyboards/examples/keyball61-nrf/.cargo/config.toml similarity index 100% rename from keyboards/keyball61/crates/keyball61-nrf/.cargo/config.toml rename to keyboards/examples/keyball61-nrf/.cargo/config.toml diff --git a/keyboards/keyball61/crates/keyball61-nrf/Cargo.toml b/keyboards/examples/keyball61-nrf/Cargo.toml similarity index 100% rename from keyboards/keyball61/crates/keyball61-nrf/Cargo.toml rename to keyboards/examples/keyball61-nrf/Cargo.toml diff --git a/keyboards/keyball61/crates/keyball61-nrf/build.rs b/keyboards/examples/keyball61-nrf/build.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-nrf/build.rs rename to keyboards/examples/keyball61-nrf/build.rs diff --git a/keyboards/keyball61/crates/keyball61-nrf/memory.x b/keyboards/examples/keyball61-nrf/memory.x similarity index 100% rename from keyboards/keyball61/crates/keyball61-nrf/memory.x rename to keyboards/examples/keyball61-nrf/memory.x diff --git a/keyboards/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs b/keyboards/examples/keyball61-nrf/src/main.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs rename to keyboards/examples/keyball61-nrf/src/main.rs diff --git a/keyboards/dummy/crates/dummy-rp/.cargo/config.toml b/keyboards/examples/keyball61-rp/.cargo/config.toml similarity index 100% rename from keyboards/dummy/crates/dummy-rp/.cargo/config.toml rename to keyboards/examples/keyball61-rp/.cargo/config.toml diff --git a/keyboards/keyball61/crates/keyball61-rp/Cargo.toml b/keyboards/examples/keyball61-rp/Cargo.toml similarity index 100% rename from keyboards/keyball61/crates/keyball61-rp/Cargo.toml rename to keyboards/examples/keyball61-rp/Cargo.toml diff --git a/keyboards/keyball61/crates/keyball61-rp/build.rs b/keyboards/examples/keyball61-rp/build.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-rp/build.rs rename to keyboards/examples/keyball61-rp/build.rs diff --git a/keyboards/keyball61/crates/keyball61-rp/memory.x b/keyboards/examples/keyball61-rp/memory.x similarity index 100% rename from keyboards/keyball61/crates/keyball61-rp/memory.x rename to keyboards/examples/keyball61-rp/memory.x diff --git a/keyboards/keyball61/crates/keyball61-rp/src/bin/keyball61.rs b/keyboards/examples/keyball61-rp/src/main.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-rp/src/bin/keyball61.rs rename to keyboards/examples/keyball61-rp/src/main.rs diff --git a/keyboards/neg/crates/neg-nrf/.cargo/config.toml b/keyboards/examples/neg-nrf/.cargo/config.toml similarity index 100% rename from keyboards/neg/crates/neg-nrf/.cargo/config.toml rename to keyboards/examples/neg-nrf/.cargo/config.toml diff --git a/keyboards/neg/crates/neg-nrf/Cargo.toml b/keyboards/examples/neg-nrf/Cargo.toml similarity index 100% rename from keyboards/neg/crates/neg-nrf/Cargo.toml rename to keyboards/examples/neg-nrf/Cargo.toml diff --git a/keyboards/neg/crates/neg-nrf/build.rs b/keyboards/examples/neg-nrf/build.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/build.rs rename to keyboards/examples/neg-nrf/build.rs diff --git a/keyboards/neg/crates/neg-nrf/memory.x b/keyboards/examples/neg-nrf/memory.x similarity index 100% rename from keyboards/neg/crates/neg-nrf/memory.x rename to keyboards/examples/neg-nrf/memory.x diff --git a/keyboards/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs b/keyboards/examples/neg-nrf/src/bin/neg_nrf_master.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs rename to keyboards/examples/neg-nrf/src/bin/neg_nrf_master.rs diff --git a/keyboards/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs b/keyboards/examples/neg-nrf/src/bin/neg_nrf_slave.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs rename to keyboards/examples/neg-nrf/src/bin/neg_nrf_slave.rs diff --git a/keyboards/ksps/corne-nrf/Cargo.toml b/keyboards/ksps/corne-nrf/Cargo.toml new file mode 100644 index 00000000..2d3ed657 --- /dev/null +++ b/keyboards/ksps/corne-nrf/Cargo.toml @@ -0,0 +1,52 @@ +# You can remove this line and `forced-target` property and use `.cargo/config.toml` if your crate isn't in workspace. +cargo-features = ["per-package-target"] + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[package] +name = "rktk-ksp-corne-nrf" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true +publish = false +forced-target = "thumbv7em-none-eabihf" + +[dependencies] +rktk = { workspace = true } +rktk-drivers-nrf = { workspace = true, features = ["softdevice-ble"] } +rktk-drivers-common = { workspace = true } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } + +embassy-nrf = { workspace = true, features = [ + "gpiote", + "time-driver-rtc1", + "nrf52840", + "nfc-pins-as-gpio", +] } +nrf-softdevice = { workspace = true, features = [ + "critical-section-impl", + "s140", + "nrf52840", +] } + +[features] +default = ["right"] + +right = [] +left = [] + +# Remove this line in your project. It's just used in this workspace for check. +_check = [] diff --git a/keyboards/ksps/corne-nrf/src/lib.rs b/keyboards/ksps/corne-nrf/src/lib.rs new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/ksps/corne-rp/Cargo.toml b/keyboards/ksps/corne-rp/Cargo.toml new file mode 100644 index 00000000..aca4a3c6 --- /dev/null +++ b/keyboards/ksps/corne-rp/Cargo.toml @@ -0,0 +1,47 @@ +# You can remove this line and `forced-target` property and use `.cargo/config.toml` if your crate isn't in workspace. +cargo-features = ["per-package-target"] + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[package] +name = "rktk-ksp-corne-rp" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true +publish = false +forced-target = "thumbv6m-none-eabi" + +[dependencies] +rktk = { workspace = true } +rktk-drivers-rp = { workspace = true } +rktk-drivers-common = { workspace = true } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +embassy-rp = { workspace = true, features = [ + "time-driver", + "critical-section-impl", + "rp2040", +] } +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } + +portable-atomic = { workspace = true, features = ["unsafe-assume-single-core"] } + +[features] +default = ["right"] + +right = [] +left = [] + +_check = [] +# Remove this line in your project. It's just used in this workspace for check. diff --git a/keyboards/ksps/corne-rp/src/lib.rs b/keyboards/ksps/corne-rp/src/lib.rs new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/ksps/keyball61-common/Cargo.toml b/keyboards/ksps/keyball61-common/Cargo.toml new file mode 100644 index 00000000..01db7691 --- /dev/null +++ b/keyboards/ksps/keyball61-common/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "rktk-ksp-keyball61-common" +version.workspace = true +license.workspace = true +edition.workspace = true +authors.workspace = true +repository.workspace = true + +[dependencies] +rktk = { workspace = true } +rktk-drivers-common = { workspace = true } + +[features] +_check = [] diff --git a/keyboards/keyball61/crates/keyball61-common/src/lib.rs b/keyboards/ksps/keyball61-common/src/lib.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-common/src/lib.rs rename to keyboards/ksps/keyball61-common/src/lib.rs diff --git a/keyboards/ksps/keyball61-nrf/Cargo.toml b/keyboards/ksps/keyball61-nrf/Cargo.toml new file mode 100644 index 00000000..0141b916 --- /dev/null +++ b/keyboards/ksps/keyball61-nrf/Cargo.toml @@ -0,0 +1,58 @@ +cargo-features = ["per-package-target"] + +[package] +name = "rktk-ksp-keyball61-nrf" +version.workspace = true +license.workspace = true +edition.workspace = true +authors.workspace = true +repository.workspace = true +forced-target = "thumbv7em-none-eabihf" + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[dependencies] +keyball61-common = { path = "../keyball61-common/" } + +rktk = { workspace = true } +rktk-drivers-nrf = { workspace = true } +rktk-drivers-common = { workspace = true } + +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } +embassy-sync = { workspace = true } +embassy-time = { workspace = true } +embassy-embedded-hal = { workspace = true } + +embassy-nrf = { workspace = true, features = [ + "gpiote", + "time-driver-rtc1", + "nrf52840", + "nfc-pins-as-gpio", + "unstable-pac", +] } +nrf-softdevice = { workspace = true, features = [ + "ble-peripheral", + "ble-central", + "critical-section-impl", + "s140", + "nrf52840", +] } +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } + +once_cell = { workspace = true, features = ["critical-section"] } + +[features] +_check = [] + +usb = ["rktk-drivers-nrf/softdevice"] +ble = ["rktk-drivers-nrf/softdevice-ble"] +default = ["ble", "usb"] diff --git a/keyboards/keyball61/crates/keyball61-nrf/src/lib.rs b/keyboards/ksps/keyball61-nrf/src/lib.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-nrf/src/lib.rs rename to keyboards/ksps/keyball61-nrf/src/lib.rs diff --git a/keyboards/ksps/keyball61-rp/Cargo.toml b/keyboards/ksps/keyball61-rp/Cargo.toml new file mode 100644 index 00000000..2d7d5422 --- /dev/null +++ b/keyboards/ksps/keyball61-rp/Cargo.toml @@ -0,0 +1,57 @@ +[package] +name = "rktk-ksp-keyball61-rp" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[dependencies] +keyball61-common = { path = "../keyball61-common/" } + +rktk = { workspace = true, features = ["rrp"] } +rktk-drivers-rp = { workspace = true } +rktk-drivers-common = { workspace = true } + +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } +embassy-sync = { workspace = true } +embassy-time = { workspace = true } +embassy-embedded-hal = { workspace = true } + +embassy-rp = { workspace = true, features = [ + "time-driver", + "critical-section-impl", + "rp2040", +] } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } + +portable-atomic = { version = "1.6.0", features = [ + "unsafe-assume-single-core", +] } + +defmt = { workspace = true, optional = true } + +[features] +_check = [] + +default = ["defmt"] + +defmt = [ + "dep:defmt", + "rktk/defmt", + "rktk-drivers-common/defmt-usb", + "rktk-drivers-common/defmt-timestamp", + "rktk-drivers-rp/defmt", +] diff --git a/keyboards/keyball61/crates/keyball61-rp/src/lib.rs b/keyboards/ksps/keyball61-rp/src/lib.rs similarity index 100% rename from keyboards/keyball61/crates/keyball61-rp/src/lib.rs rename to keyboards/ksps/keyball61-rp/src/lib.rs diff --git a/keyboards/ksps/neg-nrf/Cargo.toml b/keyboards/ksps/neg-nrf/Cargo.toml new file mode 100644 index 00000000..5e53e54b --- /dev/null +++ b/keyboards/ksps/neg-nrf/Cargo.toml @@ -0,0 +1,102 @@ +cargo-features = ["per-package-target"] + +[package] +name = "rktk-ksp-neg-nrf" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true + +forced-target = "thumbv7em-none-eabihf" + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[dependencies] +rktk-drivers-nrf = { workspace = true } +rktk-drivers-common = { workspace = true } +rktk = { workspace = true } +rktk-log = { workspace = true } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +embassy-embedded-hal = { workspace = true } +embassy-time = { workspace = true } +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } +embassy-nrf = { workspace = true, features = [ + "gpiote", + "time-driver-rtc1", + "nrf52840", + "nfc-pins-as-gpio", +] } +embassy-sync = { workspace = true } + +once_cell = { version = "1.19.0", default-features = false, features = [ + "atomic-polyfill", +] } +static_cell = { workspace = true } +cfg-if = "1.0.0" + +log = { workspace = true, optional = true } +defmt = { workspace = true, optional = true } + +# alloc +embedded-alloc = { version = "0.6.0", optional = true } + +# sd +nrf-softdevice = { workspace = true, features = [ + "critical-section-impl", + "s140", + "nrf52840", +], optional = true } + +# trouble +rand_chacha = { version = "0.3", default-features = false, optional = true } +nrf-sdc = { workspace = true, optional = true, features = ["nrf52840"] } + +[features] +_check = ["trouble", "sd", "log", "left", "pmw3360"] + +default = ["rrp"] + +alloc = ["dep:embedded-alloc", "rktk/alloc"] +right = [] +left = [] + +rrp = ["rktk/rrp"] + +defmt = [ + "dep:defmt", + "rktk/defmt", + "rktk-log/defmt", + "rktk-drivers-common/defmt-usb", + "rktk-drivers-common/defmt-timestamp", + "rktk-drivers-nrf/defmt", +] +log = [ + "dep:log", + "rktk/log", + "rktk-log/log", + "rktk-drivers-common/log", + "rktk-drivers-nrf/log", +] + +sd = ["rktk-drivers-nrf/softdevice-ble", "dep:nrf-softdevice"] +trouble = [ + "dep:rand_chacha", + "dep:nrf-sdc", + "rktk-drivers-nrf/sdc", + "rktk-drivers-common/reporter-trouble", +] +cs-impl = ["cortex-m/critical-section-single-core"] + +paw3395 = [] +pmw3360 = [] diff --git a/keyboards/neg/crates/neg-nrf/src/common.rs b/keyboards/ksps/neg-nrf/src/common.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/common.rs rename to keyboards/ksps/neg-nrf/src/common.rs diff --git a/keyboards/neg/crates/neg-nrf/src/drivers.rs b/keyboards/ksps/neg-nrf/src/drivers.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/drivers.rs rename to keyboards/ksps/neg-nrf/src/drivers.rs diff --git a/keyboards/neg/crates/neg-nrf/src/lib.rs b/keyboards/ksps/neg-nrf/src/lib.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/lib.rs rename to keyboards/ksps/neg-nrf/src/lib.rs diff --git a/keyboards/neg/crates/neg-nrf/src/master.rs b/keyboards/ksps/neg-nrf/src/master.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/master.rs rename to keyboards/ksps/neg-nrf/src/master.rs diff --git a/keyboards/neg/crates/neg-nrf/src/misc.rs b/keyboards/ksps/neg-nrf/src/misc.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/misc.rs rename to keyboards/ksps/neg-nrf/src/misc.rs diff --git a/keyboards/neg/crates/neg-nrf/src/slave.rs b/keyboards/ksps/neg-nrf/src/slave.rs similarity index 100% rename from keyboards/neg/crates/neg-nrf/src/slave.rs rename to keyboards/ksps/neg-nrf/src/slave.rs diff --git a/keyboards/.cargo/config.toml b/keyboards_old/.cargo/config.toml similarity index 100% rename from keyboards/.cargo/config.toml rename to keyboards_old/.cargo/config.toml diff --git a/keyboards/corne/.cargo/config.toml b/keyboards_old/corne/.cargo/config.toml similarity index 100% rename from keyboards/corne/.cargo/config.toml rename to keyboards_old/corne/.cargo/config.toml diff --git a/keyboards_old/corne/crates/corne-nrf/.cargo/config.toml b/keyboards_old/corne/crates/corne-nrf/.cargo/config.toml new file mode 100644 index 00000000..5d10902a --- /dev/null +++ b/keyboards_old/corne/crates/corne-nrf/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "thumbv7em-none-eabihf" diff --git a/keyboards_old/corne/crates/corne-nrf/Cargo.toml b/keyboards_old/corne/crates/corne-nrf/Cargo.toml new file mode 100644 index 00000000..30e1f687 --- /dev/null +++ b/keyboards_old/corne/crates/corne-nrf/Cargo.toml @@ -0,0 +1,53 @@ +# You can remove this line and `forced-target` property and use `.cargo/config.toml` if your crate isn't in workspace. +cargo-features = ["per-package-target"] + +[[bin]] +name = "corne-nrf" +path = "src/main.rs" +test = false +doctest = false +bench = false + +[package] +name = "corne-nrf" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true +publish = false +forced-target = "thumbv7em-none-eabihf" + +[dependencies] +rktk = { workspace = true } +rktk-drivers-nrf = { workspace = true, features = ["softdevice-ble"] } +rktk-drivers-common = { workspace = true } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } + +embassy-nrf = { workspace = true, features = [ + "gpiote", + "time-driver-rtc1", + "nrf52840", + "nfc-pins-as-gpio", +] } +nrf-softdevice = { workspace = true, features = [ + "critical-section-impl", + "s140", + "nrf52840", +] } + +[features] +default = ["right"] + +right = [] +left = [] + +# Remove this line in your project. It's just used in this workspace for check. +_check = [] diff --git a/keyboards_old/corne/crates/corne-nrf/build.rs b/keyboards_old/corne/crates/corne-nrf/build.rs new file mode 100644 index 00000000..1bb8d428 --- /dev/null +++ b/keyboards_old/corne/crates/corne-nrf/build.rs @@ -0,0 +1,18 @@ +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + println!("cargo:rerun-if-changed=memory.x"); + + println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); +} diff --git a/keyboards_old/corne/crates/corne-nrf/memory.x b/keyboards_old/corne/crates/corne-nrf/memory.x new file mode 100644 index 00000000..b2946677 --- /dev/null +++ b/keyboards_old/corne/crates/corne-nrf/memory.x @@ -0,0 +1,7 @@ +MEMORY +{ + /* for softdevice v6 */ + FLASH : ORIGIN = 0x00026000, LENGTH = 828K + /* RAM MAX: 256K (0x40000) */ + RAM : ORIGIN = 0x20008000, LENGTH = 200K +} diff --git a/keyboards_old/corne/crates/corne-nrf/src/keymap.rs b/keyboards_old/corne/crates/corne-nrf/src/keymap.rs new file mode 100644 index 00000000..3738b880 --- /dev/null +++ b/keyboards_old/corne/crates/corne-nrf/src/keymap.rs @@ -0,0 +1,89 @@ +use rktk::config::keymap::{ + keymanager::{keycode::prelude::*, keymap::TapDanceDefinition}, + Keymap, Layer, LayerKeymap, +}; + +const L2SPC: KeyAction = KeyAction::TapHold( + KeyCode::Key(Key::Enter), + KeyCode::Layer(LayerOp::Momentary(2)), +); + +#[rustfmt::skip] +const L0: LayerKeymap = [ + [ TAB , Q , W , E , R , T , /**/ Y , U , I , O , P , MINUS], + [ ESC , A , S , D , F , G , /**/ H , J , K , L , SCLN , QUOTE], + [ L_SHFT, Z , X , C , V , B , /**/ N , M , COMM , DOT , SLASH, BSLSH], + [ L_CTRL, L_GUI , TG(2) , L_ALT , L2SPC , SPACE , /**/ BS , ENTER , _____ , _____ ,R_SHFT,R_CTRL], +]; + +#[rustfmt::skip] +/// Auto mouse layer +const L1: LayerKeymap = [ + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,_____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], +]; + +#[rustfmt::skip] +/// Mouse layer +const L2: LayerKeymap = [ + [ _____ , _____ , INSERT, HOME , PGUP , _____ , /**/ LEFT , DOWN , UP , RIGHT , _____ , F12 ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , VOLUP ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,VOLDN ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ DELETE, _____ , _____ , _____ , PRTSC , _____ ], +]; + +#[rustfmt::skip] +const L3: LayerKeymap = [ + [ _____ , _____ , KP7 , KP8 , KP9 , _____ , /**/ SF(D1), SF(D2), SF(D3), SF(D4), SF(D5), _____ ], + [ _____ , _____ , KP4 , KP5 , KP6 , _____ , /**/ SF(D6), SF(D7), SF(D8), SF(D9), SF(D0), _____ ], + [ _____ , _____ , KP1 , KP2 , KP3 , _____ , /**/ QUOTE,SF(QUOTE),EQUAL,SF(EQUAL), _____, _____ ], + [ _____ , _____ , KP0 , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], +]; + +#[rustfmt::skip] +const L4: LayerKeymap = [ + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], +]; + +pub const KEYMAP: Keymap = Keymap { + layers: [ + Layer { + keymap: L0, + ..Layer::const_default() + }, + Layer { + keymap: L1, + ..Layer::const_default() + }, + Layer { + keymap: L2, + ..Layer::const_default() + }, + Layer { + keymap: L3, + ..Layer::const_default() + }, + Layer { + keymap: L4, + ..Layer::const_default() + }, + ], + tap_dance: [ + Some(TapDanceDefinition { + tap: [ + Some(KeyCode::Key(Key::RightBracket)), + Some(KeyCode::Layer(LayerOp::Toggle(2))), + None, + None, + ], + hold: [None, None, None, None], + }), + None, + ], + ..Keymap::const_default() +}; diff --git a/keyboards_old/corne/crates/corne-nrf/src/main.rs b/keyboards_old/corne/crates/corne-nrf/src/main.rs new file mode 100644 index 00000000..b4e90e42 --- /dev/null +++ b/keyboards_old/corne/crates/corne-nrf/src/main.rs @@ -0,0 +1,118 @@ +#![no_std] +#![no_main] + +mod keymap; + +use core::panic::PanicInfo; + +use embassy_executor::Spawner; +use embassy_nrf::{ + bind_interrupts, + gpio::{Input, Level, Output, OutputDrive, Pull}, + usb::vbus_detect::SoftwareVbusDetect, +}; +use rktk::{ + config::Hand, + config::{CONST_CONFIG, new_rktk_opts}, + drivers::{Drivers, dummy}, + hooks::empty_hooks::create_empty_hooks, + singleton, +}; + +use rktk_drivers_common::{ + keyscan::matrix::Matrix, + usb::{CommonUsbDriverConfig, CommonUsbReporterBuilder, UsbDriverConfig}, +}; +use rktk_drivers_nrf::system::NrfSystemDriver; + +bind_interrupts!(pub struct Irqs { + USBD => embassy_nrf::usb::InterruptHandler; +}); + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = embassy_nrf::init(Default::default()); + + // Output pins are arranged from left to right + #[cfg(feature = "left")] + let outputs = [ + Output::new(p.P1_11, Level::Low, OutputDrive::Standard), // COL5 + Output::new(p.P1_13, Level::Low, OutputDrive::Standard), // COL4 + Output::new(p.P1_15, Level::Low, OutputDrive::Standard), // COL3 + Output::new(p.P0_02, Level::Low, OutputDrive::Standard), // COL2 + Output::new(p.P0_29, Level::Low, OutputDrive::Standard), // COL1 + Output::new(p.P0_31, Level::Low, OutputDrive::Standard), // COL0 + ]; + + #[cfg(feature = "right")] + let outputs = [ + Output::new(p.P0_31, Level::Low, OutputDrive::Standard), // COL0 + Output::new(p.P0_29, Level::Low, OutputDrive::Standard), // COL1 + Output::new(p.P0_02, Level::Low, OutputDrive::Standard), // COL2 + Output::new(p.P1_15, Level::Low, OutputDrive::Standard), // COL3 + Output::new(p.P1_13, Level::Low, OutputDrive::Standard), // COL4 + Output::new(p.P1_11, Level::Low, OutputDrive::Standard), // COL5 + ]; + + let drivers = Drivers { + keyscan: Matrix::< + _, + _, + _, + 6, + 4, + { CONST_CONFIG.keyboard.rows as usize }, + { CONST_CONFIG.keyboard.cols as usize }, + >::new( + outputs, + [ + Input::new(p.P0_22, Pull::Down), // ROW0 + Input::new(p.P0_24, Pull::Down), // ROW1 + Input::new(p.P1_00, Pull::Down), // ROW2 + Input::new(p.P0_11, Pull::Down), // ROW3 + ], + |row, col| Some((row, col)), + None, + ), + system: NrfSystemDriver::new(None), + mouse: dummy::mouse(), + usb_builder: Some({ + let vbus = &*singleton!(SoftwareVbusDetect::new(true, true), SoftwareVbusDetect); + let embassy_driver = embassy_nrf::usb::Driver::new(p.USBD, Irqs, vbus); + let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); + driver_config.product = Some("corne"); + let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); + + CommonUsbReporterBuilder::new(opts) + }), + display: dummy::display(), + split: dummy::split(), + rgb: dummy::rgb(), + ble_builder: dummy::ble_builder(), + storage: dummy::storage(), + debounce: dummy::debounce(), + encoder: dummy::encoder(), + }; + + rktk::task::start( + spawner, + drivers, + create_empty_hooks(), + new_rktk_opts(&keymap::KEYMAP, { + #[cfg(feature = "left")] + { + Some(Hand::Left) + } + #[cfg(feature = "right")] + { + Some(Hand::Right) + } + }), + ) + .await; +} + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} +} diff --git a/keyboards/keyball61/crates/keyball61-rp/.cargo/config.toml b/keyboards_old/corne/crates/corne-rp/.cargo/config.toml similarity index 100% rename from keyboards/keyball61/crates/keyball61-rp/.cargo/config.toml rename to keyboards_old/corne/crates/corne-rp/.cargo/config.toml diff --git a/keyboards_old/corne/crates/corne-rp/Cargo.toml b/keyboards_old/corne/crates/corne-rp/Cargo.toml new file mode 100644 index 00000000..5db33e9d --- /dev/null +++ b/keyboards_old/corne/crates/corne-rp/Cargo.toml @@ -0,0 +1,48 @@ +# You can remove this line and `forced-target` property and use `.cargo/config.toml` if your crate isn't in workspace. +cargo-features = ["per-package-target"] + +[[bin]] +name = "corne-rp" +path = "src/main.rs" +test = false +doctest = false +bench = false + +[package] +name = "corne-rp" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true +publish = false +forced-target = "thumbv6m-none-eabi" + +[dependencies] +rktk = { workspace = true } +rktk-drivers-rp = { workspace = true } +rktk-drivers-common = { workspace = true } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +embassy-rp = { workspace = true, features = [ + "time-driver", + "critical-section-impl", + "rp2040", +] } +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } + +portable-atomic = { workspace = true, features = ["unsafe-assume-single-core"] } + +[features] +default = ["right"] + +right = [] +left = [] + +_check = [] +# Remove this line in your project. It's just used in this workspace for check. diff --git a/keyboards_old/corne/crates/corne-rp/README.md b/keyboards_old/corne/crates/corne-rp/README.md new file mode 100644 index 00000000..30347437 --- /dev/null +++ b/keyboards_old/corne/crates/corne-rp/README.md @@ -0,0 +1,27 @@ +# corne v3 example + +RKTK firmware example for corne v3 with ProMicro RP2040. To make example simple, +only keyboard feature is enabled (OLED, RGB is disabled). + +Actually, I don't have a corne keyboard, so please report any issues you +encounter. + +## Building + +1. Clone this repository and move here + ```bash + git clone https://github.com/nazo6/rktk + cd rktk/examples/corne + ``` + +2. Install `uf2deploy` + ```bash + cargo install uf2deploy + ``` + +3. Build and deploy the firmware + ```bash + # By running cargo run, uf2deploy will be executed automatically. uf2deploy converts elf to uf2 and copies uf2 to attached device. + # Use feature `left` or `right` to build firmware for left or right half. + cargo run --release --features left + ``` diff --git a/keyboards_old/corne/crates/corne-rp/build.rs b/keyboards_old/corne/crates/corne-rp/build.rs new file mode 100644 index 00000000..4f450d4f --- /dev/null +++ b/keyboards_old/corne/crates/corne-rp/build.rs @@ -0,0 +1,19 @@ +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + println!("cargo:rerun-if-changed=memory.x"); + + println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); + println!("cargo:rustc-link-arg-bins=-Tlink-rp.x"); +} diff --git a/keyboards_old/corne/crates/corne-rp/memory.x b/keyboards_old/corne/crates/corne-rp/memory.x new file mode 100644 index 00000000..ef19dffe --- /dev/null +++ b/keyboards_old/corne/crates/corne-rp/memory.x @@ -0,0 +1,17 @@ +MEMORY { + BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 + FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 + + /* Pick one of the two options for RAM layout */ + + /* OPTION A: Use all RAM banks as one big block */ + /* Reasonable, unless you are doing something */ + /* really particular with DMA or other concurrent */ + /* access that would benefit from striping */ + RAM : ORIGIN = 0x20000000, LENGTH = 264K + + /* OPTION B: Keep the unstriped sections separate */ + /* RAM: ORIGIN = 0x20000000, LENGTH = 256K */ + /* SCRATCH_A: ORIGIN = 0x20040000, LENGTH = 4K */ + /* SCRATCH_B: ORIGIN = 0x20041000, LENGTH = 4K */ +} diff --git a/keyboards_old/corne/crates/corne-rp/src/keymap.rs b/keyboards_old/corne/crates/corne-rp/src/keymap.rs new file mode 100644 index 00000000..3738b880 --- /dev/null +++ b/keyboards_old/corne/crates/corne-rp/src/keymap.rs @@ -0,0 +1,89 @@ +use rktk::config::keymap::{ + keymanager::{keycode::prelude::*, keymap::TapDanceDefinition}, + Keymap, Layer, LayerKeymap, +}; + +const L2SPC: KeyAction = KeyAction::TapHold( + KeyCode::Key(Key::Enter), + KeyCode::Layer(LayerOp::Momentary(2)), +); + +#[rustfmt::skip] +const L0: LayerKeymap = [ + [ TAB , Q , W , E , R , T , /**/ Y , U , I , O , P , MINUS], + [ ESC , A , S , D , F , G , /**/ H , J , K , L , SCLN , QUOTE], + [ L_SHFT, Z , X , C , V , B , /**/ N , M , COMM , DOT , SLASH, BSLSH], + [ L_CTRL, L_GUI , TG(2) , L_ALT , L2SPC , SPACE , /**/ BS , ENTER , _____ , _____ ,R_SHFT,R_CTRL], +]; + +#[rustfmt::skip] +/// Auto mouse layer +const L1: LayerKeymap = [ + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,_____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], +]; + +#[rustfmt::skip] +/// Mouse layer +const L2: LayerKeymap = [ + [ _____ , _____ , INSERT, HOME , PGUP , _____ , /**/ LEFT , DOWN , UP , RIGHT , _____ , F12 ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , VOLUP ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,VOLDN ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ DELETE, _____ , _____ , _____ , PRTSC , _____ ], +]; + +#[rustfmt::skip] +const L3: LayerKeymap = [ + [ _____ , _____ , KP7 , KP8 , KP9 , _____ , /**/ SF(D1), SF(D2), SF(D3), SF(D4), SF(D5), _____ ], + [ _____ , _____ , KP4 , KP5 , KP6 , _____ , /**/ SF(D6), SF(D7), SF(D8), SF(D9), SF(D0), _____ ], + [ _____ , _____ , KP1 , KP2 , KP3 , _____ , /**/ QUOTE,SF(QUOTE),EQUAL,SF(EQUAL), _____, _____ ], + [ _____ , _____ , KP0 , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], +]; + +#[rustfmt::skip] +const L4: LayerKeymap = [ + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], + [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], +]; + +pub const KEYMAP: Keymap = Keymap { + layers: [ + Layer { + keymap: L0, + ..Layer::const_default() + }, + Layer { + keymap: L1, + ..Layer::const_default() + }, + Layer { + keymap: L2, + ..Layer::const_default() + }, + Layer { + keymap: L3, + ..Layer::const_default() + }, + Layer { + keymap: L4, + ..Layer::const_default() + }, + ], + tap_dance: [ + Some(TapDanceDefinition { + tap: [ + Some(KeyCode::Key(Key::RightBracket)), + Some(KeyCode::Layer(LayerOp::Toggle(2))), + None, + None, + ], + hold: [None, None, None, None], + }), + None, + ], + ..Keymap::const_default() +}; diff --git a/keyboards_old/corne/crates/corne-rp/src/main.rs b/keyboards_old/corne/crates/corne-rp/src/main.rs new file mode 100644 index 00000000..4a562dba --- /dev/null +++ b/keyboards_old/corne/crates/corne-rp/src/main.rs @@ -0,0 +1,115 @@ +#![no_std] +#![no_main] + +mod keymap; + +use core::panic::PanicInfo; + +use embassy_executor::Spawner; +use embassy_rp::{ + bind_interrupts, + gpio::{Input, Level, Output, Pull}, +}; +use rktk::{ + config::Hand, + config::{CONST_CONFIG, new_rktk_opts}, + drivers::{Drivers, dummy}, + hooks::empty_hooks::create_empty_hooks, +}; + +use rktk_drivers_common::{ + keyscan::matrix::Matrix, + usb::{CommonUsbDriverConfig, CommonUsbReporterBuilder, UsbDriverConfig}, +}; +use rktk_drivers_rp::system::RpSystemDriver; + +bind_interrupts!(pub struct Irqs { + USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; +}); + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = embassy_rp::init(Default::default()); + + // Output pins are arranged from left to right + #[cfg(feature = "left")] + let outputs = [ + Output::new(p.PIN_15, Level::Low), // COL5 + Output::new(p.PIN_16, Level::Low), // COL4 + Output::new(p.PIN_17, Level::Low), // COL3 + Output::new(p.PIN_18, Level::Low), // COL2 + Output::new(p.PIN_19, Level::Low), // COL1 + Output::new(p.PIN_20, Level::Low), // COL0 + ]; + + #[cfg(feature = "right")] + let outputs = [ + Output::new(p.PIN_20, Level::Low), // COL0 + Output::new(p.PIN_19, Level::Low), // COL1 + Output::new(p.PIN_18, Level::Low), // COL2 + Output::new(p.PIN_17, Level::Low), // COL3 + Output::new(p.PIN_16, Level::Low), // COL4 + Output::new(p.PIN_15, Level::Low), // COL5 + ]; + + let drivers = Drivers { + keyscan: Matrix::< + _, + _, + _, + 6, + 4, + { CONST_CONFIG.keyboard.rows as usize }, + { CONST_CONFIG.keyboard.cols as usize }, + >::new( + outputs, + [ + Input::new(p.PIN_7, Pull::Down), // ROW0 + Input::new(p.PIN_8, Pull::Down), // ROW1 + Input::new(p.PIN_9, Pull::Down), // ROW2 + Input::new(p.PIN_10, Pull::Down), // ROW3 + ], + |row, col| Some((row, col)), + None, + ), + system: RpSystemDriver, + mouse: dummy::mouse(), + usb_builder: Some({ + let embassy_driver = embassy_rp::usb::Driver::new(p.USB, Irqs); + let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); + driver_config.product = Some("corne"); + let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); + + CommonUsbReporterBuilder::new(opts) + }), + display: dummy::display(), + split: dummy::split(), + rgb: dummy::rgb(), + ble_builder: dummy::ble_builder(), + storage: dummy::storage(), + debounce: dummy::debounce(), + encoder: dummy::encoder(), + }; + + rktk::task::start( + spawner, + drivers, + create_empty_hooks(), + new_rktk_opts(&keymap::KEYMAP, { + #[cfg(feature = "left")] + { + Some(Hand::Left) + } + #[cfg(feature = "right")] + { + Some(Hand::Right) + } + }), + ) + .await; +} + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} +} diff --git a/keyboards_old/corne/rktk.json b/keyboards_old/corne/rktk.json new file mode 100644 index 00000000..c505cb28 --- /dev/null +++ b/keyboards_old/corne/rktk.json @@ -0,0 +1,14 @@ +{ + "$schema": "../../crates/rktk/schema.json", + "constant": { + "keyboard": { + "cols": 12, + "rows": 4 + } + }, + "dynamic": { + "keyboard": { + "name": "corne" + } + } +} diff --git a/keyboards/dummy/.cargo/config.toml b/keyboards_old/dummy/.cargo/config.toml similarity index 100% rename from keyboards/dummy/.cargo/config.toml rename to keyboards_old/dummy/.cargo/config.toml diff --git a/keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml b/keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml new file mode 100644 index 00000000..b10f29d0 --- /dev/null +++ b/keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "thumbv6m-none-eabi" diff --git a/keyboards/dummy/crates/dummy-rp/Cargo.toml b/keyboards_old/dummy/crates/dummy-rp/Cargo.toml similarity index 100% rename from keyboards/dummy/crates/dummy-rp/Cargo.toml rename to keyboards_old/dummy/crates/dummy-rp/Cargo.toml diff --git a/keyboards/dummy/crates/dummy-rp/src/keymap.rs b/keyboards_old/dummy/crates/dummy-rp/src/keymap.rs similarity index 100% rename from keyboards/dummy/crates/dummy-rp/src/keymap.rs rename to keyboards_old/dummy/crates/dummy-rp/src/keymap.rs diff --git a/keyboards/dummy/crates/dummy-rp/src/main.rs b/keyboards_old/dummy/crates/dummy-rp/src/main.rs similarity index 100% rename from keyboards/dummy/crates/dummy-rp/src/main.rs rename to keyboards_old/dummy/crates/dummy-rp/src/main.rs diff --git a/keyboards/keyball61/.cargo/config.toml b/keyboards_old/keyball61/.cargo/config.toml similarity index 100% rename from keyboards/keyball61/.cargo/config.toml rename to keyboards_old/keyball61/.cargo/config.toml diff --git a/keyboards/keyball61/crates/keyball61-common/Cargo.toml b/keyboards_old/keyball61/crates/keyball61-common/Cargo.toml similarity index 100% rename from keyboards/keyball61/crates/keyball61-common/Cargo.toml rename to keyboards_old/keyball61/crates/keyball61-common/Cargo.toml diff --git a/keyboards_old/keyball61/crates/keyball61-common/src/lib.rs b/keyboards_old/keyball61/crates/keyball61-common/src/lib.rs new file mode 100644 index 00000000..5b281d2f --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-common/src/lib.rs @@ -0,0 +1,146 @@ +#![no_std] + +use rktk::{ + config::{Hand, RktkOpts, keymap::Keymap}, + task::display::default_display::DefaultDisplayConfig, +}; +use rktk_drivers_common::{keyscan::duplex_matrix::ScanDir, mouse::paw3395, usb::UsbDriverConfig}; + +pub const PAW3395_CONFIG: paw3395::config::Config = paw3395::config::Config { + mode: paw3395::config::HP_MODE, + lift_cutoff: paw3395::config::LiftCutoff::_2mm, +}; + +pub const USB_CONFIG: UsbDriverConfig = { + let mut config = UsbDriverConfig::new(0xc0de, 0xcafe); + + config.manufacturer = Some("Yowkees/nazo6"); + config.product = Some("keyball"); + config.serial_number = Some("12345678"); + config.max_power = 100; + config.max_packet_size_0 = 64; + config.supports_remote_wakeup = true; + + config +}; + +// メモ: Keyballのキースキャン配線 +// +// 左 右 +// +// 論理 0 1 2 3 4 5 6 0 1 2 3 4 5 6 +// 物理 +// [C2R] [ R2C ] [ R2C ] [C2R] +// COL→ 0 1 2 0 1 2 3 COL→ 3 2 1 0 2 1 0 +// ROW↓ ROW↓ +// 0 0 +// 1 1 +// 2 2 +// 3 3 +// 4 4 +pub fn translate_key_position( + hand: Hand, +) -> impl Fn(ScanDir, usize, usize) -> Option<(usize, usize)> { + move |dir: ScanDir, row: usize, col: usize| match (hand, dir) { + (Hand::Left, ScanDir::Col2Row) => { + if col > 2 { + None + } else { + Some((row, col)) + } + } + (Hand::Left, ScanDir::Row2Col) => Some((row, col + 3)), + (Hand::Right, ScanDir::Row2Col) => Some((row, 3 - col)), + (Hand::Right, ScanDir::Col2Row) => { + if col > 2 { + None + } else { + Some((row, 6 - col)) + } + } + } +} + +pub fn get_opts_right( + keymap: &'static Keymap, +) -> RktkOpts { + RktkOpts { + keymap, + hand: Some(Hand::Right), + config: &rktk::config::DYNAMIC_CONFIG_FROM_FILE, + display: DefaultDisplayConfig, + rgb_layout: layout::LayoutRight, + } +} +pub fn get_opts_left( + keymap: &'static Keymap, +) -> RktkOpts { + RktkOpts { + keymap, + hand: Some(Hand::Left), + config: &rktk::config::DYNAMIC_CONFIG_FROM_FILE, + display: DefaultDisplayConfig, + rgb_layout: layout::LayoutLeft, + } +} + +mod layout { + use rktk::config::rgb::{layout::*, layout2d}; + + // Right half RGB layout: + // h +.1 +.2 +.3 +.4 +.5 +.6 +.7 +.8 + // v------------------------------------- + // +1.0 | 4 8 12 16 20 25 + // +0.5 | 5 9 13 17 21 26 + // 0.0 | 6 10 14 18 22 27 + // -0.5 | 2 7 11 15 19 23 28 + // -1.0 | 1 3 24 29 + layout2d!( + pub LayoutRight, + [ + Shape2d::Point(Vec2::new(0.1, -1.0)), + Shape2d::Point(Vec2::new(0.2, -0.5)), + Shape2d::Point(Vec2::new(0.2, -1.0)), + Shape2d::Grid { + start: Vec2::new(0.3, 1.0), + vertical_end: Vec2::new(0.6, 1.0), + horizontal_end: Vec2::new(0.3, -0.5), + horizontal_pixel_count: 4, + vertical_pixel_count: 4, + serpentine: true, + }, + Shape2d::Grid { + start: Vec2::new(0.7, 1.0), + vertical_end: Vec2::new(0.8, 1.0), + horizontal_end: Vec2::new(0.7,-1.0), + horizontal_pixel_count: 5, + vertical_pixel_count: 2, + serpentine: true, + } + ] + ); + + // Left half RGB layout: + // h -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1 + // v------------------------------------- + // +1.0 | 33 28 23 18 13 8 3 + // +0.5 | 34 29 24 19 14 9 4 + // 0.0 | 35 30 25 20 15 10 5 + // -0.5 | 36 31 26 21 16 11 6 1 + // -1.0 | 37 32 27 22 17 12 7 2 + layout2d!( + pub LayoutLeft, + [ + Shape2d::Point(Vec2::new(-0.1, -0.5)), + Shape2d::Point(Vec2::new(-0.1, -1.0)), + Shape2d::Grid { + start: Vec2::new(-0.2, 1.0), + vertical_end: Vec2::new(-0.8, 1.0), + horizontal_end: Vec2::new(-0.2, -1.0), + horizontal_pixel_count: 7, + vertical_pixel_count: 5, + serpentine: true, + }, + ] + ); +} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml b/keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml new file mode 100644 index 00000000..5d10902a --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "thumbv7em-none-eabihf" diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml b/keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml new file mode 100644 index 00000000..a5f5aa9c --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml @@ -0,0 +1,64 @@ +cargo-features = ["per-package-target"] + +[package] +name = "keyball61-nrf" +version.workspace = true +license.workspace = true +edition.workspace = true +authors.workspace = true +repository.workspace = true +forced-target = "thumbv7em-none-eabihf" + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[[bin]] +name = "keyball61" +test = false +doctest = false +bench = false + +[dependencies] +keyball61-common = { path = "../keyball61-common/" } + +rktk = { workspace = true } +rktk-drivers-nrf = { workspace = true } +rktk-drivers-common = { workspace = true } + +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } +embassy-sync = { workspace = true } +embassy-time = { workspace = true } +embassy-embedded-hal = { workspace = true } + +embassy-nrf = { workspace = true, features = [ + "gpiote", + "time-driver-rtc1", + "nrf52840", + "nfc-pins-as-gpio", + "unstable-pac", +] } +nrf-softdevice = { workspace = true, features = [ + "ble-peripheral", + "ble-central", + "critical-section-impl", + "s140", + "nrf52840", +] } +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } + +once_cell = { workspace = true, features = ["critical-section"] } + +[features] +_check = [] + +usb = ["rktk-drivers-nrf/softdevice"] +ble = ["rktk-drivers-nrf/softdevice-ble"] +default = ["ble", "usb"] diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/build.rs b/keyboards_old/keyball61/crates/keyball61-nrf/build.rs new file mode 100644 index 00000000..cd1a264c --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-nrf/build.rs @@ -0,0 +1,34 @@ +//! This build script copies the `memory.x` file from the crate root into +//! a directory where the linker can always find it at build time. +//! For many projects this is optional, as the linker always searches the +//! project root directory -- wherever `Cargo.toml` is. However, if you +//! are using a workspace or have a more complicated build setup, this +//! build script becomes required. Additionally, by requesting that +//! Cargo re-run the build script whenever `memory.x` is changed, +//! updating `memory.x` ensures a rebuild of the application with the +//! new memory settings. + +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + // Put `memory.x` in our output directory and ensure it's + // on the linker search path. + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + // By default, Cargo will re-run a build script whenever + // any file in the project changes. By specifying `memory.x` + // here, we ensure the build script is only re-run when + // `memory.x` is changed. + println!("cargo:rerun-if-changed=memory.x"); + + println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); +} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/memory.x b/keyboards_old/keyball61/crates/keyball61-nrf/memory.x new file mode 100644 index 00000000..b2946677 --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-nrf/memory.x @@ -0,0 +1,7 @@ +MEMORY +{ + /* for softdevice v6 */ + FLASH : ORIGIN = 0x00026000, LENGTH = 828K + /* RAM MAX: 256K (0x40000) */ + RAM : ORIGIN = 0x20008000, LENGTH = 200K +} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs b/keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs new file mode 100644 index 00000000..a6592c6b --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs @@ -0,0 +1,14 @@ +#![no_std] +#![no_main] +#![feature(impl_trait_in_assoc_type)] + +use embassy_executor::Spawner; +use keyball61_nrf::start; +use rktk::config::keymap::Keymap; + +static KM: Keymap = Keymap::const_default(); + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + start(spawner, &KM).await; +} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs b/keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs new file mode 100644 index 00000000..d35a23bd --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs @@ -0,0 +1,235 @@ +#![no_std] + +use core::panic::PanicInfo; + +use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; +use embassy_nrf::{ + bind_interrupts, + gpio::{Input, Level, Output, OutputDrive, Pull}, + interrupt::{self, InterruptExt, Priority}, + spim::Spim, + twim::Twim, +}; +use embassy_sync::{blocking_mutex::raw::NoopRawMutex, mutex::Mutex}; +use keyball61_common::*; + +use rktk::{ + config::keymap::Keymap, + drivers::{Drivers, dummy}, + hooks::create_empty_hooks, +}; +use rktk_drivers_common::{ + debounce::EagerDebounceDriver, + display::ssd1306::{self, Ssd1306Driver, prelude::DisplaySize128x32}, + keyscan::{detect_hand_from_matrix, duplex_matrix::DuplexMatrixScanner}, + mouse::pmw3360::Pmw3360, + panic_utils, +}; +use rktk_drivers_nrf::{ + keyscan::flex_pin::NrfFlexPin, rgb::ws2812_pwm::Ws2812Pwm, + split::uart_half_duplex::UartHalfDuplexSplitDriver, system::NrfSystemDriver, +}; + +use nrf_softdevice as _; + +#[cfg(feature = "ble")] +mod ble { + pub use rktk_drivers_nrf::softdevice::ble::SoftdeviceBleReporterBuilder; + pub use rktk_drivers_nrf::softdevice::ble::init_ble_server; +} + +#[cfg(feature = "usb")] +mod usb { + pub use embassy_nrf::usb::vbus_detect::SoftwareVbusDetect; + pub use once_cell::sync::OnceCell; + pub use rktk_drivers_common::usb::*; +} + +#[cfg(feature = "usb")] +static SOFTWARE_VBUS: usb::OnceCell = usb::OnceCell::new(); + +bind_interrupts!(pub struct Irqs { + USBD => embassy_nrf::usb::InterruptHandler; + SPI2 => embassy_nrf::spim::InterruptHandler; + TWISPI0 => embassy_nrf::twim::InterruptHandler; + UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; +}); + +pub async fn start(spawner: embassy_executor::Spawner, keymap: &'static Keymap) { + let mut config = embassy_nrf::config::Config::default(); + config.gpiote_interrupt_priority = Priority::P2; + config.time_interrupt_priority = Priority::P2; + let mut p = embassy_nrf::init(config); + + interrupt::USBD.set_priority(Priority::P2); + interrupt::SPI2.set_priority(Priority::P2); + interrupt::TWISPI0.set_priority(Priority::P2); + interrupt::UARTE0.set_priority(Priority::P2); + + let mut display = Ssd1306Driver::new( + Twim::new( + p.TWISPI0, + Irqs, + p.P0_17, + p.P0_20, + rktk_drivers_nrf::display::ssd1306::recommended_i2c_config(), + &mut [], + ), + DisplaySize128x32, + ssd1306::prelude::DisplayRotation::Rotate90, + ); + + panic_utils::display_message_if_panicked(&mut display).await; + + let spi = Mutex::::new(Spim::new( + p.SPI2, + Irqs, + p.P1_13, + p.P1_11, + p.P0_10, + rktk_drivers_nrf::mouse::pmw3360::recommended_spi_config(), + )); + let ball_spi_device = SpiDevice::new( + &spi, + Output::new( + p.P0_06, + embassy_nrf::gpio::Level::High, + embassy_nrf::gpio::OutputDrive::Standard, + ), + ); + let ball = Pmw3360::new(ball_spi_device); + + let hand = detect_hand_from_matrix( + Output::new(p.P1_00.reborrow(), Level::Low, OutputDrive::Standard), + Input::new(p.P1_15.reborrow(), Pull::Down), + None, + None, + ) + .await + .unwrap(); + let keyscan = DuplexMatrixScanner::<_, _, 5, 4, 5, 7>::new( + [ + NrfFlexPin::new(p.P0_22), // ROW0 + NrfFlexPin::new(p.P0_24), // ROW1 + NrfFlexPin::new(p.P1_00), // ROW2 + NrfFlexPin::new(p.P0_11), // ROW3 + NrfFlexPin::new(p.P1_04), // ROW4 + ], + [ + NrfFlexPin::new(p.P0_31), // COL0 + NrfFlexPin::new(p.P0_29), // COL1 + NrfFlexPin::new(p.P0_02), // COL2 + NrfFlexPin::new(p.P1_15), // COL3 + ], + None, + translate_key_position(hand), + ); + + let split = UartHalfDuplexSplitDriver::new( + p.P0_08, + p.UARTE0, + Irqs, + p.TIMER1, + p.PPI_CH0, + p.PPI_CH1, + p.PPI_GROUP0, + ); + + let rgb = Ws2812Pwm::<1024, _, _>::new(p.PWM0, p.P0_09); + + #[cfg(feature = "ble")] + let sd = rktk_drivers_nrf::softdevice::init_softdevice("keyball61"); + #[cfg(feature = "ble")] + let server = { + let server = ble::init_ble_server( + sd, + rktk_drivers_nrf::softdevice::ble::DeviceInformation { + manufacturer_name: Some("nazo6"), + model_number: Some("100"), + serial_number: Some("100"), + ..Default::default() + }, + ); + rktk_drivers_nrf::softdevice::start_softdevice(spawner, sd); + embassy_time::Timer::after_millis(50).await; + server + }; + #[cfg(feature = "ble")] + let (flash, cache) = rktk_drivers_nrf::softdevice::flash::get_flash(sd); + #[cfg(feature = "ble")] + let (storage, ble_builder) = ( + Some(rktk_drivers_nrf::softdevice::flash::create_storage_driver( + flash, &cache, + )), + Some(ble::SoftdeviceBleReporterBuilder::new( + spawner, + sd, + server, + "keyball61", + flash, + )), + ); + + #[cfg(not(feature = "ble"))] + let (ble_builder, storage) = (dummy::ble_builder(), dummy::storage()); + + let drivers = Drivers { + keyscan, + system: NrfSystemDriver::new(None), + mouse: Some(ball), + usb_builder: { + #[cfg(feature = "usb")] + let usb = { + let vbus = SOFTWARE_VBUS.get_or_init(|| usb::SoftwareVbusDetect::new(true, true)); + let embassy_driver = embassy_nrf::usb::Driver::new(p.USBD, Irqs, vbus); + let mut driver_config = usb::UsbDriverConfig::new(0xc0de, 0xcafe); + driver_config.product = Some("Keyball61"); + let opts = usb::CommonUsbDriverConfig::new(embassy_driver, driver_config); + Some(usb::CommonUsbReporterBuilder::new(opts)) + }; + + #[cfg(not(feature = "usb"))] + let usb = dummy::usb_builder(); + + usb + }, + display: Some(display), + split: Some(split), + rgb: Some(rgb), + storage, + ble_builder, + debounce: Some(EagerDebounceDriver::new( + embassy_time::Duration::from_millis(20), + true, + )), + encoder: dummy::encoder(), + }; + + match hand { + rktk::config::Hand::Left => { + rktk::task::start( + spawner, + drivers, + create_empty_hooks(), + get_opts_left(keymap), + ) + .await; + } + rktk::config::Hand::Right => { + rktk::task::start( + spawner, + drivers, + create_empty_hooks(), + get_opts_right(keymap), + ) + .await; + } + } +} + +#[panic_handler] +fn panic(info: &PanicInfo) -> ! { + cortex_m::interrupt::disable(); + panic_utils::save_panic_info(info); + cortex_m::peripheral::SCB::sys_reset() +} diff --git a/keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml b/keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml new file mode 100644 index 00000000..b10f29d0 --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "thumbv6m-none-eabi" diff --git a/keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml b/keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml new file mode 100644 index 00000000..d958ed7d --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml @@ -0,0 +1,63 @@ +[package] +name = "keyball61-rp" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[[bin]] +name = "keyball61" +test = false +doctest = false +bench = false + +[dependencies] +keyball61-common = { path = "../keyball61-common/" } + +rktk = { workspace = true, features = ["rrp"] } +rktk-drivers-rp = { workspace = true } +rktk-drivers-common = { workspace = true } + +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } +embassy-sync = { workspace = true } +embassy-time = { workspace = true } +embassy-embedded-hal = { workspace = true } + +embassy-rp = { workspace = true, features = [ + "time-driver", + "critical-section-impl", + "rp2040", +] } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } + +portable-atomic = { version = "1.6.0", features = [ + "unsafe-assume-single-core", +] } + +defmt = { workspace = true, optional = true } + +[features] +_check = [] + +default = ["defmt"] + +defmt = [ + "dep:defmt", + "rktk/defmt", + "rktk-drivers-common/defmt-usb", + "rktk-drivers-common/defmt-timestamp", + "rktk-drivers-rp/defmt", +] diff --git a/keyboards_old/keyball61/crates/keyball61-rp/build.rs b/keyboards_old/keyball61/crates/keyball61-rp/build.rs new file mode 100644 index 00000000..b9382972 --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-rp/build.rs @@ -0,0 +1,40 @@ +//! This build script copies the `memory.x` file from the crate root into +//! a directory where the linker can always find it at build time. +//! For many projects this is optional, as the linker always searches the +//! project root directory -- wherever `Cargo.toml` is. However, if you +//! are using a workspace or have a more complicated build setup, this +//! build script becomes required. Additionally, by requesting that +//! Cargo re-run the build script whenever `memory.x` is changed, +//! updating `memory.x` ensures a rebuild of the application with the +//! new memory settings. + +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + // Put `memory.x` in our output directory and ensure it's + // on the linker search path. + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + // By default, Cargo will re-run a build script whenever + // any file in the project changes. By specifying `memory.x` + // here, we ensure the build script is only re-run when + // `memory.x` is changed. + println!("cargo:rerun-if-changed=memory.x"); + + println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); + println!("cargo:rustc-link-arg-bins=-Tlink-rp.x"); + + println!("cargo:rerun-if-env-changed=CARGO_FEATURE_DEFMT"); + if std::env::var("CARGO_FEATURE_DEFMT").is_ok() { + println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); + } +} diff --git a/keyboards_old/keyball61/crates/keyball61-rp/memory.x b/keyboards_old/keyball61/crates/keyball61-rp/memory.x new file mode 100644 index 00000000..1e9d0bdd --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-rp/memory.x @@ -0,0 +1,18 @@ +MEMORY { + BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 + FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 + + /* Pick one of the two options for RAM layout */ + + /* OPTION A: Use all RAM banks as one big block */ + /* Reasonable, unless you are doing something */ + /* really particular with DMA or other concurrent */ + /* access that would benefit from striping */ + RAM : ORIGIN = 0x20000000, LENGTH = 256K + + /* OPTION B: Keep the unstriped sections separate */ + /* RAM: ORIGIN = 0x20000000, LENGTH = 256K */ + /* SCRATCH_A: ORIGIN = 0x20040000, LENGTH = 4K */ + /* SCRATCH_B: ORIGIN = 0x20041000, LENGTH = 4K */ +} + diff --git a/keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs b/keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs new file mode 100644 index 00000000..35c07ad4 --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs @@ -0,0 +1,14 @@ +#![no_std] +#![no_main] +#![feature(impl_trait_in_assoc_type)] + +use embassy_executor::Spawner; +use keyball61_rp::start; +use rktk::config::keymap::Keymap; + +static KM: Keymap = Keymap::const_default(); + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + start(spawner, &KM).await; +} diff --git a/keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs b/keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs new file mode 100644 index 00000000..10355503 --- /dev/null +++ b/keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs @@ -0,0 +1,155 @@ +#![no_std] + +use core::panic::PanicInfo; + +use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; +use embassy_rp::{ + bind_interrupts, + gpio::{Input, Level, Output}, + i2c::I2c, + peripherals::{I2C1, PIO0, PIO1, USB}, + pio::Pio, +}; + +use embassy_sync::{blocking_mutex::raw::NoopRawMutex, mutex::Mutex}; +use rktk::{ + config::keymap::Keymap, + drivers::{Drivers, dummy}, + hooks::create_empty_hooks, +}; +use rktk_drivers_common::{ + display::ssd1306::{self, Ssd1306Driver}, + keyscan::{detect_hand_from_matrix, duplex_matrix::DuplexMatrixScanner}, + mouse::pmw3360::Pmw3360, + panic_utils, + usb::*, +}; +use rktk_drivers_rp::{ + keyscan::flex_pin::RpFlexPin, mouse::pmw3360, rgb::ws2812_pio::Ws2812Pio, + split::pio_half_duplex::PioHalfDuplexSplitDriver, +}; + +use keyball61_common::*; + +bind_interrupts!(pub struct Irqs { + USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; + I2C1_IRQ => embassy_rp::i2c::InterruptHandler; + PIO0_IRQ_0 => embassy_rp::pio::InterruptHandler; + PIO1_IRQ_0 => embassy_rp::pio::InterruptHandler; +}); + +pub async fn start(spawner: embassy_executor::Spawner, keymap: &'static Keymap) { + let mut cfg = embassy_rp::config::Config::default(); + cfg.clocks.sys_clk.div_int = 2; + let mut p = embassy_rp::init(cfg); + + let mut display = Ssd1306Driver::new( + I2c::new_async( + p.I2C1, + p.PIN_3, + p.PIN_2, + Irqs, + rktk_drivers_rp::display::ssd1306::recommended_i2c_config(), + ), + ssd1306::prelude::DisplaySize128x32, + ssd1306::prelude::DisplayRotation::Rotate90, + ); + + panic_utils::display_message_if_panicked(&mut display).await; + + let spi = Mutex::::new(embassy_rp::spi::Spi::new( + p.SPI0, + p.PIN_22, + p.PIN_23, + p.PIN_20, + p.DMA_CH0, + p.DMA_CH1, + pmw3360::recommended_spi_config(), + )); + let ball_spi = SpiDevice::new(&spi, Output::new(p.PIN_21, embassy_rp::gpio::Level::High)); + let ball = Pmw3360::new(ball_spi); + + let hand = detect_hand_from_matrix( + Output::new(p.PIN_6.reborrow(), Level::Low), + Input::new(p.PIN_26.reborrow(), embassy_rp::gpio::Pull::Down), + None, + None, + ) + .await + .unwrap(); + let keyscan = DuplexMatrixScanner::<_, _, 5, 4, 5, 7>::new( + [ + RpFlexPin::new(p.PIN_4), + RpFlexPin::new(p.PIN_5), + RpFlexPin::new(p.PIN_6), + RpFlexPin::new(p.PIN_7), + RpFlexPin::new(p.PIN_8), + ], + [ + RpFlexPin::new(p.PIN_29), + RpFlexPin::new(p.PIN_28), + RpFlexPin::new(p.PIN_27), + RpFlexPin::new(p.PIN_26), + ], + Some(rktk_drivers_common::keyscan::duplex_matrix::OutputWait::Pin), + translate_key_position(hand), + ); + + let usb = { + let embassy_driver = embassy_rp::usb::Driver::new(p.USB, Irqs); + let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); + driver_config.product = Some("Keyball61"); + let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); + Some(CommonUsbReporterBuilder::new(opts)) + }; + + let pio = Pio::new(p.PIO0, Irqs); + let split = PioHalfDuplexSplitDriver::new(pio, p.PIN_1); + + let pio = Pio::new(p.PIO1, Irqs); + let rgb = Ws2812Pio::<'_, 30, _>::new(pio, p.PIN_0, p.DMA_CH2); + + rktk_drivers_rp::init_storage!(storage, p.FLASH, p.DMA_CH3, { 4 * 1024 * 1024 }); + + let drivers = Drivers { + keyscan, + system: rktk_drivers_rp::system::RpSystemDriver, + mouse: Some(ball), + usb_builder: usb, + display: Some(display), + split: Some(split), + rgb: Some(rgb), + ble_builder: dummy::ble_builder(), + storage: Some(storage), + debounce: dummy::debounce(), + encoder: dummy::encoder(), + }; + + match hand { + rktk::config::Hand::Left => { + rktk::task::start( + spawner, + drivers, + create_empty_hooks(), + get_opts_left(keymap), + ) + .await; + } + rktk::config::Hand::Right => { + rktk::task::start( + spawner, + drivers, + create_empty_hooks(), + get_opts_right(keymap), + ) + .await; + } + } +} + +#[panic_handler] +fn panic(info: &PanicInfo) -> ! { + cortex_m::interrupt::disable(); + panic_utils::save_panic_info(info); + cortex_m::peripheral::SCB::sys_reset() +} diff --git a/keyboards_old/keyball61/rktk.json b/keyboards_old/keyball61/rktk.json new file mode 100644 index 00000000..fb0691f7 --- /dev/null +++ b/keyboards_old/keyball61/rktk.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://raw.githubusercontent.com/nazo6/rktk/refs/heads/master/crates/rktk/schema.json", + "constant": { + "keyboard": { + "cols": 14, + "rows": 5 + } + }, + "dynamic": { + "rktk": { + "scan_interval_keyboard": 10, + "scan_interval_mouse": 5, + "split_usb_timeout": 1000, + "double_tap_threshold": 500, + "swap_mouse_x_y": true + }, + "keyboard": { + "name": "keyball61", + "layout": { + "keymap": [ + [{ "x": 3 }, "0,3", { "x": 8.5 }, "0,10"], + [{ "y": -0.875, "x": 4 }, "0,4", { "x": 6.5 }, "0,9"], + [{ "y": -0.875, "x": 2 }, "0,2", { "x": 2 }, "0,5", { "x": 4.5 }, "0,8", { "x": 2 }, "0,11"], + [{ "y": -0.65, "c": "#aaaaaa" }, "0,0", { "c": "#cccccc" }, "0,1", { "x": 12.5 }, "0,12", { "c": "#aaaaaa" }, "0,13"], + [{ "y": -0.6, "x": 3, "c": "#cccccc" }, "1,3", { "x": 8.5 }, "1,10"], + [{ "y": -0.875, "x": 4 }, "1,4", { "x": 6.5 }, "1,9"], + [{ "y": -0.875, "x": 2 }, "1,2", { "x": 2 }, "1,5", { "x": 4.5 }, "1,8", { "x": 2 }, "1,11"], + [{ "y": -0.65, "c": "#aaaaaa" }, "1,0", { "c": "#cccccc" }, "1,1", { "x": 12.5 }, "1,12", { "c": "#aaaaaa" }, "1,13"], + [{ "y": -0.6, "x": 3, "c": "#cccccc" }, "2,3", { "x": 8.5 }, "2,10"], + [{ "y": -0.875, "x": 4 }, "2,4", { "x": 6.5 }, "2,9"], + [{ "y": -0.875, "x": 2 }, "2,2", { "x": 2 }, "2,5", { "x": 4.5 }, "2,8", { "x": 2 }, "2,11"], + [{ "y": -0.65, "c": "#aaaaaa" }, "2,0", { "c": "#cccccc" }, "2,1", { "x": 12.5 }, "2,12", { "c": "#aaaaaa" }, "2,13"], + [{ "y": -0.6, "x": 3, "c": "#cccccc" }, "3,3", { "x": 8.5 }, "3,10"], + [{ "y": -0.875, "x": 4 }, "3,4", { "x": 6.5 }, "3,9"], + [{ "y": -0.875, "x": 2 }, "3,2", { "x": 2 }, "3,5", { "x": 4.5 }, "3,8", { "x": 2 }, "3,11"], + [{ "y": -0.85, "x": 6, "c": "#aaaaaa" }, "3,6", { "x": 2.5 }, "3,7"], + [{ "y": -0.8 }, "3,0", { "c": "#cccccc" }, "3,1", { "x": 12.5 }, "3,12", { "c": "#aaaaaa" }, "3,13"], + [{ "y": -0.6, "x": 3 }, "4,3\n\n\n0,0", { "x": 8.5 }, "4,10\n\n\n0,1"], + [{ "y": -0.75, "x": 13.5 }, "4,11\n\n\n0,1"], + [{ "y": -1, "x": 2 }, "4,2\n\n\n0,0"], + [{ "y": -0.75, "x": 4.3 }, "4,4\n\n\n0,0", { "x": 5.9 }, "4,9\n\n\n0,1"], + [{ "y": -0.9 }, "4,0", "4,1", { "x": 12.5 }, "4,12", "4,13"], + [{ "r": 10, "rx": 5.35, "ry": 5.5, "y": -1 }, "4,5"], + [{ "r": 20, "rx": 6.4, "ry": 5.7, "y": -0.99, "x": -0.03 }, "4,6"], + [{ "r": -20, "rx": 10.15, "y": -1, "x": -1.02 }, "4,7"], + [{ "r": -10, "rx": 11.15, "ry": 5.5, "y": -0.98, "x": -1 }, "4,8"] + ] + } + } + } +} diff --git a/keyboards/neg/.cargo/config.toml b/keyboards_old/neg/.cargo/config.toml similarity index 100% rename from keyboards/neg/.cargo/config.toml rename to keyboards_old/neg/.cargo/config.toml diff --git a/keyboards_old/neg/crates/neg-nrf/.cargo/config.toml b/keyboards_old/neg/crates/neg-nrf/.cargo/config.toml new file mode 100644 index 00000000..5d10902a --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "thumbv7em-none-eabihf" diff --git a/keyboards_old/neg/crates/neg-nrf/Cargo.toml b/keyboards_old/neg/crates/neg-nrf/Cargo.toml new file mode 100644 index 00000000..126de950 --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/Cargo.toml @@ -0,0 +1,114 @@ +cargo-features = ["per-package-target"] + +[package] +name = "neg-nrf" +authors.workspace = true +license.workspace = true +version.workspace = true +edition.workspace = true +repository.workspace = true + +forced-target = "thumbv7em-none-eabihf" + +[lib] +path = "src/lib.rs" +test = false +doctest = false +bench = false + +[[bin]] +name = "neg_nrf_master" +test = false +doctest = false +bench = false + +[[bin]] +name = "neg_nrf_slave" +test = false +doctest = false +bench = false + +[dependencies] +rktk-drivers-nrf = { workspace = true } +rktk-drivers-common = { workspace = true } +rktk = { workspace = true } +rktk-log = { workspace = true } + +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +embassy-embedded-hal = { workspace = true } +embassy-time = { workspace = true } +embassy-executor = { workspace = true, features = [ + "arch-cortex-m", + "executor-thread", + "executor-interrupt", +] } +embassy-nrf = { workspace = true, features = [ + "gpiote", + "time-driver-rtc1", + "nrf52840", + "nfc-pins-as-gpio", +] } +embassy-sync = { workspace = true } + +once_cell = { version = "1.19.0", default-features = false, features = [ + "atomic-polyfill", +] } +static_cell = { workspace = true } +cfg-if = "1.0.0" + +log = { workspace = true, optional = true } +defmt = { workspace = true, optional = true } + +# alloc +embedded-alloc = { version = "0.6.0", optional = true } + +# sd +nrf-softdevice = { workspace = true, features = [ + "critical-section-impl", + "s140", + "nrf52840", +], optional = true } + +# trouble +rand_chacha = { version = "0.3", default-features = false, optional = true } +nrf-sdc = { workspace = true, optional = true, features = ["nrf52840"] } + +[features] +_check = ["trouble", "sd", "log", "left", "pmw3360"] + +default = ["rrp"] + +alloc = ["dep:embedded-alloc", "rktk/alloc"] +right = [] +left = [] + +rrp = ["rktk/rrp"] + +defmt = [ + "dep:defmt", + "rktk/defmt", + "rktk-log/defmt", + "rktk-drivers-common/defmt-usb", + "rktk-drivers-common/defmt-timestamp", + "rktk-drivers-nrf/defmt", +] +log = [ + "dep:log", + "rktk/log", + "rktk-log/log", + "rktk-drivers-common/log", + "rktk-drivers-nrf/log", +] + +sd = ["rktk-drivers-nrf/softdevice-ble", "dep:nrf-softdevice"] +trouble = [ + "dep:rand_chacha", + "dep:nrf-sdc", + "rktk-drivers-nrf/sdc", + "rktk-drivers-common/reporter-trouble", +] +cs-impl = ["cortex-m/critical-section-single-core"] + +paw3395 = [] +pmw3360 = [] diff --git a/keyboards_old/neg/crates/neg-nrf/build.rs b/keyboards_old/neg/crates/neg-nrf/build.rs new file mode 100644 index 00000000..b1d410ae --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/build.rs @@ -0,0 +1,39 @@ +//! This build script copies the `memory.x` file from the crate root into +//! a directory where the linker can always find it at build time. +//! For many projects this is optional, as the linker always searches the +//! project root directory -- wherever `Cargo.toml` is. However, if you +//! are using a workspace or have a more complicated build setup, this +//! build script becomes required. Additionally, by requesting that +//! Cargo re-run the build script whenever `memory.x` is changed, +//! updating `memory.x` ensures a rebuild of the application with the +//! new memory settings. + +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + // Put `memory.x` in our output directory and ensure it's + // on the linker search path. + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + // By default, Cargo will re-run a build script whenever + // any file in the project changes. By specifying `memory.x` + // here, we ensure the build script is only re-run when + // `memory.x` is changed. + println!("cargo:rerun-if-changed=memory.x"); + + println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); + + println!("cargo:rerun-if-env-changed=CARGO_FEATURE_DEFMT"); + if std::env::var("CARGO_FEATURE_DEFMT").is_ok() { + println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); + } +} diff --git a/keyboards_old/neg/crates/neg-nrf/memory.x b/keyboards_old/neg/crates/neg-nrf/memory.x new file mode 100644 index 00000000..51ce864b --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/memory.x @@ -0,0 +1,7 @@ +MEMORY +{ + /* for softdevice v6 */ + FLASH : ORIGIN = 0x00026000, LENGTH = 828K + /* RAM MAX: 256K (0x40000) */ + RAM : ORIGIN = 0x20008000, LENGTH = 0x38000 +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs b/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs new file mode 100644 index 00000000..498d4526 --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs @@ -0,0 +1,17 @@ +#![no_std] +#![no_main] +#![feature(impl_trait_in_assoc_type)] + +use embassy_executor::Spawner; +use neg_nrf::{init_peri, start_master}; +use rktk::{config::keymap::Keymap, hooks::create_empty_hooks}; + +// Empty keymap for demo. +// Please replace with your own keymap configuration. +static KM: Keymap = Keymap::const_default(); + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = init_peri(); + start_master(spawner, p, create_empty_hooks(), &KM).await; +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs b/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs new file mode 100644 index 00000000..45e7a7ae --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs @@ -0,0 +1,13 @@ +#![no_std] +#![no_main] +#![feature(impl_trait_in_assoc_type)] + +use embassy_executor::Spawner; +use neg_nrf::{init_peri, start_slave}; +use rktk::hooks::create_empty_hooks; + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = init_peri(); + start_slave(spawner, p, create_empty_hooks()).await; +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/common.rs b/keyboards_old/neg/crates/neg-nrf/src/common.rs new file mode 100644 index 00000000..7df0ebb0 --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/common.rs @@ -0,0 +1,72 @@ +pub fn init_peri() -> Peripherals { + let p = { + let config = { + let mut config = embassy_nrf::config::Config::default(); + #[cfg(feature = "sd")] + { + use embassy_nrf::interrupt::Priority; + config.gpiote_interrupt_priority = Priority::P2; + config.time_interrupt_priority = Priority::P2; + } + config.lfclk_source = embassy_nrf::config::LfclkSource::ExternalXtal; + config.hfclk_source = embassy_nrf::config::HfclkSource::ExternalXtal; + + config + }; + embassy_nrf::init(config) + }; + + #[cfg(feature = "sd")] + { + use embassy_nrf::interrupt::{self, *}; + interrupt::USBD.set_priority(Priority::P2); + interrupt::SPI2.set_priority(Priority::P2); + interrupt::SPIM3.set_priority(Priority::P2); + interrupt::UARTE0.set_priority(Priority::P2); + } + + #[cfg(feature = "alloc")] + { + use core::mem::MaybeUninit; + const HEAP_SIZE: usize = 32768; + static mut HEAP_MEM: [MaybeUninit; HEAP_SIZE] = [MaybeUninit::uninit(); HEAP_SIZE]; + unsafe { crate::HEAP.init(&raw mut HEAP_MEM as usize, HEAP_SIZE) } + } + + p +} + +use embassy_nrf::Peripherals; +#[cfg(feature = "sd")] +pub(crate) use sd::init_sd; +#[cfg(feature = "sd")] +mod sd { + use rktk_drivers_nrf::softdevice::ble::SoftdeviceBleReporterBuilder; + use rktk_drivers_nrf::softdevice::flash::SharedFlash; + use rktk_drivers_nrf::softdevice::{ble::init_ble_server, flash::get_flash, init_softdevice}; + + pub async fn init_sd( + spawner: embassy_executor::Spawner, + ) -> (SoftdeviceBleReporterBuilder, &'static SharedFlash) { + let sd = init_softdevice("negL"); + + let server = init_ble_server( + sd, + rktk_drivers_nrf::softdevice::ble::DeviceInformation { + manufacturer_name: Some("nazo6"), + model_number: Some("100"), + serial_number: Some("100"), + ..Default::default() + }, + ); + let (flash, _cache) = get_flash(sd); + + rktk_drivers_nrf::softdevice::start_softdevice(spawner, sd); + embassy_time::Timer::after_millis(200).await; + + ( + SoftdeviceBleReporterBuilder::new(spawner, sd, server, "negL", flash), + flash, + ) + } +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/drivers.rs b/keyboards_old/neg/crates/neg-nrf/src/drivers.rs new file mode 100644 index 00000000..4c7328e2 --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/drivers.rs @@ -0,0 +1,173 @@ +#[macro_export] +macro_rules! create_spi { + ($p:ident) => {{ + use embassy_nrf::gpio::OutputDrive; + use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex; + use embassy_sync::mutex::Mutex; + use rktk_drivers_nrf::mouse::paw3395; + + let mut spi_config = paw3395::recommended_spi_config(); + spi_config.sck_drive = OutputDrive::Standard; + spi_config.mosi_drive = OutputDrive::Standard; + spi_config.frequency = embassy_nrf::spim::Frequency::K250; + + Mutex::::new(embassy_nrf::spim::Spim::new( + $p.SPI2, Irqs, $p.P0_17, $p.P0_22, $p.P0_20, spi_config, + )) + }}; +} + +#[macro_export] +macro_rules! driver_split { + ($p:ident) => {{ + use embassy_nrf::buffered_uarte::BufferedUarte; + use rktk::singleton; + use rktk_drivers_nrf::split::uart_full_duplex::UartFullDuplexSplitDriver; + + let uarte_config = embassy_nrf::uarte::Config::default(); + + let (sp1, sp2) = ($p.P0_08, $p.P0_06); + + UartFullDuplexSplitDriver::new(BufferedUarte::new( + $p.UARTE0, + $p.TIMER1, + $p.PPI_CH0, + $p.PPI_CH1, + $p.PPI_GROUP0, + sp1, + sp2, + Irqs, + uarte_config, + singleton!([0; 256], [u8; 256]), + singleton!([0; 256], [u8; 256]), + )) + }}; +} + +#[macro_export] +macro_rules! driver_display { + ($p:ident) => {{ + use embassy_nrf::twim::Twim; + use rktk_drivers_common::display::ssd1306; + use rktk_drivers_common::display::ssd1306::Ssd1306Driver; + use rktk_drivers_common::panic_utils; + + let mut display = Ssd1306Driver::new( + Twim::new( + $p.TWISPI0, + Irqs, + $p.P1_00, + $p.P0_11, + rktk_drivers_nrf::display::ssd1306::recommended_i2c_config(), + &mut [], + ), + ssd1306::prelude::DisplaySize128x32, + ssd1306::prelude::DisplayRotation::Rotate90, + ); + panic_utils::display_message_if_panicked(&mut display).await; + display + }}; +} + +#[macro_export] +macro_rules! driver_mouse { + ($p:ident, $spi:ident) => {{ + use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; + use embassy_nrf::gpio::{Output, OutputDrive}; + #[cfg(feature = "paw3395")] + use rktk_drivers_common::mouse::paw3395::Paw3395; + #[cfg(feature = "pmw3360")] + use rktk_drivers_common::mouse::pmw3360::Pmw3360; + + let ball_cs = Output::new( + $p.P1_06, + embassy_nrf::gpio::Level::High, + OutputDrive::Standard, + ); + let ball_spi_device = SpiDevice::new(&$spi, ball_cs); + + #[cfg(feature = "paw3395")] + { + Paw3395::new(ball_spi_device, misc::PAW3395_CONFIG) + } + #[cfg(feature = "pmw3360")] + { + Pmw3360::new(ball_spi_device) + } + }}; +} + +#[macro_export] +macro_rules! driver_keyscan { + ($p:ident, $spi:ident) => {{ + use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; + use embassy_nrf::gpio::{Input, Output, OutputDrive, Pull}; + use rktk_drivers_common::keyscan::shift_register_matrix::ShiftRegisterMatrix; + + let shift_register_cs = Output::new( + $p.P1_04, + embassy_nrf::gpio::Level::High, + OutputDrive::Standard, + ); + let shift_register_spi_device = SpiDevice::new(&$spi, shift_register_cs); + + ShiftRegisterMatrix::<_, _, _, 8, 5, 5, 8>::new( + shift_register_spi_device, + [ + Input::new($p.P1_15, Pull::Down), // ROW0 + Input::new($p.P1_13, Pull::Down), // ROW1 + Input::new($p.P1_11, Pull::Down), // ROW2 + Input::new($p.P0_10, Pull::Down), // ROW3 + Input::new($p.P0_09, Pull::Down), // ROW4 + ], + misc::translate_key_position, + None, + ) + }}; +} + +#[macro_export] +macro_rules! driver_encoder { + ($p:ident) => {{ + use embassy_nrf::gpio::{Input, Pull}; + use rktk_drivers_common::encoder::GeneralEncoder; + + GeneralEncoder::new([( + Input::new($p.P0_02, Pull::Down), + Input::new($p.P0_29, Pull::Down), + )]) + }}; +} + +#[macro_export] +macro_rules! driver_system { + ($p:ident) => {{ + use embassy_nrf::gpio::{Level, Output, OutputDrive}; + use rktk_drivers_nrf::system::NrfSystemDriver; + + let vcc_cutoff = ( + Output::new($p.P0_13, Level::High, OutputDrive::Standard), + Level::Low, + ); + NrfSystemDriver::new(Some(vcc_cutoff)) + }}; +} + +#[macro_export] +macro_rules! driver_debounce { + () => {{ + rktk_drivers_common::debounce::EagerDebounceDriver::new( + embassy_time::Duration::from_millis(10), + true, + ) + }}; +} + +#[macro_export] +macro_rules! driver_rgb { + ($p:ident) => {{ + use rktk_drivers_nrf::rgb::ws2812_pwm::Ws2812Pwm; + + Ws2812Pwm::<1024, _, _>::new($p.PWM0, $p.P0_24) + }}; +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/lib.rs b/keyboards_old/neg/crates/neg-nrf/src/lib.rs new file mode 100644 index 00000000..4c6672fb --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/lib.rs @@ -0,0 +1,61 @@ +#![no_std] + +use core::panic::PanicInfo; + +use embassy_nrf::bind_interrupts; +use rktk_drivers_common::panic_utils; + +mod common; +mod drivers; +mod master; +mod misc; +mod slave; + +// ===== Global linkages ===== + +#[cfg(feature = "alloc")] +extern crate alloc; +#[cfg(feature = "alloc")] +use embedded_alloc::LlffHeap as Heap; + +#[cfg(feature = "alloc")] +#[global_allocator] +static HEAP: Heap = Heap::empty(); + +#[cfg(feature = "sd")] +use nrf_softdevice as _; + +#[panic_handler] +fn panic(info: &PanicInfo) -> ! { + cortex_m::interrupt::disable(); + panic_utils::save_panic_info(info); + cortex_m::peripheral::SCB::sys_reset() +} + +// ===== Irq definitions ===== + +#[cfg(not(feature = "trouble"))] +bind_interrupts!(pub struct Irqs { + USBD => embassy_nrf::usb::InterruptHandler; + SPI2 => embassy_nrf::spim::InterruptHandler; + TWISPI0 => embassy_nrf::twim::InterruptHandler; + UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; +}); + +#[cfg(feature = "trouble")] +bind_interrupts!(pub struct Irqs { + USBD => embassy_nrf::usb::InterruptHandler; + SPI2 => embassy_nrf::spim::InterruptHandler; + TWISPI0 => embassy_nrf::twim::InterruptHandler; + UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; + RNG => embassy_nrf::rng::InterruptHandler; + EGU0_SWI0 => nrf_sdc::mpsl::LowPrioInterruptHandler; + CLOCK_POWER => nrf_sdc::mpsl::ClockInterruptHandler; + RADIO => nrf_sdc::mpsl::HighPrioInterruptHandler; + TIMER0 => nrf_sdc::mpsl::HighPrioInterruptHandler; + RTC0 => nrf_sdc::mpsl::HighPrioInterruptHandler; +}); + +pub use common::init_peri; +pub use master::start_master; +pub use slave::start_slave; diff --git a/keyboards_old/neg/crates/neg-nrf/src/master.rs b/keyboards_old/neg/crates/neg-nrf/src/master.rs new file mode 100644 index 00000000..9c3c21d9 --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/master.rs @@ -0,0 +1,93 @@ +use embassy_nrf::usb::vbus_detect::SoftwareVbusDetect; +use once_cell::sync::OnceCell; +use rktk::{ + config::keymap::Keymap, + drivers::{Drivers, dummy}, + hooks::{Hooks, interface::*}, +}; +use rktk_drivers_common::usb::{CommonUsbDriverConfig, CommonUsbReporterBuilder, UsbDriverConfig}; + +use crate::*; + +static SOFTWARE_VBUS: OnceCell = OnceCell::new(); +pub async fn start_master( + spawner: embassy_executor::Spawner, + p: embassy_nrf::Peripherals, + hooks: Hooks, + keymap: &'static Keymap, +) { + // create shared SPI bus + // NOTE: This must be done as soon as possible, otherwise the SPI device will start acting strangely. + let spi = create_spi!(p); + + #[cfg(feature = "trouble")] + let trouble_ble_reporter = { + use embassy_nrf::mode::Async; + use rand_chacha::{ChaCha12Rng, rand_core::SeedableRng as _}; + use rktk::singleton; + use rktk_drivers_common::trouble::reporter::{ + TroubleReporterBuilder, TroubleReporterConfig, + }; + use rktk_drivers_nrf::init_sdc; + + let mut rng = singleton!( + embassy_nrf::rng::Rng::new(p.RNG, Irqs), + embassy_nrf::rng::Rng + ); + let rng_2 = singleton!(ChaCha12Rng::from_rng(&mut rng).unwrap(), ChaCha12Rng); + init_sdc!( + spawner, + sdc, Irqs, rng, + mpsl: (p.RTC0, p.TIMER0, p.TEMP, p.PPI_CH19, p.PPI_CH30, p.PPI_CH31), + sdc: (p.PPI_CH17, p.PPI_CH18, p.PPI_CH20, p.PPI_CH21, p.PPI_CH22, p.PPI_CH23, p.PPI_CH24, p.PPI_CH25, p.PPI_CH26, p.PPI_CH27, p.PPI_CH28, p.PPI_CH29), + mtu: 72, + txq: 3, + rxq: 3 + ); + TroubleReporterBuilder::<_, _, 1, 5, 72>::new( + sdc.unwrap(), + rng_2, + TroubleReporterConfig { + advertise_name: "negL Trouble", + peripheral_config: None, + }, + ) + }; + + cfg_if::cfg_if! { + if #[cfg(feature = "sd")] { + let ble_builder = Some(crate::common::init_sd(spawner).await.0); + } else if #[cfg(feature = "trouble")] { + let ble_builder = Some(trouble_ble_reporter); + } else { + let ble_builder = dummy::ble_builder(); + } + } + + let usb = { + let vbus = SOFTWARE_VBUS.get_or_init(|| SoftwareVbusDetect::new(true, true)); + let embassy_driver = embassy_nrf::usb::Driver::new(p.USBD, Irqs, vbus); + let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); + driver_config.product = Some("negL"); + let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); + Some(CommonUsbReporterBuilder::new(opts)) + }; + + // let storage = rktk_drivers_nrf::softdevice::flash::create_storage_driver(flash, &cache); + + let drivers = Drivers { + keyscan: driver_keyscan!(p, spi), + system: driver_system!(p), + mouse: Some(driver_mouse!(p, spi)), + usb_builder: usb, + display: Some(driver_display!(p)), + split: Some(driver_split!(p)), + rgb: Some(driver_rgb!(p)), + storage: dummy::storage(), + ble_builder, + debounce: Some(driver_debounce!()), + encoder: Some(driver_encoder!(p)), + }; + + rktk::task::start(spawner, drivers, hooks, misc::get_opts(keymap)).await; +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/misc.rs b/keyboards_old/neg/crates/neg-nrf/src/misc.rs new file mode 100644 index 00000000..d5db617b --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/misc.rs @@ -0,0 +1,110 @@ +use rktk::{ + config::{Hand, RktkOpts, keymap::Keymap}, + task::display::default_display::DefaultDisplayConfig, +}; +use rktk_drivers_common::mouse::paw3395; + +pub const PAW3395_CONFIG: paw3395::config::Config = paw3395::config::Config { + mode: paw3395::config::HP_MODE, + lift_cutoff: paw3395::config::LiftCutoff::_2mm, +}; + +pub fn translate_key_position(row: usize, col: usize) -> Option<(usize, usize)> { + #[cfg(feature = "left")] + { + Some((row, 7 - col)) + } + + #[cfg(feature = "right")] + { + Some((row, col)) + } +} + +pub fn get_opts(keymap: &'static Keymap) -> RktkOpts { + RktkOpts { + keymap, + hand: Some(HAND), + config: &rktk::config::DYNAMIC_CONFIG_FROM_FILE, + display: DefaultDisplayConfig, + rgb_layout: Layout, + } +} + +pub const HAND: Hand = { + #[cfg(feature = "left")] + { + Hand::Left + } + #[cfg(feature = "right")] + { + Hand::Right + } +}; + +#[cfg(feature = "left")] +pub use layout::LayoutLeft as Layout; + +#[cfg(feature = "right")] +pub use layout::LayoutRight as Layout; + +mod layout { + use rktk::config::rgb::{layout::*, layout2d}; + + // Right half RGB layout: + // h +.1 +.2 +.3 +.4 +.5 +.6 +.7 +.8 + // v------------------------------------- + // +1.0 | 4 8 12 16 20 25 + // +0.5 | 5 9 13 17 21 26 + // 0.0 | 6 10 14 18 22 27 + // -0.5 | 2 7 11 15 19 23 28 + // -1.0 | 1 3 24 29 + layout2d!( + pub LayoutRight, + [ + Shape2d::Point(Vec2::new(0.1, -1.0)), + Shape2d::Point(Vec2::new(0.2, -0.5)), + Shape2d::Point(Vec2::new(0.2, -1.0)), + Shape2d::Grid { + start: Vec2::new(0.3, 1.0), + vertical_end: Vec2::new(0.6, 1.0), + horizontal_end: Vec2::new(0.3, -0.5), + horizontal_pixel_count: 4, + vertical_pixel_count: 4, + serpentine: true, + }, + Shape2d::Grid { + start: Vec2::new(0.7, 1.0), + vertical_end: Vec2::new(0.8, 1.0), + horizontal_end: Vec2::new(0.7,-1.0), + horizontal_pixel_count: 5, + vertical_pixel_count: 2, + serpentine: true, + } + ] + ); + + // Left half RGB layout: + // h -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1 + // v------------------------------------- + // +1.0 | 33 28 23 18 13 8 3 + // +0.5 | 34 29 24 19 14 9 4 + // 0.0 | 35 30 25 20 15 10 5 + // -0.5 | 36 31 26 21 16 11 6 1 + // -1.0 | 37 32 27 22 17 12 7 2 + layout2d!( + pub LayoutLeft, + [ + Shape2d::Point(Vec2::new(-0.1, -0.5)), + Shape2d::Point(Vec2::new(-0.1, -1.0)), + Shape2d::Grid { + start: Vec2::new(-0.2, 1.0), + vertical_end: Vec2::new(-0.8, 1.0), + horizontal_end: Vec2::new(-0.2, -1.0), + horizontal_pixel_count: 7, + vertical_pixel_count: 5, + serpentine: true, + }, + ] + ); +} diff --git a/keyboards_old/neg/crates/neg-nrf/src/slave.rs b/keyboards_old/neg/crates/neg-nrf/src/slave.rs new file mode 100644 index 00000000..17b32371 --- /dev/null +++ b/keyboards_old/neg/crates/neg-nrf/src/slave.rs @@ -0,0 +1,38 @@ +use embassy_nrf::Peripherals; +use rktk::{ + config::keymap::Keymap, + drivers::{Drivers, dummy}, + hooks::{Hooks, interface::*}, +}; + +#[cfg(feature = "sd")] +use crate::common::init_sd; +use crate::*; + +const EMPTY_KM: Keymap = Keymap::const_default(); + +pub async fn start_slave( + spawner: embassy_executor::Spawner, + p: Peripherals, + hooks: Hooks, +) { + #[cfg(feature = "sd")] + let _ = init_sd(spawner).await; + + let spi = create_spi!(p); + + let drivers = Drivers { + keyscan: driver_keyscan!(p, spi), + system: driver_system!(p), + mouse: Some(driver_mouse!(p, spi)), + usb_builder: dummy::usb_builder(), + display: Some(driver_display!(p)), + split: Some(driver_split!(p)), + rgb: Some(driver_rgb!(p)), + storage: dummy::storage(), + ble_builder: dummy::ble_builder(), + debounce: Some(driver_debounce!()), + encoder: Some(driver_encoder!(p)), + }; + rktk::task::start(spawner, drivers, hooks, misc::get_opts(&EMPTY_KM)).await; +} diff --git a/keyboards_old/neg/rktk.json b/keyboards_old/neg/rktk.json new file mode 100644 index 00000000..dd5c8f29 --- /dev/null +++ b/keyboards_old/neg/rktk.json @@ -0,0 +1,54 @@ +{ + "$schema": "../../../rktk/crates/rktk/schema.json", + "constant": { + "keyboard": { + "cols": 16, + "rows": 5, + "encoder_count": 1 + }, + "key_manager": { + "combo_key_max_definitions": 0, + "combo_key_max_sources": 2, + "oneshot_state_size": 5, + "tap_dance_max_definitions": 1, + "tap_dance_max_repeats": 4 + } + }, + "dynamic": { + "rktk": { + "scan_interval_keyboard": 5, + "scan_interval_mouse": 5, + "display_timeout": 100000, + "swap_mouse_x_y": true + }, + "key_manager": { + "mouse": { + "auto_mouse_threshold": 10 + } + }, + "keyboard": { + "name": "negL", + "layout": { + "keymap": [ + [{ "x": 2 }, "0,2", "0,3", "0,4", "0,5", { "x": 5 }, "0,10", "0,11", "0,12", "0,13"], + [{ "y": -0.75 }, "0,0", "0,1", { "x": 13 }, "0,14", "0,15"], + [{ "y": -0.25, "x": 2 }, "1,2", "1,3", "1,4", "1,5", { "x": 5 }, "1,10", "1,11", "1,12", "1,13"], + [{ "y": -0.75 }, "1,0", "1,1", { "x": 13 }, "1,14", "1,15"], + [{ "y": -0.25, "x": 2 }, "2,2", "2,3", "2,4", "2,5", { "x": 5 }, "2,10", "2,11", "2,12", "2,13"], + [{ "y": -0.75 }, "2,0", "2,1", { "x": 13 }, "2,14", "2,15"], + [{ "y": -0.25, "x": 2 }, "3,2", "3,3", "3,4", "3,5", { "x": 5 }, "3,10", "3,11", "3,12", "3,13"], + [{ "y": -0.9, "x": 6 }, "3,6", { "x": 3 }, "3,9"], + [{ "y": -0.85 }, "3,0", "3,1", { "x": 13 }, "3,14", "3,15"], + [{ "y": -0.25, "x": 2 }, "4,2", "4,3"], + [{ "y": -0.75 }, "4,0", "4,1", { "x": 2.1 }, "4,4", { "x": 9.9 }, "4,14", "4,15"], + [{ "r": 5, "rx": 5.75, "ry": 4.75, "y": -0.4, "x": -0.55 }, "4,5"], + [{ "r": 10, "rx": 6.75, "ry": 5, "y": -0.5, "x": -0.5 }, "4,6"], + [{ "r": 15, "rx": 7.75, "ry": 5.5, "y": -0.75, "x": -0.5 }, "4,7"], + [{ "r": -15, "rx": 9.25, "y": -0.75, "x": -0.25 }, "4,8"], + [{ "r": -10, "rx": 10.25, "ry": 5, "y": -0.5, "x": -0.25 }, "4,9"], + [{ "r": -5, "rx": 11, "y": -0.65, "x": 0.1 }, "4,10"] + ] + } + } + } +} From d69aaf05e4981ac6002c626cc4c4f07c064cdf16 Mon Sep 17 00:00:00 2001 From: nazo6 Date: Wed, 1 Oct 2025 13:00:09 +0900 Subject: [PATCH 3/4] update --- Cargo.lock | 218 +++++++++++----------- Cargo.toml | 1 + crates/rktk-ksp/Cargo.toml | 2 + crates/rktk-ksp/src/lib.rs | 21 +++ keyboards/ksps/keyball61-nrf/Cargo.toml | 2 +- keyboards/ksps/keyball61-rp/Cargo.toml | 2 +- keyboards/ksps/neg-nrf/.cargo/config.toml | 2 + keyboards/ksps/neg-nrf/Cargo.toml | 1 + keyboards/ksps/neg-nrf/src/lib.rs | 28 ++- 9 files changed, 161 insertions(+), 116 deletions(-) create mode 100644 keyboards/ksps/neg-nrf/.cargo/config.toml diff --git a/Cargo.lock b/Cargo.lock index 2fe1540b..0f0bb0be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1123,34 +1123,6 @@ dependencies = [ "libc", ] -[[package]] -name = "corne-nrf" -version = "0.2.0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "embassy-executor", - "embassy-nrf", - "nrf-softdevice", - "rktk", - "rktk-drivers-common", - "rktk-drivers-nrf", -] - -[[package]] -name = "corne-rp" -version = "0.2.0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "embassy-executor", - "embassy-rp", - "portable-atomic", - "rktk", - "rktk-drivers-common", - "rktk-drivers-rp", -] - [[package]] name = "cortex-m" version = "0.7.7" @@ -2183,19 +2155,6 @@ dependencies = [ "shared_thread", ] -[[package]] -name = "dummy-rp" -version = "0.2.0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "embassy-executor", - "embassy-rp", - "portable-atomic", - "rktk", - "rktk-drivers-rp", -] - [[package]] name = "dunce" version = "1.0.5" @@ -4000,52 +3959,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "keyball61-common" -version = "0.2.0" -dependencies = [ - "rktk", - "rktk-drivers-common", -] - -[[package]] -name = "keyball61-nrf" -version = "0.2.0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "embassy-embedded-hal", - "embassy-executor", - "embassy-nrf", - "embassy-sync 0.7.2", - "embassy-time", - "keyball61-common", - "nrf-softdevice", - "once_cell", - "rktk", - "rktk-drivers-common", - "rktk-drivers-nrf", -] - -[[package]] -name = "keyball61-rp" -version = "0.2.0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "defmt 1.0.1", - "embassy-embedded-hal", - "embassy-executor", - "embassy-rp", - "embassy-sync 0.7.2", - "embassy-time", - "keyball61-common", - "portable-atomic", - "rktk", - "rktk-drivers-common", - "rktk-drivers-rp", -] - [[package]] name = "keyboard-types" version = "0.7.0" @@ -4621,32 +4534,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "neg-nrf" -version = "0.2.0" -dependencies = [ - "cfg-if", - "cortex-m", - "cortex-m-rt", - "defmt 1.0.1", - "embassy-embedded-hal", - "embassy-executor", - "embassy-nrf", - "embassy-sync 0.7.2", - "embassy-time", - "embedded-alloc", - "log", - "nrf-sdc", - "nrf-softdevice", - "once_cell", - "rand_chacha 0.3.1", - "rktk", - "rktk-drivers-common", - "rktk-drivers-nrf", - "rktk-log", - "static_cell", -] - [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -6117,6 +6004,111 @@ dependencies = [ [[package]] name = "rktk-ksp" version = "0.2.0" +dependencies = [ + "embassy-executor", + "rktk", +] + +[[package]] +name = "rktk-ksp-corne-nrf" +version = "0.2.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "embassy-executor", + "embassy-nrf", + "nrf-softdevice", + "rktk", + "rktk-drivers-common", + "rktk-drivers-nrf", +] + +[[package]] +name = "rktk-ksp-corne-rp" +version = "0.2.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "embassy-executor", + "embassy-rp", + "portable-atomic", + "rktk", + "rktk-drivers-common", + "rktk-drivers-rp", +] + +[[package]] +name = "rktk-ksp-keyball61-common" +version = "0.2.0" +dependencies = [ + "rktk", + "rktk-drivers-common", +] + +[[package]] +name = "rktk-ksp-keyball61-nrf" +version = "0.2.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "embassy-embedded-hal", + "embassy-executor", + "embassy-nrf", + "embassy-sync 0.7.2", + "embassy-time", + "nrf-softdevice", + "once_cell", + "rktk", + "rktk-drivers-common", + "rktk-drivers-nrf", + "rktk-ksp-keyball61-common", +] + +[[package]] +name = "rktk-ksp-keyball61-rp" +version = "0.2.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "defmt 1.0.1", + "embassy-embedded-hal", + "embassy-executor", + "embassy-rp", + "embassy-sync 0.7.2", + "embassy-time", + "portable-atomic", + "rktk", + "rktk-drivers-common", + "rktk-drivers-rp", + "rktk-ksp-keyball61-common", +] + +[[package]] +name = "rktk-ksp-neg-nrf" +version = "0.2.0" +dependencies = [ + "cfg-if", + "cortex-m", + "cortex-m-rt", + "defmt 1.0.1", + "embassy-embedded-hal", + "embassy-executor", + "embassy-nrf", + "embassy-sync 0.7.2", + "embassy-time", + "embedded-alloc", + "log", + "nrf-sdc", + "nrf-softdevice", + "once_cell", + "rand_chacha 0.3.1", + "rktk", + "rktk-drivers-common", + "rktk-drivers-nrf", + "rktk-ksp", + "rktk-log", + "static_cell", +] [[package]] name = "rktk-log" diff --git a/Cargo.toml b/Cargo.toml index 30faca0b..4ba52dc5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ rktk-drivers-rp = { path = "crates/rktk-drivers-rp", version = "0.2.0" } rktk = { path = "crates/rktk", version = "0.2.0" } rktk-log = { path = "crates/rktk-log", version = "0.2.0" } rktk-rrp = { path = "crates/rktk-rrp", version = "0.2.0" } +rktk-ksp = { path = "crates/rktk-ksp", version = "0.2.0" } # embedded core libraries embedded-hal = "1.0.0" diff --git a/crates/rktk-ksp/Cargo.toml b/crates/rktk-ksp/Cargo.toml index 86e0e576..e874f258 100644 --- a/crates/rktk-ksp/Cargo.toml +++ b/crates/rktk-ksp/Cargo.toml @@ -7,3 +7,5 @@ edition.workspace = true repository.workspace = true [dependencies] +embassy-executor.workspace = true +rktk.workspace = true diff --git a/crates/rktk-ksp/src/lib.rs b/crates/rktk-ksp/src/lib.rs index 0c9ac1ac..5edb5b39 100644 --- a/crates/rktk-ksp/src/lib.rs +++ b/crates/rktk-ksp/src/lib.rs @@ -1 +1,22 @@ #![no_std] + +use rktk::hooks::{ + Hooks, + interface::{CommonHooks, MasterHooks, RgbHooks, SlaveHooks}, +}; + +pub trait RktkKsp { + type Irqs: Clone + Copy; + type Peri; + + type PeriConfig; + type RunConfig; + + fn init_peripherals(config: Self::PeriConfig) -> Self::Peri; + async fn start( + spawner: embassy_executor::Spawner, + p: Self::Peri, + hooks: Hooks, + config: Self::RunConfig, + ); +} diff --git a/keyboards/ksps/keyball61-nrf/Cargo.toml b/keyboards/ksps/keyball61-nrf/Cargo.toml index 0141b916..c6df1fcd 100644 --- a/keyboards/ksps/keyball61-nrf/Cargo.toml +++ b/keyboards/ksps/keyball61-nrf/Cargo.toml @@ -16,7 +16,7 @@ doctest = false bench = false [dependencies] -keyball61-common = { path = "../keyball61-common/" } +rktk-ksp-keyball61-common = { path = "../keyball61-common/" } rktk = { workspace = true } rktk-drivers-nrf = { workspace = true } diff --git a/keyboards/ksps/keyball61-rp/Cargo.toml b/keyboards/ksps/keyball61-rp/Cargo.toml index 2d7d5422..fd6f22ab 100644 --- a/keyboards/ksps/keyball61-rp/Cargo.toml +++ b/keyboards/ksps/keyball61-rp/Cargo.toml @@ -13,7 +13,7 @@ doctest = false bench = false [dependencies] -keyball61-common = { path = "../keyball61-common/" } +rktk-ksp-keyball61-common = { path = "../keyball61-common/" } rktk = { workspace = true, features = ["rrp"] } rktk-drivers-rp = { workspace = true } diff --git a/keyboards/ksps/neg-nrf/.cargo/config.toml b/keyboards/ksps/neg-nrf/.cargo/config.toml new file mode 100644 index 00000000..450b6469 --- /dev/null +++ b/keyboards/ksps/neg-nrf/.cargo/config.toml @@ -0,0 +1,2 @@ +[env] +RKTK_CONFIG_PATH = { value = "../../configs/neg.json", relative = true } diff --git a/keyboards/ksps/neg-nrf/Cargo.toml b/keyboards/ksps/neg-nrf/Cargo.toml index 5e53e54b..1987cbe9 100644 --- a/keyboards/ksps/neg-nrf/Cargo.toml +++ b/keyboards/ksps/neg-nrf/Cargo.toml @@ -21,6 +21,7 @@ rktk-drivers-nrf = { workspace = true } rktk-drivers-common = { workspace = true } rktk = { workspace = true } rktk-log = { workspace = true } +rktk-ksp = { workspace = true } cortex-m = { workspace = true } cortex-m-rt = { workspace = true } diff --git a/keyboards/ksps/neg-nrf/src/lib.rs b/keyboards/ksps/neg-nrf/src/lib.rs index 4c6672fb..654e15aa 100644 --- a/keyboards/ksps/neg-nrf/src/lib.rs +++ b/keyboards/ksps/neg-nrf/src/lib.rs @@ -4,6 +4,7 @@ use core::panic::PanicInfo; use embassy_nrf::bind_interrupts; use rktk_drivers_common::panic_utils; +use rktk_ksp::RktkKsp; mod common; mod drivers; @@ -45,7 +46,7 @@ bind_interrupts!(pub struct Irqs { #[cfg(feature = "trouble")] bind_interrupts!(pub struct Irqs { USBD => embassy_nrf::usb::InterruptHandler; - SPI2 => embassy_nrf::spim::InterruptHandler; + SPI2 => embassy_nrf::spim::InterruptHandler; TWISPI0 => embassy_nrf::twim::InterruptHandler; UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; RNG => embassy_nrf::rng::InterruptHandler; @@ -59,3 +60,28 @@ bind_interrupts!(pub struct Irqs { pub use common::init_peri; pub use master::start_master; pub use slave::start_slave; + +pub struct NegMaster; +impl RktkKsp for NegMaster { + type Irqs = Irqs; + + type Peri = embassy_nrf::Peripherals; + + type PeriConfig = (); + + type RunConfig = (); + + fn init_peripherals(config: Self::PeriConfig) -> Peri { + common::init_peri() + } + + async fn start( + spawner: embassy_executor::Spawner, + p: Self::Peri, + hooks: Hooks, + keymap: &'static Keymap, + config: Self::RunConfig, + ) { + todo!() + } +} From ee2c9a06da904f6090af93820f0e33f5417747e6 Mon Sep 17 00:00:00 2001 From: nazo6 Date: Thu, 2 Oct 2025 20:25:49 +0900 Subject: [PATCH 4/4] update --- crates/rktk-ksp/src/lib.rs | 4 +- .../examples/dummy-rp}/.cargo/config.toml | 3 + .../examples}/dummy-rp/Cargo.toml | 0 .../examples}/dummy-rp/src/keymap.rs | 0 .../examples}/dummy-rp/src/main.rs | 0 keyboards/ksps/neg-nrf/src/lib.rs | 16 +- keyboards_old/.cargo/config.toml | 17 -- keyboards_old/corne/.cargo/config.toml | 2 - .../corne/crates/corne-nrf/.cargo/config.toml | 2 - .../corne/crates/corne-nrf/Cargo.toml | 53 ---- keyboards_old/corne/crates/corne-nrf/build.rs | 18 -- keyboards_old/corne/crates/corne-nrf/memory.x | 7 - .../corne/crates/corne-nrf/src/keymap.rs | 89 ------- .../corne/crates/corne-nrf/src/main.rs | 118 --------- .../corne/crates/corne-rp/.cargo/config.toml | 2 - .../corne/crates/corne-rp/Cargo.toml | 48 ---- keyboards_old/corne/crates/corne-rp/README.md | 27 -- keyboards_old/corne/crates/corne-rp/build.rs | 19 -- keyboards_old/corne/crates/corne-rp/memory.x | 17 -- .../corne/crates/corne-rp/src/keymap.rs | 89 ------- .../corne/crates/corne-rp/src/main.rs | 115 --------- keyboards_old/corne/rktk.json | 14 -- .../dummy/crates/dummy-rp/.cargo/config.toml | 2 - keyboards_old/keyball61/.cargo/config.toml | 2 - .../crates/keyball61-common/Cargo.toml | 14 -- .../crates/keyball61-common/src/lib.rs | 146 ----------- .../crates/keyball61-nrf/.cargo/config.toml | 2 - .../keyball61/crates/keyball61-nrf/Cargo.toml | 64 ----- .../keyball61/crates/keyball61-nrf/build.rs | 34 --- .../keyball61/crates/keyball61-nrf/memory.x | 7 - .../crates/keyball61-nrf/src/bin/keyball61.rs | 14 -- .../keyball61/crates/keyball61-nrf/src/lib.rs | 235 ------------------ .../crates/keyball61-rp/.cargo/config.toml | 2 - .../keyball61/crates/keyball61-rp/Cargo.toml | 63 ----- .../keyball61/crates/keyball61-rp/build.rs | 40 --- .../keyball61/crates/keyball61-rp/memory.x | 18 -- .../crates/keyball61-rp/src/bin/keyball61.rs | 14 -- .../keyball61/crates/keyball61-rp/src/lib.rs | 155 ------------ keyboards_old/keyball61/rktk.json | 51 ---- keyboards_old/neg/.cargo/config.toml | 2 - .../neg/crates/neg-nrf/.cargo/config.toml | 2 - keyboards_old/neg/crates/neg-nrf/Cargo.toml | 114 --------- keyboards_old/neg/crates/neg-nrf/build.rs | 39 --- keyboards_old/neg/crates/neg-nrf/memory.x | 7 - .../crates/neg-nrf/src/bin/neg_nrf_master.rs | 17 -- .../crates/neg-nrf/src/bin/neg_nrf_slave.rs | 13 - .../neg/crates/neg-nrf/src/common.rs | 72 ------ .../neg/crates/neg-nrf/src/drivers.rs | 173 ------------- keyboards_old/neg/crates/neg-nrf/src/lib.rs | 61 ----- .../neg/crates/neg-nrf/src/master.rs | 93 ------- keyboards_old/neg/crates/neg-nrf/src/misc.rs | 110 -------- keyboards_old/neg/crates/neg-nrf/src/slave.rs | 38 --- keyboards_old/neg/rktk.json | 54 ---- 53 files changed, 11 insertions(+), 2307 deletions(-) rename {keyboards_old/dummy => keyboards/examples/dummy-rp}/.cargo/config.toml (65%) rename {keyboards_old/dummy/crates => keyboards/examples}/dummy-rp/Cargo.toml (100%) rename {keyboards_old/dummy/crates => keyboards/examples}/dummy-rp/src/keymap.rs (100%) rename {keyboards_old/dummy/crates => keyboards/examples}/dummy-rp/src/main.rs (100%) delete mode 100644 keyboards_old/.cargo/config.toml delete mode 100644 keyboards_old/corne/.cargo/config.toml delete mode 100644 keyboards_old/corne/crates/corne-nrf/.cargo/config.toml delete mode 100644 keyboards_old/corne/crates/corne-nrf/Cargo.toml delete mode 100644 keyboards_old/corne/crates/corne-nrf/build.rs delete mode 100644 keyboards_old/corne/crates/corne-nrf/memory.x delete mode 100644 keyboards_old/corne/crates/corne-nrf/src/keymap.rs delete mode 100644 keyboards_old/corne/crates/corne-nrf/src/main.rs delete mode 100644 keyboards_old/corne/crates/corne-rp/.cargo/config.toml delete mode 100644 keyboards_old/corne/crates/corne-rp/Cargo.toml delete mode 100644 keyboards_old/corne/crates/corne-rp/README.md delete mode 100644 keyboards_old/corne/crates/corne-rp/build.rs delete mode 100644 keyboards_old/corne/crates/corne-rp/memory.x delete mode 100644 keyboards_old/corne/crates/corne-rp/src/keymap.rs delete mode 100644 keyboards_old/corne/crates/corne-rp/src/main.rs delete mode 100644 keyboards_old/corne/rktk.json delete mode 100644 keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml delete mode 100644 keyboards_old/keyball61/.cargo/config.toml delete mode 100644 keyboards_old/keyball61/crates/keyball61-common/Cargo.toml delete mode 100644 keyboards_old/keyball61/crates/keyball61-common/src/lib.rs delete mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml delete mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml delete mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/build.rs delete mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/memory.x delete mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs delete mode 100644 keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs delete mode 100644 keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml delete mode 100644 keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml delete mode 100644 keyboards_old/keyball61/crates/keyball61-rp/build.rs delete mode 100644 keyboards_old/keyball61/crates/keyball61-rp/memory.x delete mode 100644 keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs delete mode 100644 keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs delete mode 100644 keyboards_old/keyball61/rktk.json delete mode 100644 keyboards_old/neg/.cargo/config.toml delete mode 100644 keyboards_old/neg/crates/neg-nrf/.cargo/config.toml delete mode 100644 keyboards_old/neg/crates/neg-nrf/Cargo.toml delete mode 100644 keyboards_old/neg/crates/neg-nrf/build.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/memory.x delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/common.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/drivers.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/lib.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/master.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/misc.rs delete mode 100644 keyboards_old/neg/crates/neg-nrf/src/slave.rs delete mode 100644 keyboards_old/neg/rktk.json diff --git a/crates/rktk-ksp/src/lib.rs b/crates/rktk-ksp/src/lib.rs index 5edb5b39..a8a7647f 100644 --- a/crates/rktk-ksp/src/lib.rs +++ b/crates/rktk-ksp/src/lib.rs @@ -1,7 +1,7 @@ #![no_std] use rktk::hooks::{ - Hooks, + AllHooks, Hooks, interface::{CommonHooks, MasterHooks, RgbHooks, SlaveHooks}, }; @@ -16,7 +16,7 @@ pub trait RktkKsp { async fn start( spawner: embassy_executor::Spawner, p: Self::Peri, - hooks: Hooks, + hooks: impl AllHooks, config: Self::RunConfig, ); } diff --git a/keyboards_old/dummy/.cargo/config.toml b/keyboards/examples/dummy-rp/.cargo/config.toml similarity index 65% rename from keyboards_old/dummy/.cargo/config.toml rename to keyboards/examples/dummy-rp/.cargo/config.toml index d4e8f6be..d55d62f4 100644 --- a/keyboards_old/dummy/.cargo/config.toml +++ b/keyboards/examples/dummy-rp/.cargo/config.toml @@ -1,2 +1,5 @@ [env] RKTK_CONFIG_PATH = { value = "../corne/rktk.json", relative = true } + +[build] +target = "thumbv6m-none-eabi" diff --git a/keyboards_old/dummy/crates/dummy-rp/Cargo.toml b/keyboards/examples/dummy-rp/Cargo.toml similarity index 100% rename from keyboards_old/dummy/crates/dummy-rp/Cargo.toml rename to keyboards/examples/dummy-rp/Cargo.toml diff --git a/keyboards_old/dummy/crates/dummy-rp/src/keymap.rs b/keyboards/examples/dummy-rp/src/keymap.rs similarity index 100% rename from keyboards_old/dummy/crates/dummy-rp/src/keymap.rs rename to keyboards/examples/dummy-rp/src/keymap.rs diff --git a/keyboards_old/dummy/crates/dummy-rp/src/main.rs b/keyboards/examples/dummy-rp/src/main.rs similarity index 100% rename from keyboards_old/dummy/crates/dummy-rp/src/main.rs rename to keyboards/examples/dummy-rp/src/main.rs diff --git a/keyboards/ksps/neg-nrf/src/lib.rs b/keyboards/ksps/neg-nrf/src/lib.rs index 654e15aa..dde2945e 100644 --- a/keyboards/ksps/neg-nrf/src/lib.rs +++ b/keyboards/ksps/neg-nrf/src/lib.rs @@ -3,6 +3,7 @@ use core::panic::PanicInfo; use embassy_nrf::bind_interrupts; +use rktk::{config::keymap::Keymap, hooks::AllHooks}; use rktk_drivers_common::panic_utils; use rktk_ksp::RktkKsp; @@ -46,7 +47,7 @@ bind_interrupts!(pub struct Irqs { #[cfg(feature = "trouble")] bind_interrupts!(pub struct Irqs { USBD => embassy_nrf::usb::InterruptHandler; - SPI2 => embassy_nrf::spim::InterruptHandler; + SPI2 => embassy_nrf::spim::InterruptHandler; TWISPI0 => embassy_nrf::twim::InterruptHandler; UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; RNG => embassy_nrf::rng::InterruptHandler; @@ -57,10 +58,6 @@ bind_interrupts!(pub struct Irqs { RTC0 => nrf_sdc::mpsl::HighPrioInterruptHandler; }); -pub use common::init_peri; -pub use master::start_master; -pub use slave::start_slave; - pub struct NegMaster; impl RktkKsp for NegMaster { type Irqs = Irqs; @@ -69,19 +66,18 @@ impl RktkKsp for NegMaster { type PeriConfig = (); - type RunConfig = (); + type RunConfig = &'static Keymap; - fn init_peripherals(config: Self::PeriConfig) -> Peri { + fn init_peripherals(_config: Self::PeriConfig) -> Self::Peri { common::init_peri() } async fn start( spawner: embassy_executor::Spawner, p: Self::Peri, - hooks: Hooks, - keymap: &'static Keymap, + hooks: impl AllHooks, config: Self::RunConfig, ) { - todo!() + master::start_master(spawner, p, hooks, config).await } } diff --git a/keyboards_old/.cargo/config.toml b/keyboards_old/.cargo/config.toml deleted file mode 100644 index cd61a2e8..00000000 --- a/keyboards_old/.cargo/config.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Configuration to minimize binary size - -[profile.release] -debug = true -opt-level = "z" -lto = "fat" -codegen-units = 1 -panic = "abort" -rustflags = ["-Zlocation-detail=none"] - -[unstable] -build-std = ["core", "alloc"] -build-std-features = [ - # Temporary disabled (ref: #62) - # "panic_immediate_abort", - "optimize_for_size", -] diff --git a/keyboards_old/corne/.cargo/config.toml b/keyboards_old/corne/.cargo/config.toml deleted file mode 100644 index 4114a855..00000000 --- a/keyboards_old/corne/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[env] -RKTK_CONFIG_PATH = { value = "rktk.json", relative = true } diff --git a/keyboards_old/corne/crates/corne-nrf/.cargo/config.toml b/keyboards_old/corne/crates/corne-nrf/.cargo/config.toml deleted file mode 100644 index 5d10902a..00000000 --- a/keyboards_old/corne/crates/corne-nrf/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "thumbv7em-none-eabihf" diff --git a/keyboards_old/corne/crates/corne-nrf/Cargo.toml b/keyboards_old/corne/crates/corne-nrf/Cargo.toml deleted file mode 100644 index 30e1f687..00000000 --- a/keyboards_old/corne/crates/corne-nrf/Cargo.toml +++ /dev/null @@ -1,53 +0,0 @@ -# You can remove this line and `forced-target` property and use `.cargo/config.toml` if your crate isn't in workspace. -cargo-features = ["per-package-target"] - -[[bin]] -name = "corne-nrf" -path = "src/main.rs" -test = false -doctest = false -bench = false - -[package] -name = "corne-nrf" -authors.workspace = true -license.workspace = true -version.workspace = true -edition.workspace = true -repository.workspace = true -publish = false -forced-target = "thumbv7em-none-eabihf" - -[dependencies] -rktk = { workspace = true } -rktk-drivers-nrf = { workspace = true, features = ["softdevice-ble"] } -rktk-drivers-common = { workspace = true } - -cortex-m = { workspace = true } -cortex-m-rt = { workspace = true } -embassy-executor = { workspace = true, features = [ - "arch-cortex-m", - "executor-thread", - "executor-interrupt", -] } - -embassy-nrf = { workspace = true, features = [ - "gpiote", - "time-driver-rtc1", - "nrf52840", - "nfc-pins-as-gpio", -] } -nrf-softdevice = { workspace = true, features = [ - "critical-section-impl", - "s140", - "nrf52840", -] } - -[features] -default = ["right"] - -right = [] -left = [] - -# Remove this line in your project. It's just used in this workspace for check. -_check = [] diff --git a/keyboards_old/corne/crates/corne-nrf/build.rs b/keyboards_old/corne/crates/corne-nrf/build.rs deleted file mode 100644 index 1bb8d428..00000000 --- a/keyboards_old/corne/crates/corne-nrf/build.rs +++ /dev/null @@ -1,18 +0,0 @@ -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -fn main() { - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("memory.x")) - .unwrap() - .write_all(include_bytes!("memory.x")) - .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); - - println!("cargo:rerun-if-changed=memory.x"); - - println!("cargo:rustc-link-arg-bins=--nmagic"); - println!("cargo:rustc-link-arg-bins=-Tlink.x"); -} diff --git a/keyboards_old/corne/crates/corne-nrf/memory.x b/keyboards_old/corne/crates/corne-nrf/memory.x deleted file mode 100644 index b2946677..00000000 --- a/keyboards_old/corne/crates/corne-nrf/memory.x +++ /dev/null @@ -1,7 +0,0 @@ -MEMORY -{ - /* for softdevice v6 */ - FLASH : ORIGIN = 0x00026000, LENGTH = 828K - /* RAM MAX: 256K (0x40000) */ - RAM : ORIGIN = 0x20008000, LENGTH = 200K -} diff --git a/keyboards_old/corne/crates/corne-nrf/src/keymap.rs b/keyboards_old/corne/crates/corne-nrf/src/keymap.rs deleted file mode 100644 index 3738b880..00000000 --- a/keyboards_old/corne/crates/corne-nrf/src/keymap.rs +++ /dev/null @@ -1,89 +0,0 @@ -use rktk::config::keymap::{ - keymanager::{keycode::prelude::*, keymap::TapDanceDefinition}, - Keymap, Layer, LayerKeymap, -}; - -const L2SPC: KeyAction = KeyAction::TapHold( - KeyCode::Key(Key::Enter), - KeyCode::Layer(LayerOp::Momentary(2)), -); - -#[rustfmt::skip] -const L0: LayerKeymap = [ - [ TAB , Q , W , E , R , T , /**/ Y , U , I , O , P , MINUS], - [ ESC , A , S , D , F , G , /**/ H , J , K , L , SCLN , QUOTE], - [ L_SHFT, Z , X , C , V , B , /**/ N , M , COMM , DOT , SLASH, BSLSH], - [ L_CTRL, L_GUI , TG(2) , L_ALT , L2SPC , SPACE , /**/ BS , ENTER , _____ , _____ ,R_SHFT,R_CTRL], -]; - -#[rustfmt::skip] -/// Auto mouse layer -const L1: LayerKeymap = [ - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,_____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], -]; - -#[rustfmt::skip] -/// Mouse layer -const L2: LayerKeymap = [ - [ _____ , _____ , INSERT, HOME , PGUP , _____ , /**/ LEFT , DOWN , UP , RIGHT , _____ , F12 ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , VOLUP ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,VOLDN ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ DELETE, _____ , _____ , _____ , PRTSC , _____ ], -]; - -#[rustfmt::skip] -const L3: LayerKeymap = [ - [ _____ , _____ , KP7 , KP8 , KP9 , _____ , /**/ SF(D1), SF(D2), SF(D3), SF(D4), SF(D5), _____ ], - [ _____ , _____ , KP4 , KP5 , KP6 , _____ , /**/ SF(D6), SF(D7), SF(D8), SF(D9), SF(D0), _____ ], - [ _____ , _____ , KP1 , KP2 , KP3 , _____ , /**/ QUOTE,SF(QUOTE),EQUAL,SF(EQUAL), _____, _____ ], - [ _____ , _____ , KP0 , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], -]; - -#[rustfmt::skip] -const L4: LayerKeymap = [ - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], -]; - -pub const KEYMAP: Keymap = Keymap { - layers: [ - Layer { - keymap: L0, - ..Layer::const_default() - }, - Layer { - keymap: L1, - ..Layer::const_default() - }, - Layer { - keymap: L2, - ..Layer::const_default() - }, - Layer { - keymap: L3, - ..Layer::const_default() - }, - Layer { - keymap: L4, - ..Layer::const_default() - }, - ], - tap_dance: [ - Some(TapDanceDefinition { - tap: [ - Some(KeyCode::Key(Key::RightBracket)), - Some(KeyCode::Layer(LayerOp::Toggle(2))), - None, - None, - ], - hold: [None, None, None, None], - }), - None, - ], - ..Keymap::const_default() -}; diff --git a/keyboards_old/corne/crates/corne-nrf/src/main.rs b/keyboards_old/corne/crates/corne-nrf/src/main.rs deleted file mode 100644 index b4e90e42..00000000 --- a/keyboards_old/corne/crates/corne-nrf/src/main.rs +++ /dev/null @@ -1,118 +0,0 @@ -#![no_std] -#![no_main] - -mod keymap; - -use core::panic::PanicInfo; - -use embassy_executor::Spawner; -use embassy_nrf::{ - bind_interrupts, - gpio::{Input, Level, Output, OutputDrive, Pull}, - usb::vbus_detect::SoftwareVbusDetect, -}; -use rktk::{ - config::Hand, - config::{CONST_CONFIG, new_rktk_opts}, - drivers::{Drivers, dummy}, - hooks::empty_hooks::create_empty_hooks, - singleton, -}; - -use rktk_drivers_common::{ - keyscan::matrix::Matrix, - usb::{CommonUsbDriverConfig, CommonUsbReporterBuilder, UsbDriverConfig}, -}; -use rktk_drivers_nrf::system::NrfSystemDriver; - -bind_interrupts!(pub struct Irqs { - USBD => embassy_nrf::usb::InterruptHandler; -}); - -#[embassy_executor::main] -async fn main(spawner: Spawner) { - let p = embassy_nrf::init(Default::default()); - - // Output pins are arranged from left to right - #[cfg(feature = "left")] - let outputs = [ - Output::new(p.P1_11, Level::Low, OutputDrive::Standard), // COL5 - Output::new(p.P1_13, Level::Low, OutputDrive::Standard), // COL4 - Output::new(p.P1_15, Level::Low, OutputDrive::Standard), // COL3 - Output::new(p.P0_02, Level::Low, OutputDrive::Standard), // COL2 - Output::new(p.P0_29, Level::Low, OutputDrive::Standard), // COL1 - Output::new(p.P0_31, Level::Low, OutputDrive::Standard), // COL0 - ]; - - #[cfg(feature = "right")] - let outputs = [ - Output::new(p.P0_31, Level::Low, OutputDrive::Standard), // COL0 - Output::new(p.P0_29, Level::Low, OutputDrive::Standard), // COL1 - Output::new(p.P0_02, Level::Low, OutputDrive::Standard), // COL2 - Output::new(p.P1_15, Level::Low, OutputDrive::Standard), // COL3 - Output::new(p.P1_13, Level::Low, OutputDrive::Standard), // COL4 - Output::new(p.P1_11, Level::Low, OutputDrive::Standard), // COL5 - ]; - - let drivers = Drivers { - keyscan: Matrix::< - _, - _, - _, - 6, - 4, - { CONST_CONFIG.keyboard.rows as usize }, - { CONST_CONFIG.keyboard.cols as usize }, - >::new( - outputs, - [ - Input::new(p.P0_22, Pull::Down), // ROW0 - Input::new(p.P0_24, Pull::Down), // ROW1 - Input::new(p.P1_00, Pull::Down), // ROW2 - Input::new(p.P0_11, Pull::Down), // ROW3 - ], - |row, col| Some((row, col)), - None, - ), - system: NrfSystemDriver::new(None), - mouse: dummy::mouse(), - usb_builder: Some({ - let vbus = &*singleton!(SoftwareVbusDetect::new(true, true), SoftwareVbusDetect); - let embassy_driver = embassy_nrf::usb::Driver::new(p.USBD, Irqs, vbus); - let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); - driver_config.product = Some("corne"); - let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); - - CommonUsbReporterBuilder::new(opts) - }), - display: dummy::display(), - split: dummy::split(), - rgb: dummy::rgb(), - ble_builder: dummy::ble_builder(), - storage: dummy::storage(), - debounce: dummy::debounce(), - encoder: dummy::encoder(), - }; - - rktk::task::start( - spawner, - drivers, - create_empty_hooks(), - new_rktk_opts(&keymap::KEYMAP, { - #[cfg(feature = "left")] - { - Some(Hand::Left) - } - #[cfg(feature = "right")] - { - Some(Hand::Right) - } - }), - ) - .await; -} - -#[panic_handler] -fn panic(_info: &PanicInfo) -> ! { - loop {} -} diff --git a/keyboards_old/corne/crates/corne-rp/.cargo/config.toml b/keyboards_old/corne/crates/corne-rp/.cargo/config.toml deleted file mode 100644 index b10f29d0..00000000 --- a/keyboards_old/corne/crates/corne-rp/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "thumbv6m-none-eabi" diff --git a/keyboards_old/corne/crates/corne-rp/Cargo.toml b/keyboards_old/corne/crates/corne-rp/Cargo.toml deleted file mode 100644 index 5db33e9d..00000000 --- a/keyboards_old/corne/crates/corne-rp/Cargo.toml +++ /dev/null @@ -1,48 +0,0 @@ -# You can remove this line and `forced-target` property and use `.cargo/config.toml` if your crate isn't in workspace. -cargo-features = ["per-package-target"] - -[[bin]] -name = "corne-rp" -path = "src/main.rs" -test = false -doctest = false -bench = false - -[package] -name = "corne-rp" -authors.workspace = true -license.workspace = true -version.workspace = true -edition.workspace = true -repository.workspace = true -publish = false -forced-target = "thumbv6m-none-eabi" - -[dependencies] -rktk = { workspace = true } -rktk-drivers-rp = { workspace = true } -rktk-drivers-common = { workspace = true } - -cortex-m = { workspace = true } -cortex-m-rt = { workspace = true } -embassy-rp = { workspace = true, features = [ - "time-driver", - "critical-section-impl", - "rp2040", -] } -embassy-executor = { workspace = true, features = [ - "arch-cortex-m", - "executor-thread", - "executor-interrupt", -] } - -portable-atomic = { workspace = true, features = ["unsafe-assume-single-core"] } - -[features] -default = ["right"] - -right = [] -left = [] - -_check = [] -# Remove this line in your project. It's just used in this workspace for check. diff --git a/keyboards_old/corne/crates/corne-rp/README.md b/keyboards_old/corne/crates/corne-rp/README.md deleted file mode 100644 index 30347437..00000000 --- a/keyboards_old/corne/crates/corne-rp/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# corne v3 example - -RKTK firmware example for corne v3 with ProMicro RP2040. To make example simple, -only keyboard feature is enabled (OLED, RGB is disabled). - -Actually, I don't have a corne keyboard, so please report any issues you -encounter. - -## Building - -1. Clone this repository and move here - ```bash - git clone https://github.com/nazo6/rktk - cd rktk/examples/corne - ``` - -2. Install `uf2deploy` - ```bash - cargo install uf2deploy - ``` - -3. Build and deploy the firmware - ```bash - # By running cargo run, uf2deploy will be executed automatically. uf2deploy converts elf to uf2 and copies uf2 to attached device. - # Use feature `left` or `right` to build firmware for left or right half. - cargo run --release --features left - ``` diff --git a/keyboards_old/corne/crates/corne-rp/build.rs b/keyboards_old/corne/crates/corne-rp/build.rs deleted file mode 100644 index 4f450d4f..00000000 --- a/keyboards_old/corne/crates/corne-rp/build.rs +++ /dev/null @@ -1,19 +0,0 @@ -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -fn main() { - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("memory.x")) - .unwrap() - .write_all(include_bytes!("memory.x")) - .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); - - println!("cargo:rerun-if-changed=memory.x"); - - println!("cargo:rustc-link-arg-bins=--nmagic"); - println!("cargo:rustc-link-arg-bins=-Tlink.x"); - println!("cargo:rustc-link-arg-bins=-Tlink-rp.x"); -} diff --git a/keyboards_old/corne/crates/corne-rp/memory.x b/keyboards_old/corne/crates/corne-rp/memory.x deleted file mode 100644 index ef19dffe..00000000 --- a/keyboards_old/corne/crates/corne-rp/memory.x +++ /dev/null @@ -1,17 +0,0 @@ -MEMORY { - BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 - FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 - - /* Pick one of the two options for RAM layout */ - - /* OPTION A: Use all RAM banks as one big block */ - /* Reasonable, unless you are doing something */ - /* really particular with DMA or other concurrent */ - /* access that would benefit from striping */ - RAM : ORIGIN = 0x20000000, LENGTH = 264K - - /* OPTION B: Keep the unstriped sections separate */ - /* RAM: ORIGIN = 0x20000000, LENGTH = 256K */ - /* SCRATCH_A: ORIGIN = 0x20040000, LENGTH = 4K */ - /* SCRATCH_B: ORIGIN = 0x20041000, LENGTH = 4K */ -} diff --git a/keyboards_old/corne/crates/corne-rp/src/keymap.rs b/keyboards_old/corne/crates/corne-rp/src/keymap.rs deleted file mode 100644 index 3738b880..00000000 --- a/keyboards_old/corne/crates/corne-rp/src/keymap.rs +++ /dev/null @@ -1,89 +0,0 @@ -use rktk::config::keymap::{ - keymanager::{keycode::prelude::*, keymap::TapDanceDefinition}, - Keymap, Layer, LayerKeymap, -}; - -const L2SPC: KeyAction = KeyAction::TapHold( - KeyCode::Key(Key::Enter), - KeyCode::Layer(LayerOp::Momentary(2)), -); - -#[rustfmt::skip] -const L0: LayerKeymap = [ - [ TAB , Q , W , E , R , T , /**/ Y , U , I , O , P , MINUS], - [ ESC , A , S , D , F , G , /**/ H , J , K , L , SCLN , QUOTE], - [ L_SHFT, Z , X , C , V , B , /**/ N , M , COMM , DOT , SLASH, BSLSH], - [ L_CTRL, L_GUI , TG(2) , L_ALT , L2SPC , SPACE , /**/ BS , ENTER , _____ , _____ ,R_SHFT,R_CTRL], -]; - -#[rustfmt::skip] -/// Auto mouse layer -const L1: LayerKeymap = [ - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,_____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], -]; - -#[rustfmt::skip] -/// Mouse layer -const L2: LayerKeymap = [ - [ _____ , _____ , INSERT, HOME , PGUP , _____ , /**/ LEFT , DOWN , UP , RIGHT , _____ , F12 ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_LEFT ,MO_SCRL,M_RIGHT, _____ , VOLUP ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ ,M_BACK ,M_MIDDLE,M_FORWARD,_____,VOLDN ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ DELETE, _____ , _____ , _____ , PRTSC , _____ ], -]; - -#[rustfmt::skip] -const L3: LayerKeymap = [ - [ _____ , _____ , KP7 , KP8 , KP9 , _____ , /**/ SF(D1), SF(D2), SF(D3), SF(D4), SF(D5), _____ ], - [ _____ , _____ , KP4 , KP5 , KP6 , _____ , /**/ SF(D6), SF(D7), SF(D8), SF(D9), SF(D0), _____ ], - [ _____ , _____ , KP1 , KP2 , KP3 , _____ , /**/ QUOTE,SF(QUOTE),EQUAL,SF(EQUAL), _____, _____ ], - [ _____ , _____ , KP0 , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], -]; - -#[rustfmt::skip] -const L4: LayerKeymap = [ - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], - [ _____ , _____ , _____ , _____ , _____ , _____ , /**/ _____ , _____ , _____ , _____ , _____ , _____ ], -]; - -pub const KEYMAP: Keymap = Keymap { - layers: [ - Layer { - keymap: L0, - ..Layer::const_default() - }, - Layer { - keymap: L1, - ..Layer::const_default() - }, - Layer { - keymap: L2, - ..Layer::const_default() - }, - Layer { - keymap: L3, - ..Layer::const_default() - }, - Layer { - keymap: L4, - ..Layer::const_default() - }, - ], - tap_dance: [ - Some(TapDanceDefinition { - tap: [ - Some(KeyCode::Key(Key::RightBracket)), - Some(KeyCode::Layer(LayerOp::Toggle(2))), - None, - None, - ], - hold: [None, None, None, None], - }), - None, - ], - ..Keymap::const_default() -}; diff --git a/keyboards_old/corne/crates/corne-rp/src/main.rs b/keyboards_old/corne/crates/corne-rp/src/main.rs deleted file mode 100644 index 4a562dba..00000000 --- a/keyboards_old/corne/crates/corne-rp/src/main.rs +++ /dev/null @@ -1,115 +0,0 @@ -#![no_std] -#![no_main] - -mod keymap; - -use core::panic::PanicInfo; - -use embassy_executor::Spawner; -use embassy_rp::{ - bind_interrupts, - gpio::{Input, Level, Output, Pull}, -}; -use rktk::{ - config::Hand, - config::{CONST_CONFIG, new_rktk_opts}, - drivers::{Drivers, dummy}, - hooks::empty_hooks::create_empty_hooks, -}; - -use rktk_drivers_common::{ - keyscan::matrix::Matrix, - usb::{CommonUsbDriverConfig, CommonUsbReporterBuilder, UsbDriverConfig}, -}; -use rktk_drivers_rp::system::RpSystemDriver; - -bind_interrupts!(pub struct Irqs { - USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; -}); - -#[embassy_executor::main] -async fn main(spawner: Spawner) { - let p = embassy_rp::init(Default::default()); - - // Output pins are arranged from left to right - #[cfg(feature = "left")] - let outputs = [ - Output::new(p.PIN_15, Level::Low), // COL5 - Output::new(p.PIN_16, Level::Low), // COL4 - Output::new(p.PIN_17, Level::Low), // COL3 - Output::new(p.PIN_18, Level::Low), // COL2 - Output::new(p.PIN_19, Level::Low), // COL1 - Output::new(p.PIN_20, Level::Low), // COL0 - ]; - - #[cfg(feature = "right")] - let outputs = [ - Output::new(p.PIN_20, Level::Low), // COL0 - Output::new(p.PIN_19, Level::Low), // COL1 - Output::new(p.PIN_18, Level::Low), // COL2 - Output::new(p.PIN_17, Level::Low), // COL3 - Output::new(p.PIN_16, Level::Low), // COL4 - Output::new(p.PIN_15, Level::Low), // COL5 - ]; - - let drivers = Drivers { - keyscan: Matrix::< - _, - _, - _, - 6, - 4, - { CONST_CONFIG.keyboard.rows as usize }, - { CONST_CONFIG.keyboard.cols as usize }, - >::new( - outputs, - [ - Input::new(p.PIN_7, Pull::Down), // ROW0 - Input::new(p.PIN_8, Pull::Down), // ROW1 - Input::new(p.PIN_9, Pull::Down), // ROW2 - Input::new(p.PIN_10, Pull::Down), // ROW3 - ], - |row, col| Some((row, col)), - None, - ), - system: RpSystemDriver, - mouse: dummy::mouse(), - usb_builder: Some({ - let embassy_driver = embassy_rp::usb::Driver::new(p.USB, Irqs); - let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); - driver_config.product = Some("corne"); - let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); - - CommonUsbReporterBuilder::new(opts) - }), - display: dummy::display(), - split: dummy::split(), - rgb: dummy::rgb(), - ble_builder: dummy::ble_builder(), - storage: dummy::storage(), - debounce: dummy::debounce(), - encoder: dummy::encoder(), - }; - - rktk::task::start( - spawner, - drivers, - create_empty_hooks(), - new_rktk_opts(&keymap::KEYMAP, { - #[cfg(feature = "left")] - { - Some(Hand::Left) - } - #[cfg(feature = "right")] - { - Some(Hand::Right) - } - }), - ) - .await; -} - -#[panic_handler] -fn panic(_info: &PanicInfo) -> ! { - loop {} -} diff --git a/keyboards_old/corne/rktk.json b/keyboards_old/corne/rktk.json deleted file mode 100644 index c505cb28..00000000 --- a/keyboards_old/corne/rktk.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "../../crates/rktk/schema.json", - "constant": { - "keyboard": { - "cols": 12, - "rows": 4 - } - }, - "dynamic": { - "keyboard": { - "name": "corne" - } - } -} diff --git a/keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml b/keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml deleted file mode 100644 index b10f29d0..00000000 --- a/keyboards_old/dummy/crates/dummy-rp/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "thumbv6m-none-eabi" diff --git a/keyboards_old/keyball61/.cargo/config.toml b/keyboards_old/keyball61/.cargo/config.toml deleted file mode 100644 index 4114a855..00000000 --- a/keyboards_old/keyball61/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[env] -RKTK_CONFIG_PATH = { value = "rktk.json", relative = true } diff --git a/keyboards_old/keyball61/crates/keyball61-common/Cargo.toml b/keyboards_old/keyball61/crates/keyball61-common/Cargo.toml deleted file mode 100644 index b1eb6e13..00000000 --- a/keyboards_old/keyball61/crates/keyball61-common/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "keyball61-common" -version.workspace = true -license.workspace = true -edition.workspace = true -authors.workspace = true -repository.workspace = true - -[dependencies] -rktk = { workspace = true } -rktk-drivers-common = { workspace = true } - -[features] -_check = [] diff --git a/keyboards_old/keyball61/crates/keyball61-common/src/lib.rs b/keyboards_old/keyball61/crates/keyball61-common/src/lib.rs deleted file mode 100644 index 5b281d2f..00000000 --- a/keyboards_old/keyball61/crates/keyball61-common/src/lib.rs +++ /dev/null @@ -1,146 +0,0 @@ -#![no_std] - -use rktk::{ - config::{Hand, RktkOpts, keymap::Keymap}, - task::display::default_display::DefaultDisplayConfig, -}; -use rktk_drivers_common::{keyscan::duplex_matrix::ScanDir, mouse::paw3395, usb::UsbDriverConfig}; - -pub const PAW3395_CONFIG: paw3395::config::Config = paw3395::config::Config { - mode: paw3395::config::HP_MODE, - lift_cutoff: paw3395::config::LiftCutoff::_2mm, -}; - -pub const USB_CONFIG: UsbDriverConfig = { - let mut config = UsbDriverConfig::new(0xc0de, 0xcafe); - - config.manufacturer = Some("Yowkees/nazo6"); - config.product = Some("keyball"); - config.serial_number = Some("12345678"); - config.max_power = 100; - config.max_packet_size_0 = 64; - config.supports_remote_wakeup = true; - - config -}; - -// メモ: Keyballのキースキャン配線 -// -// 左 右 -// -// 論理 0 1 2 3 4 5 6 0 1 2 3 4 5 6 -// 物理 -// [C2R] [ R2C ] [ R2C ] [C2R] -// COL→ 0 1 2 0 1 2 3 COL→ 3 2 1 0 2 1 0 -// ROW↓ ROW↓ -// 0 0 -// 1 1 -// 2 2 -// 3 3 -// 4 4 -pub fn translate_key_position( - hand: Hand, -) -> impl Fn(ScanDir, usize, usize) -> Option<(usize, usize)> { - move |dir: ScanDir, row: usize, col: usize| match (hand, dir) { - (Hand::Left, ScanDir::Col2Row) => { - if col > 2 { - None - } else { - Some((row, col)) - } - } - (Hand::Left, ScanDir::Row2Col) => Some((row, col + 3)), - (Hand::Right, ScanDir::Row2Col) => Some((row, 3 - col)), - (Hand::Right, ScanDir::Col2Row) => { - if col > 2 { - None - } else { - Some((row, 6 - col)) - } - } - } -} - -pub fn get_opts_right( - keymap: &'static Keymap, -) -> RktkOpts { - RktkOpts { - keymap, - hand: Some(Hand::Right), - config: &rktk::config::DYNAMIC_CONFIG_FROM_FILE, - display: DefaultDisplayConfig, - rgb_layout: layout::LayoutRight, - } -} -pub fn get_opts_left( - keymap: &'static Keymap, -) -> RktkOpts { - RktkOpts { - keymap, - hand: Some(Hand::Left), - config: &rktk::config::DYNAMIC_CONFIG_FROM_FILE, - display: DefaultDisplayConfig, - rgb_layout: layout::LayoutLeft, - } -} - -mod layout { - use rktk::config::rgb::{layout::*, layout2d}; - - // Right half RGB layout: - // h +.1 +.2 +.3 +.4 +.5 +.6 +.7 +.8 - // v------------------------------------- - // +1.0 | 4 8 12 16 20 25 - // +0.5 | 5 9 13 17 21 26 - // 0.0 | 6 10 14 18 22 27 - // -0.5 | 2 7 11 15 19 23 28 - // -1.0 | 1 3 24 29 - layout2d!( - pub LayoutRight, - [ - Shape2d::Point(Vec2::new(0.1, -1.0)), - Shape2d::Point(Vec2::new(0.2, -0.5)), - Shape2d::Point(Vec2::new(0.2, -1.0)), - Shape2d::Grid { - start: Vec2::new(0.3, 1.0), - vertical_end: Vec2::new(0.6, 1.0), - horizontal_end: Vec2::new(0.3, -0.5), - horizontal_pixel_count: 4, - vertical_pixel_count: 4, - serpentine: true, - }, - Shape2d::Grid { - start: Vec2::new(0.7, 1.0), - vertical_end: Vec2::new(0.8, 1.0), - horizontal_end: Vec2::new(0.7,-1.0), - horizontal_pixel_count: 5, - vertical_pixel_count: 2, - serpentine: true, - } - ] - ); - - // Left half RGB layout: - // h -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1 - // v------------------------------------- - // +1.0 | 33 28 23 18 13 8 3 - // +0.5 | 34 29 24 19 14 9 4 - // 0.0 | 35 30 25 20 15 10 5 - // -0.5 | 36 31 26 21 16 11 6 1 - // -1.0 | 37 32 27 22 17 12 7 2 - layout2d!( - pub LayoutLeft, - [ - Shape2d::Point(Vec2::new(-0.1, -0.5)), - Shape2d::Point(Vec2::new(-0.1, -1.0)), - Shape2d::Grid { - start: Vec2::new(-0.2, 1.0), - vertical_end: Vec2::new(-0.8, 1.0), - horizontal_end: Vec2::new(-0.2, -1.0), - horizontal_pixel_count: 7, - vertical_pixel_count: 5, - serpentine: true, - }, - ] - ); -} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml b/keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml deleted file mode 100644 index 5d10902a..00000000 --- a/keyboards_old/keyball61/crates/keyball61-nrf/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "thumbv7em-none-eabihf" diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml b/keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml deleted file mode 100644 index a5f5aa9c..00000000 --- a/keyboards_old/keyball61/crates/keyball61-nrf/Cargo.toml +++ /dev/null @@ -1,64 +0,0 @@ -cargo-features = ["per-package-target"] - -[package] -name = "keyball61-nrf" -version.workspace = true -license.workspace = true -edition.workspace = true -authors.workspace = true -repository.workspace = true -forced-target = "thumbv7em-none-eabihf" - -[lib] -path = "src/lib.rs" -test = false -doctest = false -bench = false - -[[bin]] -name = "keyball61" -test = false -doctest = false -bench = false - -[dependencies] -keyball61-common = { path = "../keyball61-common/" } - -rktk = { workspace = true } -rktk-drivers-nrf = { workspace = true } -rktk-drivers-common = { workspace = true } - -embassy-executor = { workspace = true, features = [ - "arch-cortex-m", - "executor-thread", - "executor-interrupt", -] } -embassy-sync = { workspace = true } -embassy-time = { workspace = true } -embassy-embedded-hal = { workspace = true } - -embassy-nrf = { workspace = true, features = [ - "gpiote", - "time-driver-rtc1", - "nrf52840", - "nfc-pins-as-gpio", - "unstable-pac", -] } -nrf-softdevice = { workspace = true, features = [ - "ble-peripheral", - "ble-central", - "critical-section-impl", - "s140", - "nrf52840", -] } -cortex-m = { workspace = true } -cortex-m-rt = { workspace = true } - -once_cell = { workspace = true, features = ["critical-section"] } - -[features] -_check = [] - -usb = ["rktk-drivers-nrf/softdevice"] -ble = ["rktk-drivers-nrf/softdevice-ble"] -default = ["ble", "usb"] diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/build.rs b/keyboards_old/keyball61/crates/keyball61-nrf/build.rs deleted file mode 100644 index cd1a264c..00000000 --- a/keyboards_old/keyball61/crates/keyball61-nrf/build.rs +++ /dev/null @@ -1,34 +0,0 @@ -//! This build script copies the `memory.x` file from the crate root into -//! a directory where the linker can always find it at build time. -//! For many projects this is optional, as the linker always searches the -//! project root directory -- wherever `Cargo.toml` is. However, if you -//! are using a workspace or have a more complicated build setup, this -//! build script becomes required. Additionally, by requesting that -//! Cargo re-run the build script whenever `memory.x` is changed, -//! updating `memory.x` ensures a rebuild of the application with the -//! new memory settings. - -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -fn main() { - // Put `memory.x` in our output directory and ensure it's - // on the linker search path. - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("memory.x")) - .unwrap() - .write_all(include_bytes!("memory.x")) - .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); - - // By default, Cargo will re-run a build script whenever - // any file in the project changes. By specifying `memory.x` - // here, we ensure the build script is only re-run when - // `memory.x` is changed. - println!("cargo:rerun-if-changed=memory.x"); - - println!("cargo:rustc-link-arg-bins=--nmagic"); - println!("cargo:rustc-link-arg-bins=-Tlink.x"); -} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/memory.x b/keyboards_old/keyball61/crates/keyball61-nrf/memory.x deleted file mode 100644 index b2946677..00000000 --- a/keyboards_old/keyball61/crates/keyball61-nrf/memory.x +++ /dev/null @@ -1,7 +0,0 @@ -MEMORY -{ - /* for softdevice v6 */ - FLASH : ORIGIN = 0x00026000, LENGTH = 828K - /* RAM MAX: 256K (0x40000) */ - RAM : ORIGIN = 0x20008000, LENGTH = 200K -} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs b/keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs deleted file mode 100644 index a6592c6b..00000000 --- a/keyboards_old/keyball61/crates/keyball61-nrf/src/bin/keyball61.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![no_std] -#![no_main] -#![feature(impl_trait_in_assoc_type)] - -use embassy_executor::Spawner; -use keyball61_nrf::start; -use rktk::config::keymap::Keymap; - -static KM: Keymap = Keymap::const_default(); - -#[embassy_executor::main] -async fn main(spawner: Spawner) { - start(spawner, &KM).await; -} diff --git a/keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs b/keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs deleted file mode 100644 index d35a23bd..00000000 --- a/keyboards_old/keyball61/crates/keyball61-nrf/src/lib.rs +++ /dev/null @@ -1,235 +0,0 @@ -#![no_std] - -use core::panic::PanicInfo; - -use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; -use embassy_nrf::{ - bind_interrupts, - gpio::{Input, Level, Output, OutputDrive, Pull}, - interrupt::{self, InterruptExt, Priority}, - spim::Spim, - twim::Twim, -}; -use embassy_sync::{blocking_mutex::raw::NoopRawMutex, mutex::Mutex}; -use keyball61_common::*; - -use rktk::{ - config::keymap::Keymap, - drivers::{Drivers, dummy}, - hooks::create_empty_hooks, -}; -use rktk_drivers_common::{ - debounce::EagerDebounceDriver, - display::ssd1306::{self, Ssd1306Driver, prelude::DisplaySize128x32}, - keyscan::{detect_hand_from_matrix, duplex_matrix::DuplexMatrixScanner}, - mouse::pmw3360::Pmw3360, - panic_utils, -}; -use rktk_drivers_nrf::{ - keyscan::flex_pin::NrfFlexPin, rgb::ws2812_pwm::Ws2812Pwm, - split::uart_half_duplex::UartHalfDuplexSplitDriver, system::NrfSystemDriver, -}; - -use nrf_softdevice as _; - -#[cfg(feature = "ble")] -mod ble { - pub use rktk_drivers_nrf::softdevice::ble::SoftdeviceBleReporterBuilder; - pub use rktk_drivers_nrf::softdevice::ble::init_ble_server; -} - -#[cfg(feature = "usb")] -mod usb { - pub use embassy_nrf::usb::vbus_detect::SoftwareVbusDetect; - pub use once_cell::sync::OnceCell; - pub use rktk_drivers_common::usb::*; -} - -#[cfg(feature = "usb")] -static SOFTWARE_VBUS: usb::OnceCell = usb::OnceCell::new(); - -bind_interrupts!(pub struct Irqs { - USBD => embassy_nrf::usb::InterruptHandler; - SPI2 => embassy_nrf::spim::InterruptHandler; - TWISPI0 => embassy_nrf::twim::InterruptHandler; - UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; -}); - -pub async fn start(spawner: embassy_executor::Spawner, keymap: &'static Keymap) { - let mut config = embassy_nrf::config::Config::default(); - config.gpiote_interrupt_priority = Priority::P2; - config.time_interrupt_priority = Priority::P2; - let mut p = embassy_nrf::init(config); - - interrupt::USBD.set_priority(Priority::P2); - interrupt::SPI2.set_priority(Priority::P2); - interrupt::TWISPI0.set_priority(Priority::P2); - interrupt::UARTE0.set_priority(Priority::P2); - - let mut display = Ssd1306Driver::new( - Twim::new( - p.TWISPI0, - Irqs, - p.P0_17, - p.P0_20, - rktk_drivers_nrf::display::ssd1306::recommended_i2c_config(), - &mut [], - ), - DisplaySize128x32, - ssd1306::prelude::DisplayRotation::Rotate90, - ); - - panic_utils::display_message_if_panicked(&mut display).await; - - let spi = Mutex::::new(Spim::new( - p.SPI2, - Irqs, - p.P1_13, - p.P1_11, - p.P0_10, - rktk_drivers_nrf::mouse::pmw3360::recommended_spi_config(), - )); - let ball_spi_device = SpiDevice::new( - &spi, - Output::new( - p.P0_06, - embassy_nrf::gpio::Level::High, - embassy_nrf::gpio::OutputDrive::Standard, - ), - ); - let ball = Pmw3360::new(ball_spi_device); - - let hand = detect_hand_from_matrix( - Output::new(p.P1_00.reborrow(), Level::Low, OutputDrive::Standard), - Input::new(p.P1_15.reborrow(), Pull::Down), - None, - None, - ) - .await - .unwrap(); - let keyscan = DuplexMatrixScanner::<_, _, 5, 4, 5, 7>::new( - [ - NrfFlexPin::new(p.P0_22), // ROW0 - NrfFlexPin::new(p.P0_24), // ROW1 - NrfFlexPin::new(p.P1_00), // ROW2 - NrfFlexPin::new(p.P0_11), // ROW3 - NrfFlexPin::new(p.P1_04), // ROW4 - ], - [ - NrfFlexPin::new(p.P0_31), // COL0 - NrfFlexPin::new(p.P0_29), // COL1 - NrfFlexPin::new(p.P0_02), // COL2 - NrfFlexPin::new(p.P1_15), // COL3 - ], - None, - translate_key_position(hand), - ); - - let split = UartHalfDuplexSplitDriver::new( - p.P0_08, - p.UARTE0, - Irqs, - p.TIMER1, - p.PPI_CH0, - p.PPI_CH1, - p.PPI_GROUP0, - ); - - let rgb = Ws2812Pwm::<1024, _, _>::new(p.PWM0, p.P0_09); - - #[cfg(feature = "ble")] - let sd = rktk_drivers_nrf::softdevice::init_softdevice("keyball61"); - #[cfg(feature = "ble")] - let server = { - let server = ble::init_ble_server( - sd, - rktk_drivers_nrf::softdevice::ble::DeviceInformation { - manufacturer_name: Some("nazo6"), - model_number: Some("100"), - serial_number: Some("100"), - ..Default::default() - }, - ); - rktk_drivers_nrf::softdevice::start_softdevice(spawner, sd); - embassy_time::Timer::after_millis(50).await; - server - }; - #[cfg(feature = "ble")] - let (flash, cache) = rktk_drivers_nrf::softdevice::flash::get_flash(sd); - #[cfg(feature = "ble")] - let (storage, ble_builder) = ( - Some(rktk_drivers_nrf::softdevice::flash::create_storage_driver( - flash, &cache, - )), - Some(ble::SoftdeviceBleReporterBuilder::new( - spawner, - sd, - server, - "keyball61", - flash, - )), - ); - - #[cfg(not(feature = "ble"))] - let (ble_builder, storage) = (dummy::ble_builder(), dummy::storage()); - - let drivers = Drivers { - keyscan, - system: NrfSystemDriver::new(None), - mouse: Some(ball), - usb_builder: { - #[cfg(feature = "usb")] - let usb = { - let vbus = SOFTWARE_VBUS.get_or_init(|| usb::SoftwareVbusDetect::new(true, true)); - let embassy_driver = embassy_nrf::usb::Driver::new(p.USBD, Irqs, vbus); - let mut driver_config = usb::UsbDriverConfig::new(0xc0de, 0xcafe); - driver_config.product = Some("Keyball61"); - let opts = usb::CommonUsbDriverConfig::new(embassy_driver, driver_config); - Some(usb::CommonUsbReporterBuilder::new(opts)) - }; - - #[cfg(not(feature = "usb"))] - let usb = dummy::usb_builder(); - - usb - }, - display: Some(display), - split: Some(split), - rgb: Some(rgb), - storage, - ble_builder, - debounce: Some(EagerDebounceDriver::new( - embassy_time::Duration::from_millis(20), - true, - )), - encoder: dummy::encoder(), - }; - - match hand { - rktk::config::Hand::Left => { - rktk::task::start( - spawner, - drivers, - create_empty_hooks(), - get_opts_left(keymap), - ) - .await; - } - rktk::config::Hand::Right => { - rktk::task::start( - spawner, - drivers, - create_empty_hooks(), - get_opts_right(keymap), - ) - .await; - } - } -} - -#[panic_handler] -fn panic(info: &PanicInfo) -> ! { - cortex_m::interrupt::disable(); - panic_utils::save_panic_info(info); - cortex_m::peripheral::SCB::sys_reset() -} diff --git a/keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml b/keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml deleted file mode 100644 index b10f29d0..00000000 --- a/keyboards_old/keyball61/crates/keyball61-rp/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "thumbv6m-none-eabi" diff --git a/keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml b/keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml deleted file mode 100644 index d958ed7d..00000000 --- a/keyboards_old/keyball61/crates/keyball61-rp/Cargo.toml +++ /dev/null @@ -1,63 +0,0 @@ -[package] -name = "keyball61-rp" -authors.workspace = true -license.workspace = true -version.workspace = true -edition.workspace = true -repository.workspace = true - -[lib] -path = "src/lib.rs" -test = false -doctest = false -bench = false - -[[bin]] -name = "keyball61" -test = false -doctest = false -bench = false - -[dependencies] -keyball61-common = { path = "../keyball61-common/" } - -rktk = { workspace = true, features = ["rrp"] } -rktk-drivers-rp = { workspace = true } -rktk-drivers-common = { workspace = true } - -embassy-executor = { workspace = true, features = [ - "arch-cortex-m", - "executor-thread", - "executor-interrupt", -] } -embassy-sync = { workspace = true } -embassy-time = { workspace = true } -embassy-embedded-hal = { workspace = true } - -embassy-rp = { workspace = true, features = [ - "time-driver", - "critical-section-impl", - "rp2040", -] } - -cortex-m = { workspace = true } -cortex-m-rt = { workspace = true } - -portable-atomic = { version = "1.6.0", features = [ - "unsafe-assume-single-core", -] } - -defmt = { workspace = true, optional = true } - -[features] -_check = [] - -default = ["defmt"] - -defmt = [ - "dep:defmt", - "rktk/defmt", - "rktk-drivers-common/defmt-usb", - "rktk-drivers-common/defmt-timestamp", - "rktk-drivers-rp/defmt", -] diff --git a/keyboards_old/keyball61/crates/keyball61-rp/build.rs b/keyboards_old/keyball61/crates/keyball61-rp/build.rs deleted file mode 100644 index b9382972..00000000 --- a/keyboards_old/keyball61/crates/keyball61-rp/build.rs +++ /dev/null @@ -1,40 +0,0 @@ -//! This build script copies the `memory.x` file from the crate root into -//! a directory where the linker can always find it at build time. -//! For many projects this is optional, as the linker always searches the -//! project root directory -- wherever `Cargo.toml` is. However, if you -//! are using a workspace or have a more complicated build setup, this -//! build script becomes required. Additionally, by requesting that -//! Cargo re-run the build script whenever `memory.x` is changed, -//! updating `memory.x` ensures a rebuild of the application with the -//! new memory settings. - -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -fn main() { - // Put `memory.x` in our output directory and ensure it's - // on the linker search path. - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("memory.x")) - .unwrap() - .write_all(include_bytes!("memory.x")) - .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); - - // By default, Cargo will re-run a build script whenever - // any file in the project changes. By specifying `memory.x` - // here, we ensure the build script is only re-run when - // `memory.x` is changed. - println!("cargo:rerun-if-changed=memory.x"); - - println!("cargo:rustc-link-arg-bins=--nmagic"); - println!("cargo:rustc-link-arg-bins=-Tlink.x"); - println!("cargo:rustc-link-arg-bins=-Tlink-rp.x"); - - println!("cargo:rerun-if-env-changed=CARGO_FEATURE_DEFMT"); - if std::env::var("CARGO_FEATURE_DEFMT").is_ok() { - println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); - } -} diff --git a/keyboards_old/keyball61/crates/keyball61-rp/memory.x b/keyboards_old/keyball61/crates/keyball61-rp/memory.x deleted file mode 100644 index 1e9d0bdd..00000000 --- a/keyboards_old/keyball61/crates/keyball61-rp/memory.x +++ /dev/null @@ -1,18 +0,0 @@ -MEMORY { - BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 - FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 - - /* Pick one of the two options for RAM layout */ - - /* OPTION A: Use all RAM banks as one big block */ - /* Reasonable, unless you are doing something */ - /* really particular with DMA or other concurrent */ - /* access that would benefit from striping */ - RAM : ORIGIN = 0x20000000, LENGTH = 256K - - /* OPTION B: Keep the unstriped sections separate */ - /* RAM: ORIGIN = 0x20000000, LENGTH = 256K */ - /* SCRATCH_A: ORIGIN = 0x20040000, LENGTH = 4K */ - /* SCRATCH_B: ORIGIN = 0x20041000, LENGTH = 4K */ -} - diff --git a/keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs b/keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs deleted file mode 100644 index 35c07ad4..00000000 --- a/keyboards_old/keyball61/crates/keyball61-rp/src/bin/keyball61.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![no_std] -#![no_main] -#![feature(impl_trait_in_assoc_type)] - -use embassy_executor::Spawner; -use keyball61_rp::start; -use rktk::config::keymap::Keymap; - -static KM: Keymap = Keymap::const_default(); - -#[embassy_executor::main] -async fn main(spawner: Spawner) { - start(spawner, &KM).await; -} diff --git a/keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs b/keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs deleted file mode 100644 index 10355503..00000000 --- a/keyboards_old/keyball61/crates/keyball61-rp/src/lib.rs +++ /dev/null @@ -1,155 +0,0 @@ -#![no_std] - -use core::panic::PanicInfo; - -use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; -use embassy_rp::{ - bind_interrupts, - gpio::{Input, Level, Output}, - i2c::I2c, - peripherals::{I2C1, PIO0, PIO1, USB}, - pio::Pio, -}; - -use embassy_sync::{blocking_mutex::raw::NoopRawMutex, mutex::Mutex}; -use rktk::{ - config::keymap::Keymap, - drivers::{Drivers, dummy}, - hooks::create_empty_hooks, -}; -use rktk_drivers_common::{ - display::ssd1306::{self, Ssd1306Driver}, - keyscan::{detect_hand_from_matrix, duplex_matrix::DuplexMatrixScanner}, - mouse::pmw3360::Pmw3360, - panic_utils, - usb::*, -}; -use rktk_drivers_rp::{ - keyscan::flex_pin::RpFlexPin, mouse::pmw3360, rgb::ws2812_pio::Ws2812Pio, - split::pio_half_duplex::PioHalfDuplexSplitDriver, -}; - -use keyball61_common::*; - -bind_interrupts!(pub struct Irqs { - USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; - I2C1_IRQ => embassy_rp::i2c::InterruptHandler; - PIO0_IRQ_0 => embassy_rp::pio::InterruptHandler; - PIO1_IRQ_0 => embassy_rp::pio::InterruptHandler; -}); - -pub async fn start(spawner: embassy_executor::Spawner, keymap: &'static Keymap) { - let mut cfg = embassy_rp::config::Config::default(); - cfg.clocks.sys_clk.div_int = 2; - let mut p = embassy_rp::init(cfg); - - let mut display = Ssd1306Driver::new( - I2c::new_async( - p.I2C1, - p.PIN_3, - p.PIN_2, - Irqs, - rktk_drivers_rp::display::ssd1306::recommended_i2c_config(), - ), - ssd1306::prelude::DisplaySize128x32, - ssd1306::prelude::DisplayRotation::Rotate90, - ); - - panic_utils::display_message_if_panicked(&mut display).await; - - let spi = Mutex::::new(embassy_rp::spi::Spi::new( - p.SPI0, - p.PIN_22, - p.PIN_23, - p.PIN_20, - p.DMA_CH0, - p.DMA_CH1, - pmw3360::recommended_spi_config(), - )); - let ball_spi = SpiDevice::new(&spi, Output::new(p.PIN_21, embassy_rp::gpio::Level::High)); - let ball = Pmw3360::new(ball_spi); - - let hand = detect_hand_from_matrix( - Output::new(p.PIN_6.reborrow(), Level::Low), - Input::new(p.PIN_26.reborrow(), embassy_rp::gpio::Pull::Down), - None, - None, - ) - .await - .unwrap(); - let keyscan = DuplexMatrixScanner::<_, _, 5, 4, 5, 7>::new( - [ - RpFlexPin::new(p.PIN_4), - RpFlexPin::new(p.PIN_5), - RpFlexPin::new(p.PIN_6), - RpFlexPin::new(p.PIN_7), - RpFlexPin::new(p.PIN_8), - ], - [ - RpFlexPin::new(p.PIN_29), - RpFlexPin::new(p.PIN_28), - RpFlexPin::new(p.PIN_27), - RpFlexPin::new(p.PIN_26), - ], - Some(rktk_drivers_common::keyscan::duplex_matrix::OutputWait::Pin), - translate_key_position(hand), - ); - - let usb = { - let embassy_driver = embassy_rp::usb::Driver::new(p.USB, Irqs); - let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); - driver_config.product = Some("Keyball61"); - let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); - Some(CommonUsbReporterBuilder::new(opts)) - }; - - let pio = Pio::new(p.PIO0, Irqs); - let split = PioHalfDuplexSplitDriver::new(pio, p.PIN_1); - - let pio = Pio::new(p.PIO1, Irqs); - let rgb = Ws2812Pio::<'_, 30, _>::new(pio, p.PIN_0, p.DMA_CH2); - - rktk_drivers_rp::init_storage!(storage, p.FLASH, p.DMA_CH3, { 4 * 1024 * 1024 }); - - let drivers = Drivers { - keyscan, - system: rktk_drivers_rp::system::RpSystemDriver, - mouse: Some(ball), - usb_builder: usb, - display: Some(display), - split: Some(split), - rgb: Some(rgb), - ble_builder: dummy::ble_builder(), - storage: Some(storage), - debounce: dummy::debounce(), - encoder: dummy::encoder(), - }; - - match hand { - rktk::config::Hand::Left => { - rktk::task::start( - spawner, - drivers, - create_empty_hooks(), - get_opts_left(keymap), - ) - .await; - } - rktk::config::Hand::Right => { - rktk::task::start( - spawner, - drivers, - create_empty_hooks(), - get_opts_right(keymap), - ) - .await; - } - } -} - -#[panic_handler] -fn panic(info: &PanicInfo) -> ! { - cortex_m::interrupt::disable(); - panic_utils::save_panic_info(info); - cortex_m::peripheral::SCB::sys_reset() -} diff --git a/keyboards_old/keyball61/rktk.json b/keyboards_old/keyball61/rktk.json deleted file mode 100644 index fb0691f7..00000000 --- a/keyboards_old/keyball61/rktk.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/nazo6/rktk/refs/heads/master/crates/rktk/schema.json", - "constant": { - "keyboard": { - "cols": 14, - "rows": 5 - } - }, - "dynamic": { - "rktk": { - "scan_interval_keyboard": 10, - "scan_interval_mouse": 5, - "split_usb_timeout": 1000, - "double_tap_threshold": 500, - "swap_mouse_x_y": true - }, - "keyboard": { - "name": "keyball61", - "layout": { - "keymap": [ - [{ "x": 3 }, "0,3", { "x": 8.5 }, "0,10"], - [{ "y": -0.875, "x": 4 }, "0,4", { "x": 6.5 }, "0,9"], - [{ "y": -0.875, "x": 2 }, "0,2", { "x": 2 }, "0,5", { "x": 4.5 }, "0,8", { "x": 2 }, "0,11"], - [{ "y": -0.65, "c": "#aaaaaa" }, "0,0", { "c": "#cccccc" }, "0,1", { "x": 12.5 }, "0,12", { "c": "#aaaaaa" }, "0,13"], - [{ "y": -0.6, "x": 3, "c": "#cccccc" }, "1,3", { "x": 8.5 }, "1,10"], - [{ "y": -0.875, "x": 4 }, "1,4", { "x": 6.5 }, "1,9"], - [{ "y": -0.875, "x": 2 }, "1,2", { "x": 2 }, "1,5", { "x": 4.5 }, "1,8", { "x": 2 }, "1,11"], - [{ "y": -0.65, "c": "#aaaaaa" }, "1,0", { "c": "#cccccc" }, "1,1", { "x": 12.5 }, "1,12", { "c": "#aaaaaa" }, "1,13"], - [{ "y": -0.6, "x": 3, "c": "#cccccc" }, "2,3", { "x": 8.5 }, "2,10"], - [{ "y": -0.875, "x": 4 }, "2,4", { "x": 6.5 }, "2,9"], - [{ "y": -0.875, "x": 2 }, "2,2", { "x": 2 }, "2,5", { "x": 4.5 }, "2,8", { "x": 2 }, "2,11"], - [{ "y": -0.65, "c": "#aaaaaa" }, "2,0", { "c": "#cccccc" }, "2,1", { "x": 12.5 }, "2,12", { "c": "#aaaaaa" }, "2,13"], - [{ "y": -0.6, "x": 3, "c": "#cccccc" }, "3,3", { "x": 8.5 }, "3,10"], - [{ "y": -0.875, "x": 4 }, "3,4", { "x": 6.5 }, "3,9"], - [{ "y": -0.875, "x": 2 }, "3,2", { "x": 2 }, "3,5", { "x": 4.5 }, "3,8", { "x": 2 }, "3,11"], - [{ "y": -0.85, "x": 6, "c": "#aaaaaa" }, "3,6", { "x": 2.5 }, "3,7"], - [{ "y": -0.8 }, "3,0", { "c": "#cccccc" }, "3,1", { "x": 12.5 }, "3,12", { "c": "#aaaaaa" }, "3,13"], - [{ "y": -0.6, "x": 3 }, "4,3\n\n\n0,0", { "x": 8.5 }, "4,10\n\n\n0,1"], - [{ "y": -0.75, "x": 13.5 }, "4,11\n\n\n0,1"], - [{ "y": -1, "x": 2 }, "4,2\n\n\n0,0"], - [{ "y": -0.75, "x": 4.3 }, "4,4\n\n\n0,0", { "x": 5.9 }, "4,9\n\n\n0,1"], - [{ "y": -0.9 }, "4,0", "4,1", { "x": 12.5 }, "4,12", "4,13"], - [{ "r": 10, "rx": 5.35, "ry": 5.5, "y": -1 }, "4,5"], - [{ "r": 20, "rx": 6.4, "ry": 5.7, "y": -0.99, "x": -0.03 }, "4,6"], - [{ "r": -20, "rx": 10.15, "y": -1, "x": -1.02 }, "4,7"], - [{ "r": -10, "rx": 11.15, "ry": 5.5, "y": -0.98, "x": -1 }, "4,8"] - ] - } - } - } -} diff --git a/keyboards_old/neg/.cargo/config.toml b/keyboards_old/neg/.cargo/config.toml deleted file mode 100644 index 4114a855..00000000 --- a/keyboards_old/neg/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[env] -RKTK_CONFIG_PATH = { value = "rktk.json", relative = true } diff --git a/keyboards_old/neg/crates/neg-nrf/.cargo/config.toml b/keyboards_old/neg/crates/neg-nrf/.cargo/config.toml deleted file mode 100644 index 5d10902a..00000000 --- a/keyboards_old/neg/crates/neg-nrf/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "thumbv7em-none-eabihf" diff --git a/keyboards_old/neg/crates/neg-nrf/Cargo.toml b/keyboards_old/neg/crates/neg-nrf/Cargo.toml deleted file mode 100644 index 126de950..00000000 --- a/keyboards_old/neg/crates/neg-nrf/Cargo.toml +++ /dev/null @@ -1,114 +0,0 @@ -cargo-features = ["per-package-target"] - -[package] -name = "neg-nrf" -authors.workspace = true -license.workspace = true -version.workspace = true -edition.workspace = true -repository.workspace = true - -forced-target = "thumbv7em-none-eabihf" - -[lib] -path = "src/lib.rs" -test = false -doctest = false -bench = false - -[[bin]] -name = "neg_nrf_master" -test = false -doctest = false -bench = false - -[[bin]] -name = "neg_nrf_slave" -test = false -doctest = false -bench = false - -[dependencies] -rktk-drivers-nrf = { workspace = true } -rktk-drivers-common = { workspace = true } -rktk = { workspace = true } -rktk-log = { workspace = true } - -cortex-m = { workspace = true } -cortex-m-rt = { workspace = true } -embassy-embedded-hal = { workspace = true } -embassy-time = { workspace = true } -embassy-executor = { workspace = true, features = [ - "arch-cortex-m", - "executor-thread", - "executor-interrupt", -] } -embassy-nrf = { workspace = true, features = [ - "gpiote", - "time-driver-rtc1", - "nrf52840", - "nfc-pins-as-gpio", -] } -embassy-sync = { workspace = true } - -once_cell = { version = "1.19.0", default-features = false, features = [ - "atomic-polyfill", -] } -static_cell = { workspace = true } -cfg-if = "1.0.0" - -log = { workspace = true, optional = true } -defmt = { workspace = true, optional = true } - -# alloc -embedded-alloc = { version = "0.6.0", optional = true } - -# sd -nrf-softdevice = { workspace = true, features = [ - "critical-section-impl", - "s140", - "nrf52840", -], optional = true } - -# trouble -rand_chacha = { version = "0.3", default-features = false, optional = true } -nrf-sdc = { workspace = true, optional = true, features = ["nrf52840"] } - -[features] -_check = ["trouble", "sd", "log", "left", "pmw3360"] - -default = ["rrp"] - -alloc = ["dep:embedded-alloc", "rktk/alloc"] -right = [] -left = [] - -rrp = ["rktk/rrp"] - -defmt = [ - "dep:defmt", - "rktk/defmt", - "rktk-log/defmt", - "rktk-drivers-common/defmt-usb", - "rktk-drivers-common/defmt-timestamp", - "rktk-drivers-nrf/defmt", -] -log = [ - "dep:log", - "rktk/log", - "rktk-log/log", - "rktk-drivers-common/log", - "rktk-drivers-nrf/log", -] - -sd = ["rktk-drivers-nrf/softdevice-ble", "dep:nrf-softdevice"] -trouble = [ - "dep:rand_chacha", - "dep:nrf-sdc", - "rktk-drivers-nrf/sdc", - "rktk-drivers-common/reporter-trouble", -] -cs-impl = ["cortex-m/critical-section-single-core"] - -paw3395 = [] -pmw3360 = [] diff --git a/keyboards_old/neg/crates/neg-nrf/build.rs b/keyboards_old/neg/crates/neg-nrf/build.rs deleted file mode 100644 index b1d410ae..00000000 --- a/keyboards_old/neg/crates/neg-nrf/build.rs +++ /dev/null @@ -1,39 +0,0 @@ -//! This build script copies the `memory.x` file from the crate root into -//! a directory where the linker can always find it at build time. -//! For many projects this is optional, as the linker always searches the -//! project root directory -- wherever `Cargo.toml` is. However, if you -//! are using a workspace or have a more complicated build setup, this -//! build script becomes required. Additionally, by requesting that -//! Cargo re-run the build script whenever `memory.x` is changed, -//! updating `memory.x` ensures a rebuild of the application with the -//! new memory settings. - -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -fn main() { - // Put `memory.x` in our output directory and ensure it's - // on the linker search path. - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("memory.x")) - .unwrap() - .write_all(include_bytes!("memory.x")) - .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); - - // By default, Cargo will re-run a build script whenever - // any file in the project changes. By specifying `memory.x` - // here, we ensure the build script is only re-run when - // `memory.x` is changed. - println!("cargo:rerun-if-changed=memory.x"); - - println!("cargo:rustc-link-arg-bins=--nmagic"); - println!("cargo:rustc-link-arg-bins=-Tlink.x"); - - println!("cargo:rerun-if-env-changed=CARGO_FEATURE_DEFMT"); - if std::env::var("CARGO_FEATURE_DEFMT").is_ok() { - println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); - } -} diff --git a/keyboards_old/neg/crates/neg-nrf/memory.x b/keyboards_old/neg/crates/neg-nrf/memory.x deleted file mode 100644 index 51ce864b..00000000 --- a/keyboards_old/neg/crates/neg-nrf/memory.x +++ /dev/null @@ -1,7 +0,0 @@ -MEMORY -{ - /* for softdevice v6 */ - FLASH : ORIGIN = 0x00026000, LENGTH = 828K - /* RAM MAX: 256K (0x40000) */ - RAM : ORIGIN = 0x20008000, LENGTH = 0x38000 -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs b/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs deleted file mode 100644 index 498d4526..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_master.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![no_std] -#![no_main] -#![feature(impl_trait_in_assoc_type)] - -use embassy_executor::Spawner; -use neg_nrf::{init_peri, start_master}; -use rktk::{config::keymap::Keymap, hooks::create_empty_hooks}; - -// Empty keymap for demo. -// Please replace with your own keymap configuration. -static KM: Keymap = Keymap::const_default(); - -#[embassy_executor::main] -async fn main(spawner: Spawner) { - let p = init_peri(); - start_master(spawner, p, create_empty_hooks(), &KM).await; -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs b/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs deleted file mode 100644 index 45e7a7ae..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/bin/neg_nrf_slave.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![no_std] -#![no_main] -#![feature(impl_trait_in_assoc_type)] - -use embassy_executor::Spawner; -use neg_nrf::{init_peri, start_slave}; -use rktk::hooks::create_empty_hooks; - -#[embassy_executor::main] -async fn main(spawner: Spawner) { - let p = init_peri(); - start_slave(spawner, p, create_empty_hooks()).await; -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/common.rs b/keyboards_old/neg/crates/neg-nrf/src/common.rs deleted file mode 100644 index 7df0ebb0..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/common.rs +++ /dev/null @@ -1,72 +0,0 @@ -pub fn init_peri() -> Peripherals { - let p = { - let config = { - let mut config = embassy_nrf::config::Config::default(); - #[cfg(feature = "sd")] - { - use embassy_nrf::interrupt::Priority; - config.gpiote_interrupt_priority = Priority::P2; - config.time_interrupt_priority = Priority::P2; - } - config.lfclk_source = embassy_nrf::config::LfclkSource::ExternalXtal; - config.hfclk_source = embassy_nrf::config::HfclkSource::ExternalXtal; - - config - }; - embassy_nrf::init(config) - }; - - #[cfg(feature = "sd")] - { - use embassy_nrf::interrupt::{self, *}; - interrupt::USBD.set_priority(Priority::P2); - interrupt::SPI2.set_priority(Priority::P2); - interrupt::SPIM3.set_priority(Priority::P2); - interrupt::UARTE0.set_priority(Priority::P2); - } - - #[cfg(feature = "alloc")] - { - use core::mem::MaybeUninit; - const HEAP_SIZE: usize = 32768; - static mut HEAP_MEM: [MaybeUninit; HEAP_SIZE] = [MaybeUninit::uninit(); HEAP_SIZE]; - unsafe { crate::HEAP.init(&raw mut HEAP_MEM as usize, HEAP_SIZE) } - } - - p -} - -use embassy_nrf::Peripherals; -#[cfg(feature = "sd")] -pub(crate) use sd::init_sd; -#[cfg(feature = "sd")] -mod sd { - use rktk_drivers_nrf::softdevice::ble::SoftdeviceBleReporterBuilder; - use rktk_drivers_nrf::softdevice::flash::SharedFlash; - use rktk_drivers_nrf::softdevice::{ble::init_ble_server, flash::get_flash, init_softdevice}; - - pub async fn init_sd( - spawner: embassy_executor::Spawner, - ) -> (SoftdeviceBleReporterBuilder, &'static SharedFlash) { - let sd = init_softdevice("negL"); - - let server = init_ble_server( - sd, - rktk_drivers_nrf::softdevice::ble::DeviceInformation { - manufacturer_name: Some("nazo6"), - model_number: Some("100"), - serial_number: Some("100"), - ..Default::default() - }, - ); - let (flash, _cache) = get_flash(sd); - - rktk_drivers_nrf::softdevice::start_softdevice(spawner, sd); - embassy_time::Timer::after_millis(200).await; - - ( - SoftdeviceBleReporterBuilder::new(spawner, sd, server, "negL", flash), - flash, - ) - } -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/drivers.rs b/keyboards_old/neg/crates/neg-nrf/src/drivers.rs deleted file mode 100644 index 4c7328e2..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/drivers.rs +++ /dev/null @@ -1,173 +0,0 @@ -#[macro_export] -macro_rules! create_spi { - ($p:ident) => {{ - use embassy_nrf::gpio::OutputDrive; - use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex; - use embassy_sync::mutex::Mutex; - use rktk_drivers_nrf::mouse::paw3395; - - let mut spi_config = paw3395::recommended_spi_config(); - spi_config.sck_drive = OutputDrive::Standard; - spi_config.mosi_drive = OutputDrive::Standard; - spi_config.frequency = embassy_nrf::spim::Frequency::K250; - - Mutex::::new(embassy_nrf::spim::Spim::new( - $p.SPI2, Irqs, $p.P0_17, $p.P0_22, $p.P0_20, spi_config, - )) - }}; -} - -#[macro_export] -macro_rules! driver_split { - ($p:ident) => {{ - use embassy_nrf::buffered_uarte::BufferedUarte; - use rktk::singleton; - use rktk_drivers_nrf::split::uart_full_duplex::UartFullDuplexSplitDriver; - - let uarte_config = embassy_nrf::uarte::Config::default(); - - let (sp1, sp2) = ($p.P0_08, $p.P0_06); - - UartFullDuplexSplitDriver::new(BufferedUarte::new( - $p.UARTE0, - $p.TIMER1, - $p.PPI_CH0, - $p.PPI_CH1, - $p.PPI_GROUP0, - sp1, - sp2, - Irqs, - uarte_config, - singleton!([0; 256], [u8; 256]), - singleton!([0; 256], [u8; 256]), - )) - }}; -} - -#[macro_export] -macro_rules! driver_display { - ($p:ident) => {{ - use embassy_nrf::twim::Twim; - use rktk_drivers_common::display::ssd1306; - use rktk_drivers_common::display::ssd1306::Ssd1306Driver; - use rktk_drivers_common::panic_utils; - - let mut display = Ssd1306Driver::new( - Twim::new( - $p.TWISPI0, - Irqs, - $p.P1_00, - $p.P0_11, - rktk_drivers_nrf::display::ssd1306::recommended_i2c_config(), - &mut [], - ), - ssd1306::prelude::DisplaySize128x32, - ssd1306::prelude::DisplayRotation::Rotate90, - ); - panic_utils::display_message_if_panicked(&mut display).await; - display - }}; -} - -#[macro_export] -macro_rules! driver_mouse { - ($p:ident, $spi:ident) => {{ - use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; - use embassy_nrf::gpio::{Output, OutputDrive}; - #[cfg(feature = "paw3395")] - use rktk_drivers_common::mouse::paw3395::Paw3395; - #[cfg(feature = "pmw3360")] - use rktk_drivers_common::mouse::pmw3360::Pmw3360; - - let ball_cs = Output::new( - $p.P1_06, - embassy_nrf::gpio::Level::High, - OutputDrive::Standard, - ); - let ball_spi_device = SpiDevice::new(&$spi, ball_cs); - - #[cfg(feature = "paw3395")] - { - Paw3395::new(ball_spi_device, misc::PAW3395_CONFIG) - } - #[cfg(feature = "pmw3360")] - { - Pmw3360::new(ball_spi_device) - } - }}; -} - -#[macro_export] -macro_rules! driver_keyscan { - ($p:ident, $spi:ident) => {{ - use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice; - use embassy_nrf::gpio::{Input, Output, OutputDrive, Pull}; - use rktk_drivers_common::keyscan::shift_register_matrix::ShiftRegisterMatrix; - - let shift_register_cs = Output::new( - $p.P1_04, - embassy_nrf::gpio::Level::High, - OutputDrive::Standard, - ); - let shift_register_spi_device = SpiDevice::new(&$spi, shift_register_cs); - - ShiftRegisterMatrix::<_, _, _, 8, 5, 5, 8>::new( - shift_register_spi_device, - [ - Input::new($p.P1_15, Pull::Down), // ROW0 - Input::new($p.P1_13, Pull::Down), // ROW1 - Input::new($p.P1_11, Pull::Down), // ROW2 - Input::new($p.P0_10, Pull::Down), // ROW3 - Input::new($p.P0_09, Pull::Down), // ROW4 - ], - misc::translate_key_position, - None, - ) - }}; -} - -#[macro_export] -macro_rules! driver_encoder { - ($p:ident) => {{ - use embassy_nrf::gpio::{Input, Pull}; - use rktk_drivers_common::encoder::GeneralEncoder; - - GeneralEncoder::new([( - Input::new($p.P0_02, Pull::Down), - Input::new($p.P0_29, Pull::Down), - )]) - }}; -} - -#[macro_export] -macro_rules! driver_system { - ($p:ident) => {{ - use embassy_nrf::gpio::{Level, Output, OutputDrive}; - use rktk_drivers_nrf::system::NrfSystemDriver; - - let vcc_cutoff = ( - Output::new($p.P0_13, Level::High, OutputDrive::Standard), - Level::Low, - ); - NrfSystemDriver::new(Some(vcc_cutoff)) - }}; -} - -#[macro_export] -macro_rules! driver_debounce { - () => {{ - rktk_drivers_common::debounce::EagerDebounceDriver::new( - embassy_time::Duration::from_millis(10), - true, - ) - }}; -} - -#[macro_export] -macro_rules! driver_rgb { - ($p:ident) => {{ - use rktk_drivers_nrf::rgb::ws2812_pwm::Ws2812Pwm; - - Ws2812Pwm::<1024, _, _>::new($p.PWM0, $p.P0_24) - }}; -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/lib.rs b/keyboards_old/neg/crates/neg-nrf/src/lib.rs deleted file mode 100644 index 4c6672fb..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/lib.rs +++ /dev/null @@ -1,61 +0,0 @@ -#![no_std] - -use core::panic::PanicInfo; - -use embassy_nrf::bind_interrupts; -use rktk_drivers_common::panic_utils; - -mod common; -mod drivers; -mod master; -mod misc; -mod slave; - -// ===== Global linkages ===== - -#[cfg(feature = "alloc")] -extern crate alloc; -#[cfg(feature = "alloc")] -use embedded_alloc::LlffHeap as Heap; - -#[cfg(feature = "alloc")] -#[global_allocator] -static HEAP: Heap = Heap::empty(); - -#[cfg(feature = "sd")] -use nrf_softdevice as _; - -#[panic_handler] -fn panic(info: &PanicInfo) -> ! { - cortex_m::interrupt::disable(); - panic_utils::save_panic_info(info); - cortex_m::peripheral::SCB::sys_reset() -} - -// ===== Irq definitions ===== - -#[cfg(not(feature = "trouble"))] -bind_interrupts!(pub struct Irqs { - USBD => embassy_nrf::usb::InterruptHandler; - SPI2 => embassy_nrf::spim::InterruptHandler; - TWISPI0 => embassy_nrf::twim::InterruptHandler; - UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; -}); - -#[cfg(feature = "trouble")] -bind_interrupts!(pub struct Irqs { - USBD => embassy_nrf::usb::InterruptHandler; - SPI2 => embassy_nrf::spim::InterruptHandler; - TWISPI0 => embassy_nrf::twim::InterruptHandler; - UARTE0 => embassy_nrf::buffered_uarte::InterruptHandler; - RNG => embassy_nrf::rng::InterruptHandler; - EGU0_SWI0 => nrf_sdc::mpsl::LowPrioInterruptHandler; - CLOCK_POWER => nrf_sdc::mpsl::ClockInterruptHandler; - RADIO => nrf_sdc::mpsl::HighPrioInterruptHandler; - TIMER0 => nrf_sdc::mpsl::HighPrioInterruptHandler; - RTC0 => nrf_sdc::mpsl::HighPrioInterruptHandler; -}); - -pub use common::init_peri; -pub use master::start_master; -pub use slave::start_slave; diff --git a/keyboards_old/neg/crates/neg-nrf/src/master.rs b/keyboards_old/neg/crates/neg-nrf/src/master.rs deleted file mode 100644 index 9c3c21d9..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/master.rs +++ /dev/null @@ -1,93 +0,0 @@ -use embassy_nrf::usb::vbus_detect::SoftwareVbusDetect; -use once_cell::sync::OnceCell; -use rktk::{ - config::keymap::Keymap, - drivers::{Drivers, dummy}, - hooks::{Hooks, interface::*}, -}; -use rktk_drivers_common::usb::{CommonUsbDriverConfig, CommonUsbReporterBuilder, UsbDriverConfig}; - -use crate::*; - -static SOFTWARE_VBUS: OnceCell = OnceCell::new(); -pub async fn start_master( - spawner: embassy_executor::Spawner, - p: embassy_nrf::Peripherals, - hooks: Hooks, - keymap: &'static Keymap, -) { - // create shared SPI bus - // NOTE: This must be done as soon as possible, otherwise the SPI device will start acting strangely. - let spi = create_spi!(p); - - #[cfg(feature = "trouble")] - let trouble_ble_reporter = { - use embassy_nrf::mode::Async; - use rand_chacha::{ChaCha12Rng, rand_core::SeedableRng as _}; - use rktk::singleton; - use rktk_drivers_common::trouble::reporter::{ - TroubleReporterBuilder, TroubleReporterConfig, - }; - use rktk_drivers_nrf::init_sdc; - - let mut rng = singleton!( - embassy_nrf::rng::Rng::new(p.RNG, Irqs), - embassy_nrf::rng::Rng - ); - let rng_2 = singleton!(ChaCha12Rng::from_rng(&mut rng).unwrap(), ChaCha12Rng); - init_sdc!( - spawner, - sdc, Irqs, rng, - mpsl: (p.RTC0, p.TIMER0, p.TEMP, p.PPI_CH19, p.PPI_CH30, p.PPI_CH31), - sdc: (p.PPI_CH17, p.PPI_CH18, p.PPI_CH20, p.PPI_CH21, p.PPI_CH22, p.PPI_CH23, p.PPI_CH24, p.PPI_CH25, p.PPI_CH26, p.PPI_CH27, p.PPI_CH28, p.PPI_CH29), - mtu: 72, - txq: 3, - rxq: 3 - ); - TroubleReporterBuilder::<_, _, 1, 5, 72>::new( - sdc.unwrap(), - rng_2, - TroubleReporterConfig { - advertise_name: "negL Trouble", - peripheral_config: None, - }, - ) - }; - - cfg_if::cfg_if! { - if #[cfg(feature = "sd")] { - let ble_builder = Some(crate::common::init_sd(spawner).await.0); - } else if #[cfg(feature = "trouble")] { - let ble_builder = Some(trouble_ble_reporter); - } else { - let ble_builder = dummy::ble_builder(); - } - } - - let usb = { - let vbus = SOFTWARE_VBUS.get_or_init(|| SoftwareVbusDetect::new(true, true)); - let embassy_driver = embassy_nrf::usb::Driver::new(p.USBD, Irqs, vbus); - let mut driver_config = UsbDriverConfig::new(0xc0de, 0xcafe); - driver_config.product = Some("negL"); - let opts = CommonUsbDriverConfig::new(embassy_driver, driver_config); - Some(CommonUsbReporterBuilder::new(opts)) - }; - - // let storage = rktk_drivers_nrf::softdevice::flash::create_storage_driver(flash, &cache); - - let drivers = Drivers { - keyscan: driver_keyscan!(p, spi), - system: driver_system!(p), - mouse: Some(driver_mouse!(p, spi)), - usb_builder: usb, - display: Some(driver_display!(p)), - split: Some(driver_split!(p)), - rgb: Some(driver_rgb!(p)), - storage: dummy::storage(), - ble_builder, - debounce: Some(driver_debounce!()), - encoder: Some(driver_encoder!(p)), - }; - - rktk::task::start(spawner, drivers, hooks, misc::get_opts(keymap)).await; -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/misc.rs b/keyboards_old/neg/crates/neg-nrf/src/misc.rs deleted file mode 100644 index d5db617b..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/misc.rs +++ /dev/null @@ -1,110 +0,0 @@ -use rktk::{ - config::{Hand, RktkOpts, keymap::Keymap}, - task::display::default_display::DefaultDisplayConfig, -}; -use rktk_drivers_common::mouse::paw3395; - -pub const PAW3395_CONFIG: paw3395::config::Config = paw3395::config::Config { - mode: paw3395::config::HP_MODE, - lift_cutoff: paw3395::config::LiftCutoff::_2mm, -}; - -pub fn translate_key_position(row: usize, col: usize) -> Option<(usize, usize)> { - #[cfg(feature = "left")] - { - Some((row, 7 - col)) - } - - #[cfg(feature = "right")] - { - Some((row, col)) - } -} - -pub fn get_opts(keymap: &'static Keymap) -> RktkOpts { - RktkOpts { - keymap, - hand: Some(HAND), - config: &rktk::config::DYNAMIC_CONFIG_FROM_FILE, - display: DefaultDisplayConfig, - rgb_layout: Layout, - } -} - -pub const HAND: Hand = { - #[cfg(feature = "left")] - { - Hand::Left - } - #[cfg(feature = "right")] - { - Hand::Right - } -}; - -#[cfg(feature = "left")] -pub use layout::LayoutLeft as Layout; - -#[cfg(feature = "right")] -pub use layout::LayoutRight as Layout; - -mod layout { - use rktk::config::rgb::{layout::*, layout2d}; - - // Right half RGB layout: - // h +.1 +.2 +.3 +.4 +.5 +.6 +.7 +.8 - // v------------------------------------- - // +1.0 | 4 8 12 16 20 25 - // +0.5 | 5 9 13 17 21 26 - // 0.0 | 6 10 14 18 22 27 - // -0.5 | 2 7 11 15 19 23 28 - // -1.0 | 1 3 24 29 - layout2d!( - pub LayoutRight, - [ - Shape2d::Point(Vec2::new(0.1, -1.0)), - Shape2d::Point(Vec2::new(0.2, -0.5)), - Shape2d::Point(Vec2::new(0.2, -1.0)), - Shape2d::Grid { - start: Vec2::new(0.3, 1.0), - vertical_end: Vec2::new(0.6, 1.0), - horizontal_end: Vec2::new(0.3, -0.5), - horizontal_pixel_count: 4, - vertical_pixel_count: 4, - serpentine: true, - }, - Shape2d::Grid { - start: Vec2::new(0.7, 1.0), - vertical_end: Vec2::new(0.8, 1.0), - horizontal_end: Vec2::new(0.7,-1.0), - horizontal_pixel_count: 5, - vertical_pixel_count: 2, - serpentine: true, - } - ] - ); - - // Left half RGB layout: - // h -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1 - // v------------------------------------- - // +1.0 | 33 28 23 18 13 8 3 - // +0.5 | 34 29 24 19 14 9 4 - // 0.0 | 35 30 25 20 15 10 5 - // -0.5 | 36 31 26 21 16 11 6 1 - // -1.0 | 37 32 27 22 17 12 7 2 - layout2d!( - pub LayoutLeft, - [ - Shape2d::Point(Vec2::new(-0.1, -0.5)), - Shape2d::Point(Vec2::new(-0.1, -1.0)), - Shape2d::Grid { - start: Vec2::new(-0.2, 1.0), - vertical_end: Vec2::new(-0.8, 1.0), - horizontal_end: Vec2::new(-0.2, -1.0), - horizontal_pixel_count: 7, - vertical_pixel_count: 5, - serpentine: true, - }, - ] - ); -} diff --git a/keyboards_old/neg/crates/neg-nrf/src/slave.rs b/keyboards_old/neg/crates/neg-nrf/src/slave.rs deleted file mode 100644 index 17b32371..00000000 --- a/keyboards_old/neg/crates/neg-nrf/src/slave.rs +++ /dev/null @@ -1,38 +0,0 @@ -use embassy_nrf::Peripherals; -use rktk::{ - config::keymap::Keymap, - drivers::{Drivers, dummy}, - hooks::{Hooks, interface::*}, -}; - -#[cfg(feature = "sd")] -use crate::common::init_sd; -use crate::*; - -const EMPTY_KM: Keymap = Keymap::const_default(); - -pub async fn start_slave( - spawner: embassy_executor::Spawner, - p: Peripherals, - hooks: Hooks, -) { - #[cfg(feature = "sd")] - let _ = init_sd(spawner).await; - - let spi = create_spi!(p); - - let drivers = Drivers { - keyscan: driver_keyscan!(p, spi), - system: driver_system!(p), - mouse: Some(driver_mouse!(p, spi)), - usb_builder: dummy::usb_builder(), - display: Some(driver_display!(p)), - split: Some(driver_split!(p)), - rgb: Some(driver_rgb!(p)), - storage: dummy::storage(), - ble_builder: dummy::ble_builder(), - debounce: Some(driver_debounce!()), - encoder: Some(driver_encoder!(p)), - }; - rktk::task::start(spawner, drivers, hooks, misc::get_opts(&EMPTY_KM)).await; -} diff --git a/keyboards_old/neg/rktk.json b/keyboards_old/neg/rktk.json deleted file mode 100644 index dd5c8f29..00000000 --- a/keyboards_old/neg/rktk.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "../../../rktk/crates/rktk/schema.json", - "constant": { - "keyboard": { - "cols": 16, - "rows": 5, - "encoder_count": 1 - }, - "key_manager": { - "combo_key_max_definitions": 0, - "combo_key_max_sources": 2, - "oneshot_state_size": 5, - "tap_dance_max_definitions": 1, - "tap_dance_max_repeats": 4 - } - }, - "dynamic": { - "rktk": { - "scan_interval_keyboard": 5, - "scan_interval_mouse": 5, - "display_timeout": 100000, - "swap_mouse_x_y": true - }, - "key_manager": { - "mouse": { - "auto_mouse_threshold": 10 - } - }, - "keyboard": { - "name": "negL", - "layout": { - "keymap": [ - [{ "x": 2 }, "0,2", "0,3", "0,4", "0,5", { "x": 5 }, "0,10", "0,11", "0,12", "0,13"], - [{ "y": -0.75 }, "0,0", "0,1", { "x": 13 }, "0,14", "0,15"], - [{ "y": -0.25, "x": 2 }, "1,2", "1,3", "1,4", "1,5", { "x": 5 }, "1,10", "1,11", "1,12", "1,13"], - [{ "y": -0.75 }, "1,0", "1,1", { "x": 13 }, "1,14", "1,15"], - [{ "y": -0.25, "x": 2 }, "2,2", "2,3", "2,4", "2,5", { "x": 5 }, "2,10", "2,11", "2,12", "2,13"], - [{ "y": -0.75 }, "2,0", "2,1", { "x": 13 }, "2,14", "2,15"], - [{ "y": -0.25, "x": 2 }, "3,2", "3,3", "3,4", "3,5", { "x": 5 }, "3,10", "3,11", "3,12", "3,13"], - [{ "y": -0.9, "x": 6 }, "3,6", { "x": 3 }, "3,9"], - [{ "y": -0.85 }, "3,0", "3,1", { "x": 13 }, "3,14", "3,15"], - [{ "y": -0.25, "x": 2 }, "4,2", "4,3"], - [{ "y": -0.75 }, "4,0", "4,1", { "x": 2.1 }, "4,4", { "x": 9.9 }, "4,14", "4,15"], - [{ "r": 5, "rx": 5.75, "ry": 4.75, "y": -0.4, "x": -0.55 }, "4,5"], - [{ "r": 10, "rx": 6.75, "ry": 5, "y": -0.5, "x": -0.5 }, "4,6"], - [{ "r": 15, "rx": 7.75, "ry": 5.5, "y": -0.75, "x": -0.5 }, "4,7"], - [{ "r": -15, "rx": 9.25, "y": -0.75, "x": -0.25 }, "4,8"], - [{ "r": -10, "rx": 10.25, "ry": 5, "y": -0.5, "x": -0.25 }, "4,9"], - [{ "r": -5, "rx": 11, "y": -0.65, "x": 0.1 }, "4,10"] - ] - } - } - } -}