aboutsummaryrefslogtreecommitdiff
path: root/embassy-time
diff options
context:
space:
mode:
authorivmarkov <[email protected]>2022-10-24 12:15:53 +0300
committerivmarkov <[email protected]>2022-10-24 12:15:53 +0300
commit516f4ce94684d9b3f9310c9972f878dbf883600c (patch)
tree73fa1c3848bc4cd3e960b126fb61cdd092dfe469 /embassy-time
parente3cf4255c6395ff5174432ab332189adf1ef431a (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.rs18
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