mirror of
https://github.com/ferrous-systems/embedded-trainings-2020.git
synced 2025-02-03 03:22:20 +00:00
WIP: show recv_timeout API
TODO update text
This commit is contained in:
parent
806c4f09a0
commit
8140c7bba9
3 changed files with 33 additions and 11 deletions
4
beginner/apps/Cargo.lock
generated
4
beginner/apps/Cargo.lock
generated
|
@ -122,7 +122,7 @@ checksum = "b1411551beb3c11dedfb0a90a0fa256b47d28b9ec2cdff34c25a2fa59e45dbdc"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nrf-hal-common"
|
name = "nrf-hal-common"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
source = "git+https://github.com/japaric/nrf-hal?branch=radio#d624e80e5724e4709081ed65abaf63271fe1eca7"
|
source = "git+https://github.com/japaric/nrf-hal?branch=radio#7076639891fd2493e1c61a7aca71944b48ae0458"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cast",
|
"cast",
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
|
@ -137,7 +137,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nrf52840-hal"
|
name = "nrf52840-hal"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
source = "git+https://github.com/japaric/nrf-hal?branch=radio#d624e80e5724e4709081ed65abaf63271fe1eca7"
|
source = "git+https://github.com/japaric/nrf-hal?branch=radio#7076639891fd2493e1c61a7aca71944b48ae0458"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cast",
|
"cast",
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
|
|
|
@ -4,9 +4,8 @@
|
||||||
|
|
||||||
use core::str;
|
use core::str;
|
||||||
|
|
||||||
use cortex_m::asm;
|
|
||||||
use cortex_m_rt::entry;
|
use cortex_m_rt::entry;
|
||||||
use dk::ieee802154::Packet;
|
use dk::ieee802154::{Error, Packet};
|
||||||
use panic_log as _; // the panicking behavior
|
use panic_log as _; // the panicking behavior
|
||||||
|
|
||||||
#[entry]
|
#[entry]
|
||||||
|
@ -14,17 +13,27 @@ fn main() -> ! {
|
||||||
// initializes the peripherals
|
// initializes the peripherals
|
||||||
let board = dk::init().unwrap();
|
let board = dk::init().unwrap();
|
||||||
let mut radio = board.radio;
|
let mut radio = board.radio;
|
||||||
|
let mut timer = board.timer;
|
||||||
|
|
||||||
let mut packet = Packet::new();
|
let mut packet = Packet::new();
|
||||||
let msg = b"olleh";
|
let msg = b"olleh";
|
||||||
packet.copy_from_slice(msg);
|
packet.copy_from_slice(msg);
|
||||||
radio.send(&packet);
|
radio.send(&packet);
|
||||||
log::info!("sent: {:?}", msg);
|
log::info!("sent: {:?}", msg);
|
||||||
let crc = radio.recv(&mut packet);
|
let timeout = 1_000;
|
||||||
let s = str::from_utf8(&*packet).expect("response is not valid UTF-8");
|
let res = radio.recv_timeout(&mut packet, &mut timer, timeout);
|
||||||
log::info!("received: {} (CRC={:?})", s, crc);
|
|
||||||
|
|
||||||
loop {
|
match res {
|
||||||
asm::bkpt();
|
Ok(crc) => {
|
||||||
|
log::info!(
|
||||||
|
"received: {} (CRC={})",
|
||||||
|
str::from_utf8(&*packet).expect("response is not valid UTF-8"),
|
||||||
|
crc
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Err(Error::Crc(crc)) => log::error!("invalid CRC: {:06x}", crc),
|
||||||
|
Err(Error::Timeout) => log::error!("no response within {} ms", timeout),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dk::exit()
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
|
|
||||||
use core::{
|
use core::{
|
||||||
|
ops,
|
||||||
sync::atomic::{AtomicU32, Ordering},
|
sync::atomic::{AtomicU32, Ordering},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
@ -118,7 +119,7 @@ impl Led {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A timer for blocking delay
|
/// A timer for creating blocking delays
|
||||||
pub struct Timer {
|
pub struct Timer {
|
||||||
inner: hal::Timer<hal::target::TIMER0, OneShot>,
|
inner: hal::Timer<hal::target::TIMER0, OneShot>,
|
||||||
}
|
}
|
||||||
|
@ -157,7 +158,19 @@ impl Timer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add Instant API
|
impl ops::Deref for Timer {
|
||||||
|
type Target = hal::Timer<hal::target::TIMER0, OneShot>;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ops::DerefMut for Timer {
|
||||||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
|
&mut self.inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes the board
|
/// Initializes the board
|
||||||
///
|
///
|
||||||
|
|
Loading…
Reference in a new issue