Address review feedback
This commit is contained in:
parent
4d5550070f
commit
f78c706b89
@ -245,19 +245,23 @@ impl Driver for RtcDriver {
|
|||||||
|
|
||||||
fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
|
fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
|
||||||
critical_section::with(|cs| {
|
critical_section::with(|cs| {
|
||||||
let t = self.now();
|
|
||||||
|
|
||||||
// If alarm timestamp has passed don't set the alarm and return `false` to indicate that.
|
|
||||||
if timestamp <= t {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let n = alarm.id() as _;
|
let n = alarm.id() as _;
|
||||||
let alarm = self.get_alarm(cs, alarm);
|
let alarm = self.get_alarm(cs, alarm);
|
||||||
alarm.timestamp.set(timestamp);
|
alarm.timestamp.set(timestamp);
|
||||||
|
|
||||||
let r = rtc();
|
let r = rtc();
|
||||||
|
|
||||||
|
let t = self.now();
|
||||||
|
if timestamp <= t {
|
||||||
|
// If alarm timestamp has passed the alarm will not fire.
|
||||||
|
// Disarm the alarm and return `false` to indicate that.
|
||||||
|
r.intenclr.write(|w| unsafe { w.bits(compare_n(n)) });
|
||||||
|
|
||||||
|
alarm.timestamp.set(u64::MAX);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// If it hasn't triggered yet, setup it in the compare channel.
|
// If it hasn't triggered yet, setup it in the compare channel.
|
||||||
|
|
||||||
// Write the CC value regardless of whether we're going to enable it now or not.
|
// Write the CC value regardless of whether we're going to enable it now or not.
|
||||||
|
@ -71,13 +71,6 @@ impl Driver for TimerDriver {
|
|||||||
fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
|
fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
|
||||||
let n = alarm.id() as usize;
|
let n = alarm.id() as usize;
|
||||||
critical_section::with(|cs| {
|
critical_section::with(|cs| {
|
||||||
let now = self.now();
|
|
||||||
|
|
||||||
// If alarm timestamp has passed don't set the alarm and return `false` to indicate that.
|
|
||||||
if timestamp <= now {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let alarm = &self.alarms.borrow(cs)[n];
|
let alarm = &self.alarms.borrow(cs)[n];
|
||||||
alarm.timestamp.set(timestamp);
|
alarm.timestamp.set(timestamp);
|
||||||
|
|
||||||
@ -87,7 +80,18 @@ impl Driver for TimerDriver {
|
|||||||
// it is checked if the alarm time has passed.
|
// it is checked if the alarm time has passed.
|
||||||
unsafe { pac::TIMER.alarm(n).write_value(timestamp as u32) };
|
unsafe { pac::TIMER.alarm(n).write_value(timestamp as u32) };
|
||||||
|
|
||||||
|
let now = self.now();
|
||||||
|
if timestamp <= now {
|
||||||
|
// If alarm timestamp has passed the alarm will not fire.
|
||||||
|
// Disarm the alarm and return `false` to indicate that.
|
||||||
|
unsafe { pac::TIMER.armed().write(|w| w.set_armed(1 << n)) }
|
||||||
|
|
||||||
|
alarm.timestamp.set(u64::MAX);
|
||||||
|
|
||||||
|
false
|
||||||
|
} else {
|
||||||
true
|
true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -294,19 +294,23 @@ impl Driver for RtcDriver {
|
|||||||
|
|
||||||
fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
|
fn set_alarm(&self, alarm: AlarmHandle, timestamp: u64) -> bool {
|
||||||
critical_section::with(|cs| {
|
critical_section::with(|cs| {
|
||||||
let t = self.now();
|
|
||||||
|
|
||||||
// If alarm timestamp has passed don't set the alarm and return `false` to indicate that.
|
|
||||||
if timestamp <= t {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let r = T::regs_gp16();
|
let r = T::regs_gp16();
|
||||||
|
|
||||||
let n = alarm.id() as _;
|
let n = alarm.id() as _;
|
||||||
let alarm = self.get_alarm(cs, alarm);
|
let alarm = self.get_alarm(cs, alarm);
|
||||||
alarm.timestamp.set(timestamp);
|
alarm.timestamp.set(timestamp);
|
||||||
|
|
||||||
|
let t = self.now();
|
||||||
|
if timestamp <= t {
|
||||||
|
// If alarm timestamp has passed the alarm will not fire.
|
||||||
|
// Disarm the alarm and return `false` to indicate that.
|
||||||
|
unsafe { r.dier().modify(|w| w.set_ccie(n + 1, false)) };
|
||||||
|
|
||||||
|
alarm.timestamp.set(u64::MAX);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let safe_timestamp = timestamp.max(t + 3);
|
let safe_timestamp = timestamp.max(t + 3);
|
||||||
|
|
||||||
// Write the CCR value regardless of whether we're going to enable it now or not.
|
// Write the CCR value regardless of whether we're going to enable it now or not.
|
||||||
|
Loading…
Reference in New Issue
Block a user