diff options
| author | ivmarkov <[email protected]> | 2022-10-24 12:15:53 +0300 |
|---|---|---|
| committer | ivmarkov <[email protected]> | 2022-10-24 12:15:53 +0300 |
| commit | 516f4ce94684d9b3f9310c9972f878dbf883600c (patch) | |
| tree | 73fa1c3848bc4cd3e960b126fb61cdd092dfe469 /embassy-time | |
| parent | e3cf4255c6395ff5174432ab332189adf1ef431a (diff) | |
Fix embassy-time wasm build and fix a bug in wasm time driver
Diffstat (limited to 'embassy-time')
| -rw-r--r-- | embassy-time/src/driver_wasm.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/embassy-time/src/driver_wasm.rs b/embassy-time/src/driver_wasm.rs index d7a6b0d8d..63d049897 100644 --- a/embassy-time/src/driver_wasm.rs +++ b/embassy-time/src/driver_wasm.rs | |||
| @@ -81,26 +81,32 @@ impl Driver for TimeDriver { | |||
| 81 | } | 81 | } |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | fn set_alarm_callback(&self, alarm: AlarmHandle, callback: fn(*mut ()), ctx: *mut ()) -> bool { | 84 | fn set_alarm_callback(&self, alarm: AlarmHandle, callback: fn(*mut ()), ctx: *mut ()) { |
| 85 | self.init(); | 85 | self.init(); |
| 86 | let mut alarms = unsafe { self.alarms.as_ref() }.lock().unwrap(); | 86 | let mut alarms = unsafe { self.alarms.as_ref() }.lock().unwrap(); |
| 87 | let alarm = &mut alarms[alarm.id() as usize]; | 87 | let alarm = &mut alarms[alarm.id() as usize]; |
| 88 | alarm.closure.replace(Closure::new(move || { | 88 | alarm.closure.replace(Closure::new(move || { |
| 89 | callback(ctx); | 89 | callback(ctx); |
| 90 | })); | 90 | })); |
| 91 | |||
| 92 | true | ||
| 93 | } | 91 | } |
| 94 | 92 | ||
| 95 | fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) { | 93 | fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool { |
| 96 | self.init(); | 94 | self.init(); |
| 97 | let mut alarms = unsafe { self.alarms.as_ref() }.lock().unwrap(); | 95 | let mut alarms = unsafe { self.alarms.as_ref() }.lock().unwrap(); |
| 98 | let alarm = &mut alarms[alarm.id() as usize]; | 96 | let alarm = &mut alarms[alarm.id() as usize]; |
| 99 | let timeout = (timestamp - self.now()) as u32; | ||
| 100 | if let Some(token) = alarm.token { | 97 | if let Some(token) = alarm.token { |
| 101 | clearTimeout(token); | 98 | clearTimeout(token); |
| 102 | } | 99 | } |
| 103 | alarm.token = Some(setTimeout(alarm.closure.as_ref().unwrap(), timeout / 1000)); | 100 | |
| 101 | let now = self.now(); | ||
| 102 | if timestamp <= now { | ||
| 103 | false | ||
| 104 | } else { | ||
| 105 | let timeout = (timestamp - now) as u32; | ||
| 106 | alarm.token = Some(setTimeout(alarm.closure.as_ref().unwrap(), timeout / 1000)); | ||
| 107 | |||
| 108 | true | ||
| 109 | } | ||
| 104 | } | 110 | } |
| 105 | } | 111 | } |
| 106 | 112 | ||
