aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src/rtc.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-02-02 05:14:52 +0100
committerDario Nieuwenhuis <[email protected]>2021-02-02 05:20:41 +0100
commitaeaa34d7a163b327643c08e299e1b40bb497c01c (patch)
tree6054344c8a7d990b910416a1002aded9ad4d10eb /embassy-nrf/src/rtc.rs
parentd098952077b8fdc8426754151bb8064214a046fa (diff)
Executor API V2.
- It's no longer possible to call run() reentrantly from within a task (soundness issue) - it's now possible to spawn Send tasks across threads (SendSpawner, #37)
Diffstat (limited to 'embassy-nrf/src/rtc.rs')
-rw-r--r--embassy-nrf/src/rtc.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/embassy-nrf/src/rtc.rs b/embassy-nrf/src/rtc.rs
index 015583943..dde0fd4ca 100644
--- a/embassy-nrf/src/rtc.rs
+++ b/embassy-nrf/src/rtc.rs
@@ -40,7 +40,7 @@ mod test {
40 40
41struct AlarmState { 41struct AlarmState {
42 timestamp: Cell<u64>, 42 timestamp: Cell<u64>,
43 callback: Cell<Option<fn()>>, 43 callback: Cell<Option<(fn(*mut ()), *mut ())>>,
44} 44}
45 45
46impl AlarmState { 46impl AlarmState {
@@ -159,13 +159,13 @@ impl<T: Instance> RTC<T> {
159 alarm.timestamp.set(u64::MAX); 159 alarm.timestamp.set(u64::MAX);
160 160
161 // Call after clearing alarm, so the callback can set another alarm. 161 // Call after clearing alarm, so the callback can set another alarm.
162 alarm.callback.get().map(|f| f()); 162 alarm.callback.get().map(|(f, ctx)| f(ctx));
163 } 163 }
164 164
165 fn set_alarm_callback(&self, n: usize, callback: fn()) { 165 fn set_alarm_callback(&self, n: usize, callback: fn(*mut ()), ctx: *mut ()) {
166 interrupt::free(|cs| { 166 interrupt::free(|cs| {
167 let alarm = &self.alarms.borrow(cs)[n]; 167 let alarm = &self.alarms.borrow(cs)[n];
168 alarm.callback.set(Some(callback)); 168 alarm.callback.set(Some((callback, ctx)));
169 }) 169 })
170 } 170 }
171 171
@@ -220,8 +220,8 @@ pub struct Alarm<T: Instance> {
220} 220}
221 221
222impl<T: Instance> embassy::time::Alarm for Alarm<T> { 222impl<T: Instance> embassy::time::Alarm for Alarm<T> {
223 fn set_callback(&self, callback: fn()) { 223 fn set_callback(&self, callback: fn(*mut ()), ctx: *mut ()) {
224 self.rtc.set_alarm_callback(self.n, callback); 224 self.rtc.set_alarm_callback(self.n, callback, ctx);
225 } 225 }
226 226
227 fn set(&self, timestamp: u64) { 227 fn set(&self, timestamp: u64) {