From 5ff9fd0f8a2e49708d930272c27fdd8102381268 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Tue, 16 Mar 2021 13:06:55 +0100 Subject: [PATCH 1/3] move dk BSP to nrf52840-hal 0.12.1 --- boards/dk/Cargo.toml | 2 +- boards/dk/src/lib.rs | 32 +++++++++++++++++++++----------- boards/dk/src/peripheral.rs | 2 +- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/boards/dk/Cargo.toml b/boards/dk/Cargo.toml index 2bfe8be..e844710 100644 --- a/boards/dk/Cargo.toml +++ b/boards/dk/Cargo.toml @@ -9,7 +9,7 @@ version = "0.0.0" cortex-m = "0.6.4" cortex-m-rt = "0.6.13" embedded-hal = "0.2.3" -hal = { package = "nrf52840-hal", git = "https://github.com/japaric/nrf-hal", branch = "radio" } +hal = { package = "nrf52840-hal", version = "0.12.1" } log = "0.4.8" rtt-target = { version = "0.2.0", features = ["cortex-m"] } diff --git a/boards/dk/src/lib.rs b/boards/dk/src/lib.rs index f93f641..aaa1005 100644 --- a/boards/dk/src/lib.rs +++ b/boards/dk/src/lib.rs @@ -14,15 +14,17 @@ use cortex_m::{asm, peripheral::NVIC}; use embedded_hal::digital::v2::{OutputPin as _, StatefulOutputPin}; #[cfg(feature = "beginner")] pub use hal::ieee802154; -pub use hal::target::{interrupt, Interrupt, NVIC_PRIO_BITS, RTC0}; +pub use hal::pac::{interrupt, Interrupt, NVIC_PRIO_BITS, RTC0}; use hal::{ clocks::{self, Clocks}, - gpio::{p0, Level, Output, Pin, PushPull}, + gpio::{p0, Level, Output, Pin, Port, PushPull}, rtc::{Rtc, RtcInterrupt}, timer::OneShot, }; use log::{LevelFilter, Log}; -use rtt_target::{rprintln, rtt_init_print}; +use rtt_target::rprintln; +#[cfg(any(feature = "beginner", feature = "advanced"))] +use rtt_target::rtt_init_print; #[cfg(feature = "advanced")] use crate::{ @@ -79,8 +81,12 @@ impl Led { pub fn on(&mut self) { log::trace!( "setting P{}.{} low (LED on)", - if self.inner.port { '1' } else { '0' }, - self.inner.pin + if self.inner.port() == Port::Port1 { + '1' + } else { + '0' + }, + self.inner.pin() ); // NOTE this operations returns a `Result` but never returns the `Err` variant @@ -91,8 +97,12 @@ impl Led { pub fn off(&mut self) { log::trace!( "setting P{}.{} high (LED off)", - if self.inner.port { '1' } else { '0' }, - self.inner.pin + if self.inner.port() == Port::Port1 { + '1' + } else { + '0' + }, + self.inner.pin() ); // NOTE this operations returns a `Result` but never returns the `Err` variant @@ -121,7 +131,7 @@ impl Led { /// A timer for creating blocking delays pub struct Timer { - inner: hal::Timer, + inner: hal::Timer, } impl Timer { @@ -159,7 +169,7 @@ impl Timer { } impl ops::Deref for Timer { - type Target = hal::Timer; + type Target = hal::Timer; fn deref(&self) -> &Self::Target { &self.inner @@ -176,7 +186,7 @@ impl ops::DerefMut for Timer { /// /// This return an `Err`or if called more than once pub fn init() -> Result { - if let Some(periph) = hal::target::Peripherals::take() { + if let Some(periph) = hal::pac::Peripherals::take() { // NOTE(static mut) this branch runs at most once #[cfg(feature = "advanced")] static mut EP0IN_BUF: [u8; 64] = [0; 64]; @@ -212,7 +222,7 @@ pub fn init() -> Result { log::debug!("Clocks configured"); - let mut rtc = Rtc::new(periph.RTC0); + let mut rtc = Rtc::new(periph.RTC0, 0).unwrap(); rtc.enable_interrupt(RtcInterrupt::Overflow, None); rtc.enable_counter(); // NOTE(unsafe) because this crate defines the `#[interrupt] fn RTC0` interrupt handler, diff --git a/boards/dk/src/peripheral.rs b/boards/dk/src/peripheral.rs index e6fe8d0..bfec1a7 100644 --- a/boards/dk/src/peripheral.rs +++ b/boards/dk/src/peripheral.rs @@ -1,3 +1,3 @@ //! Low level access to the nRF52840 peripheral -pub use hal::target::{POWER, USBD}; +pub use hal::pac::{POWER, USBD}; From 2758be8412b51bd2802d78b959f8381214431817 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Tue, 16 Mar 2021 13:26:51 +0100 Subject: [PATCH 2/3] adapt beginner material to BSP changes --- beginner/apps/src/bin/radio-puzzle-1.rs | 2 +- beginner/apps/src/bin/radio-puzzle-3.rs | 2 +- beginner/apps/src/bin/radio-puzzle-5.rs | 2 +- beginner/apps/src/bin/radio-puzzle-6.rs | 4 ++-- beginner/apps/src/bin/radio-puzzle-7.rs | 6 +++--- beginner/apps/src/bin/radio-puzzle-solution-2.rs | 6 +++--- beginner/apps/src/bin/radio-puzzle-solution.rs | 6 +++--- beginner/apps/src/bin/radio-puzzle.rs | 2 +- beginner/apps/src/bin/radio-recv.rs | 2 +- beginner/apps/src/bin/radio-send.rs | 2 +- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/beginner/apps/src/bin/radio-puzzle-1.rs b/beginner/apps/src/bin/radio-puzzle-1.rs index b4fdf1a..3c9ad08 100644 --- a/beginner/apps/src/bin/radio-puzzle-1.rs +++ b/beginner/apps/src/bin/radio-puzzle-1.rs @@ -29,7 +29,7 @@ fn main() -> ! { // single letter (byte) packet packet.copy_from_slice(&[source]); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { // response should be one byte large diff --git a/beginner/apps/src/bin/radio-puzzle-3.rs b/beginner/apps/src/bin/radio-puzzle-3.rs index c35e1bb..845f0e9 100644 --- a/beginner/apps/src/bin/radio-puzzle-3.rs +++ b/beginner/apps/src/bin/radio-puzzle-3.rs @@ -26,7 +26,7 @@ fn main() -> ! { for source in b'A'..=b'B' { packet.copy_from_slice(&[source]); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { // response should be one byte large diff --git a/beginner/apps/src/bin/radio-puzzle-5.rs b/beginner/apps/src/bin/radio-puzzle-5.rs index 8196c05..50dc9da 100644 --- a/beginner/apps/src/bin/radio-puzzle-5.rs +++ b/beginner/apps/src/bin/radio-puzzle-5.rs @@ -24,7 +24,7 @@ fn main() -> ! { /* # Retrieve the secret string */ packet.copy_from_slice(&[]); // empty packet - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); diff --git a/beginner/apps/src/bin/radio-puzzle-6.rs b/beginner/apps/src/bin/radio-puzzle-6.rs index 2dd8588..4d9ca39 100644 --- a/beginner/apps/src/bin/radio-puzzle-6.rs +++ b/beginner/apps/src/bin/radio-puzzle-6.rs @@ -27,7 +27,7 @@ fn main() -> ! { for source in 0..=127 { packet.copy_from_slice(&[source]); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { // response should be one byte large @@ -48,7 +48,7 @@ fn main() -> ! { /* # Retrieve the secret string */ packet.copy_from_slice(&[]); // empty packet - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); diff --git a/beginner/apps/src/bin/radio-puzzle-7.rs b/beginner/apps/src/bin/radio-puzzle-7.rs index 7dbd3d2..933f0d9 100644 --- a/beginner/apps/src/bin/radio-puzzle-7.rs +++ b/beginner/apps/src/bin/radio-puzzle-7.rs @@ -27,7 +27,7 @@ fn main() -> ! { for source in 0..=127 { packet.copy_from_slice(&[source]); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { // response should be one byte large @@ -48,7 +48,7 @@ fn main() -> ! { /* # Retrieve the secret string */ packet.copy_from_slice(&[]); // empty packet - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); @@ -79,7 +79,7 @@ fn main() -> ! { /* # (NEW) Verify decrypted text */ packet.copy_from_slice(&buffer); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); diff --git a/beginner/apps/src/bin/radio-puzzle-solution-2.rs b/beginner/apps/src/bin/radio-puzzle-solution-2.rs index 72af2c5..385b632 100644 --- a/beginner/apps/src/bin/radio-puzzle-solution-2.rs +++ b/beginner/apps/src/bin/radio-puzzle-solution-2.rs @@ -27,7 +27,7 @@ fn main() -> ! { for plainletter in 0..=127 { packet.copy_from_slice(&[plainletter]); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { // response should be one byte large @@ -48,7 +48,7 @@ fn main() -> ! { /* # Retrieve the secret string */ packet.copy_from_slice(&[]); // empty packet - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); @@ -79,7 +79,7 @@ fn main() -> ! { ); /* # Verify decrypted text */ - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); diff --git a/beginner/apps/src/bin/radio-puzzle-solution.rs b/beginner/apps/src/bin/radio-puzzle-solution.rs index 76d7a78..5808d5e 100644 --- a/beginner/apps/src/bin/radio-puzzle-solution.rs +++ b/beginner/apps/src/bin/radio-puzzle-solution.rs @@ -29,7 +29,7 @@ fn main() -> ! { // ^^^^^^^ NOTE complete ASCII range packet.copy_from_slice(&[plainletter]); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { // response should be one byte large @@ -51,7 +51,7 @@ fn main() -> ! { /* # Retrieve the secret string */ packet.copy_from_slice(&[]); // empty packet - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); @@ -83,7 +83,7 @@ fn main() -> ! { /* # Verify decrypted text */ packet.copy_from_slice(&buffer); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_err() { log::error!("no response or response packet was corrupted"); diff --git a/beginner/apps/src/bin/radio-puzzle.rs b/beginner/apps/src/bin/radio-puzzle.rs index d071c0f..619905f 100644 --- a/beginner/apps/src/bin/radio-puzzle.rs +++ b/beginner/apps/src/bin/radio-puzzle.rs @@ -38,7 +38,7 @@ fn main() -> ! { str::from_utf8(msg).expect("msg was not valid UTF-8 data") ); - radio.send(&packet); + radio.send(&mut packet); if radio.recv_timeout(&mut packet, &mut timer, TEN_MS).is_ok() { log::info!( "received: {}", diff --git a/beginner/apps/src/bin/radio-recv.rs b/beginner/apps/src/bin/radio-recv.rs index 7116005..732f311 100644 --- a/beginner/apps/src/bin/radio-recv.rs +++ b/beginner/apps/src/bin/radio-recv.rs @@ -28,7 +28,7 @@ fn main() -> ! { "sending: {}", str::from_utf8(msg).expect("message is not valid UTF-8") ); - radio.send(&packet); + radio.send(&mut packet); // TODO try uncommenting this line // timer.delay(1_000); diff --git a/beginner/apps/src/bin/radio-send.rs b/beginner/apps/src/bin/radio-send.rs index 297ec15..4f411df 100644 --- a/beginner/apps/src/bin/radio-send.rs +++ b/beginner/apps/src/bin/radio-send.rs @@ -32,7 +32,7 @@ fn main() -> ! { packet.copy_from_slice(msg); - radio.send(&packet); + radio.send(&mut packet); dk::exit(); } From 9161e8224640e2a06d8c091475373bfab41a21c7 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Tue, 16 Mar 2021 14:13:40 +0100 Subject: [PATCH 3/3] advanced: use crates.io version of usb2 crate --- advanced/firmware/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/advanced/firmware/Cargo.toml b/advanced/firmware/Cargo.toml index dca67df..dafce5e 100644 --- a/advanced/firmware/Cargo.toml +++ b/advanced/firmware/Cargo.toml @@ -8,7 +8,7 @@ version = "0.0.0" [build-dependencies] consts = { path = "../common/consts" } quote = "1" -usb2 = { git = "https://github.com/japaric/usb2" } +usb2 = "0.0.1" [dependencies] consts = { path = "../common/consts" } @@ -20,7 +20,7 @@ heapless = "0.5.5" log = "0.4.8" panic-log = { path = "../../common/panic-log" } usb = { path = "../common/usb" } -usb2 = { git = "https://github.com/japaric/usb2" } +usb2 = "0.0.1" # optimize code in both profiles [profile.dev]