diff --git a/Cargo.lock b/Cargo.lock index 5069cb4..fd99808 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,6 +97,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + [[package]] name = "byteorder" version = "1.4.3" @@ -234,7 +240,7 @@ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "embassy-cortex-m" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", @@ -249,7 +255,7 @@ dependencies = [ [[package]] name = "embassy-embedded-hal" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "embassy-sync", "embedded-hal 0.2.7", @@ -257,13 +263,13 @@ dependencies = [ "embedded-hal-async", "embedded-storage", "embedded-storage-async", - "nb 1.0.0", + "nb 1.1.0", ] [[package]] name = "embassy-executor" version = "0.1.1" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", @@ -278,7 +284,7 @@ dependencies = [ [[package]] name = "embassy-futures" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "log", ] @@ -286,7 +292,7 @@ dependencies = [ [[package]] name = "embassy-hal-common" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "num-traits", ] @@ -294,7 +300,7 @@ dependencies = [ [[package]] name = "embassy-macros" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "darling", "proc-macro2", @@ -305,12 +311,12 @@ dependencies = [ [[package]] name = "embassy-net-driver" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" [[package]] name = "embassy-net-driver-channel" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "embassy-futures", "embassy-net-driver", @@ -320,7 +326,7 @@ dependencies = [ [[package]] name = "embassy-rp" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", @@ -343,7 +349,7 @@ dependencies = [ "embedded-storage", "futures", "log", - "nb 1.0.0", + "nb 1.1.0", "paste", "pio", "pio-proc", @@ -354,7 +360,7 @@ dependencies = [ [[package]] name = "embassy-sync" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "cfg-if", "critical-section", @@ -367,7 +373,7 @@ dependencies = [ [[package]] name = "embassy-time" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", @@ -382,7 +388,7 @@ dependencies = [ [[package]] name = "embassy-usb" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "embassy-futures", "embassy-net-driver-channel", @@ -396,12 +402,12 @@ dependencies = [ [[package]] name = "embassy-usb-driver" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" [[package]] name = "embassy-usb-logger" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy.git#bf013be9ba51c50ff6ad16b38dede08387b4e117" +source = "git+https://github.com/embassy-rs/embassy.git#055597063f2d3f1156a9f8076c601dd300d85542" dependencies = [ "embassy-futures", "embassy-sync", @@ -444,7 +450,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e0760ec0a3bf76859d5e33f39542af103f157d5b2ecfb00ace56dd461472e3a" dependencies = [ "embedded-hal 1.0.0-alpha.9", - "nb 1.0.0", + "nb 1.1.0", ] [[package]] @@ -461,9 +467,9 @@ checksum = "156d7a2fdd98ebbf9ae579cbceca3058cff946e13f8e17b90e3511db0508c723" [[package]] name = "embedded-storage-async" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ff04af74e47e9bb4315bd7aa2b01f3d1b05f33c03a6c4e9c3b20e9ce9cd8d79" +checksum = "052997a894670d0cde873faa7405bc98e2fd29f569d2acd568561bc1c396b35a" dependencies = [ "embedded-storage", ] @@ -659,7 +665,9 @@ dependencies = [ "embedded-io", "futures", "log", - "panic-halt", + "pio", + "pio-proc", + "smart-leds", "static_cell", "usb-device", "usbd-hid", @@ -699,9 +707,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "lock_api" @@ -734,14 +742,14 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" dependencies = [ - "nb 1.0.0", + "nb 1.1.0", ] [[package]] name = "nb" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" [[package]] name = "new_debug_unreachable" @@ -784,12 +792,6 @@ version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" -[[package]] -name = "panic-halt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812" - [[package]] name = "parking_lot" version = "0.12.1" @@ -815,9 +817,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "petgraph" @@ -985,6 +987,15 @@ version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +[[package]] +name = "rgb" +version = "0.8.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +dependencies = [ + "bytemuck", +] + [[package]] name = "rp2040-pac2" version = "0.1.0" @@ -1014,9 +1025,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "scopeguard" @@ -1047,9 +1058,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" [[package]] name = "siphasher" @@ -1063,6 +1074,24 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +[[package]] +name = "smart-leds" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38dd45fa275f70b4110eac5f5182611ad384f88bb22b68b9a9c3cafd7015290b" +dependencies = [ + "smart-leds-trait", +] + +[[package]] +name = "smart-leds-trait" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf6d833fa93f16a1c1874e62c2aebe8567e5bdd436d59bf543ed258b6f7a8e3" +dependencies = [ + "rgb", +] + [[package]] name = "spin" version = "0.9.5" @@ -1099,9 +1128,9 @@ dependencies = [ [[package]] name = "string_cache" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d69e88b23f23030bf4d0e9ca7b07434f70e1c1f4d3ca7e93ce958b373654d9f" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", @@ -1149,18 +1178,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", @@ -1178,9 +1207,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-width" diff --git a/Cargo.toml b/Cargo.toml index e59a319..72ad90d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" cortex-m = "0.7.6" cortex-m-rt = "0.7" embedded-hal ="0.2.5" -panic-halt= "0.2.0" +#panic-halt= "0.2.0" usb-device = "*" usbd-hid = "0.6.1" static_cell = "1.0.0" @@ -25,3 +25,10 @@ embassy-usb-driver = { git = "https://github.com/embassy-rs/embassy.git", featur embassy-rp = { git = "https://github.com/embassy-rs/embassy.git", features = ["log", "nightly", "unstable-traits", "unstable-pac", "time-driver", "pio", "critical-section-impl"] } log = "0.4.17" +pio = "0.2.1" +pio-proc = "0.2.1" +smart-leds = "0.3.0" + +[features] +default = ["n-key-rollover"] +n-key-rollover=[] diff --git a/src/keyboard.rs b/src/keyboard.rs index d9106b4..d911953 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -1,6 +1,8 @@ use core::sync::atomic::{AtomicBool, Ordering}; +use embassy_rp::gpio::{AnyPin, Input, Pin, Pull}; use embassy_time::{Duration, Timer}; +use log::info; pub const ROWS: usize = 3; pub const COLS: usize = 5; @@ -62,6 +64,18 @@ pub enum Button { Key { keycode: u8 }, } +#[embassy_executor::task(pool_size = 20)] +pub async fn monitor_switch(pin: AnyPin) -> ! { + let pin_nr = pin.pin(); + let mut pin = Input::new(pin, Pull::Up); + loop { + pin.wait_for_low().await; + info!("pin {pin_nr} low"); + pin.wait_for_high().await; + info!("pin {pin_nr} high"); + } +} + #[allow(dead_code)] impl Button { pub const fn key(keycode: u8) -> Self { @@ -120,68 +134,103 @@ impl Button { pub const KEY_RALT: Button = Button::key(0xE6); } -pub fn letter_to_key(c: char) -> Option