Switch timer syscalls that can't fail to use syscalls::raw - otherwise returning a 32-bit value with the high bit set gets interpreted as an error code by libtock-rs
Change-Id: Id4fe3c1c91d6655a0e6686c5204756b54579a067
diff --git a/src/timer.rs b/src/timer.rs
index 946c6e5..0ab76cc 100644
--- a/src/timer.rs
+++ b/src/timer.rs
@@ -53,14 +53,14 @@
syscalls::command(DRIVER_NUMBER, command_nr::IS_DRIVER_AVAILABLE, 0, 0)?;
let clock_frequency =
- syscalls::command(DRIVER_NUMBER, command_nr::GET_CLOCK_FREQUENCY, 0, 0)?;
+ unsafe { syscalls::raw::command(DRIVER_NUMBER, command_nr::GET_CLOCK_FREQUENCY, 0, 0) };
if clock_frequency == 0 {
return Err(OtherError::TimerDriverErroneousClockFrequency.into());
}
let clock_frequency = ClockFrequency {
- hz: clock_frequency,
+ hz: clock_frequency as usize,
};
let subscription = syscalls::subscribe::<TimerEventConsumer, _>(
@@ -95,8 +95,9 @@
pub fn get_current_clock(&self) -> TockResult<ClockValue> {
Ok(ClockValue {
- num_ticks: syscalls::command(DRIVER_NUMBER, command_nr::GET_CLOCK_VALUE, 0, 0)?
- as isize,
+ num_ticks: unsafe {
+ syscalls::raw::command(DRIVER_NUMBER, command_nr::GET_CLOCK_VALUE, 0, 0)
+ },
clock_frequency: self.clock_frequency,
})
}
@@ -130,9 +131,13 @@
};
let alarm_instant = now.num_ticks() as usize + ticks;
- let alarm_id = syscalls::command(DRIVER_NUMBER, command_nr::SET_ALARM, alarm_instant, 0)?;
+ let alarm_id = unsafe {
+ syscalls::raw::command(DRIVER_NUMBER, command_nr::SET_ALARM, alarm_instant, 0)
+ };
- Ok(Alarm { alarm_id })
+ Ok(Alarm {
+ alarm_id: alarm_id as usize,
+ })
}
}
@@ -492,7 +497,7 @@
}
fn get_current_ticks() -> TockResult<usize> {
- syscalls::command(DRIVER_NUMBER, command_nr::GET_CLOCK_VALUE, 0, 0).map_err(|err| err.into())
+ unsafe { Ok(syscalls::raw::command(DRIVER_NUMBER, command_nr::GET_CLOCK_VALUE, 0, 0) as usize) }
}
fn set_alarm_at(instant: usize) -> TockResult<()> {
syscalls::command(DRIVER_NUMBER, command_nr::SET_ALARM, instant, 0)
@@ -511,8 +516,9 @@
}
fn get_clock_frequency() -> TockResult<usize> {
- syscalls::command(DRIVER_NUMBER, command_nr::GET_CLOCK_FREQUENCY, 0, 0)
- .map_err(|err| err.into())
+ unsafe {
+ Ok(syscalls::raw::command(DRIVER_NUMBER, command_nr::GET_CLOCK_FREQUENCY, 0, 0) as usize)
+ }
}
fn is_over(timer: ActiveTimer, now: u32) -> bool {