aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src/temp.rs
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2021-10-19 20:48:46 +0200
committerUlf Lilleengen <[email protected]>2021-10-19 20:48:46 +0200
commit69953a78f10905330fb5d682dd5bda01f13a4e0c (patch)
tree1b22cf95d15a280917f7bb999dabd15d138f8075 /embassy-nrf/src/temp.rs
parente807a9eaec0d633a0c27a8b0b53fc32c061eba06 (diff)
Use async fn instead of impl Future
Diffstat (limited to 'embassy-nrf/src/temp.rs')
-rw-r--r--embassy-nrf/src/temp.rs31
1 files changed, 14 insertions, 17 deletions
diff --git a/embassy-nrf/src/temp.rs b/embassy-nrf/src/temp.rs
index bd8fa75a7..f7c6e6609 100644
--- a/embassy-nrf/src/temp.rs
+++ b/embassy-nrf/src/temp.rs
@@ -4,7 +4,6 @@ use crate::interrupt;
4use crate::pac; 4use crate::pac;
5use crate::peripherals::TEMP; 5use crate::peripherals::TEMP;
6 6
7use core::future::Future;
8use core::marker::PhantomData; 7use core::marker::PhantomData;
9use core::task::Poll; 8use core::task::Poll;
10use embassy::interrupt::InterruptExt; 9use embassy::interrupt::InterruptExt;
@@ -54,7 +53,7 @@ impl<'d> Temp<'d> {
54 /// let mut t = Temp::new(p.TEMP, interrupt::take!(TEMP)); 53 /// let mut t = Temp::new(p.TEMP, interrupt::take!(TEMP));
55 /// let v: u16 = t.read().await.to_num::<u16>(); 54 /// let v: u16 = t.read().await.to_num::<u16>();
56 /// ``` 55 /// ```
57 pub fn read(&mut self) -> impl Future<Output = I30F2> { 56 pub async fn read(&mut self) -> I30F2 {
58 // In case the future is dropped, stop the task and reset events. 57 // In case the future is dropped, stop the task and reset events.
59 let on_drop = OnDrop::new(|| { 58 let on_drop = OnDrop::new(|| {
60 let t = Self::regs(); 59 let t = Self::regs();
@@ -66,21 +65,19 @@ impl<'d> Temp<'d> {
66 t.intenset.write(|w| w.datardy().set()); 65 t.intenset.write(|w| w.datardy().set());
67 unsafe { t.tasks_start.write(|w| w.bits(1)) }; 66 unsafe { t.tasks_start.write(|w| w.bits(1)) };
68 67
69 async move { 68 let value = poll_fn(|cx| {
70 let value = poll_fn(|cx| { 69 WAKER.register(cx.waker());
71 WAKER.register(cx.waker()); 70 if t.events_datardy.read().bits() == 0 {
72 if t.events_datardy.read().bits() == 0 { 71 return Poll::Pending;
73 return Poll::Pending; 72 } else {
74 } else { 73 t.events_datardy.reset();
75 t.events_datardy.reset(); 74 let raw = t.temp.read().bits();
76 let raw = t.temp.read().bits(); 75 Poll::Ready(I30F2::from_bits(raw as i32))
77 Poll::Ready(I30F2::from_bits(raw as i32)) 76 }
78 } 77 })
79 }) 78 .await;
80 .await; 79 on_drop.defuse();
81 on_drop.defuse(); 80 value
82 value
83 }
84 } 81 }
85 82
86 fn regs() -> &'static pac::temp::RegisterBlock { 83 fn regs() -> &'static pac::temp::RegisterBlock {