Remove SubscribableCallback
diff --git a/src/callback.rs b/src/callback.rs index 0d0d6fc..95d4e04 100644 --- a/src/callback.rs +++ b/src/callback.rs
@@ -38,10 +38,6 @@ } } -pub(crate) trait SubscribableCallback { - fn call_rust(&mut self, arg1: usize, arg2: usize, arg3: usize); -} - #[must_use = "Subscriptions risk being dropped too early. Drop them manually."] pub struct CallbackSubscription<'a> { driver_number: usize,
diff --git a/src/simple_ble.rs b/src/simple_ble.rs index 8298cce..2876bce 100644 --- a/src/simple_ble.rs +++ b/src/simple_ble.rs
@@ -1,6 +1,6 @@ use crate::ble_composer::BlePayload; use crate::callback::CallbackSubscription; -use crate::callback::SubscribableCallback; +use crate::callback::Consumer; use crate::result::TockResult; use crate::shared_memory::SharedMemory; use crate::syscalls; @@ -79,9 +79,9 @@ } } -impl<CB: FnMut(usize, usize)> SubscribableCallback for BleCallback<CB> { - fn call_rust(&mut self, arg1: usize, arg2: usize, _: usize) { - (self.callback)(arg1, arg2); +impl<CB: FnMut(usize, usize)> Consumer<BleCallback<CB>> for BleCallback<CB> { + fn consume(data: &mut BleCallback<CB>, arg1: usize, arg2: usize, _: usize) { + (data.callback)(arg1, arg2); } } @@ -104,8 +104,11 @@ &'a mut self, callback: &'a mut BleCallback<CB>, ) -> TockResult<CallbackSubscription> { - let subscription = - syscalls::subscribe_cb(DRIVER_NUMBER, subscribe_nr::BLE_PASSIVE_SCAN_SUB, callback)?; + let subscription = syscalls::subscribe::<BleCallback<CB>, _>( + DRIVER_NUMBER, + subscribe_nr::BLE_PASSIVE_SCAN_SUB, + callback, + )?; syscalls::command(DRIVER_NUMBER, command_nr::PASSIVE_SCAN, 1, 0)?; Ok(subscription) }
diff --git a/src/syscalls/mod.rs b/src/syscalls/mod.rs index 2aafe6e..c0289e5 100644 --- a/src/syscalls/mod.rs +++ b/src/syscalls/mod.rs
@@ -8,7 +8,6 @@ use crate::callback::CallbackSubscription; use crate::callback::Consumer; -use crate::callback::SubscribableCallback; use crate::result::AllowError; use crate::result::CommandError; use crate::result::SubscribeError; @@ -34,22 +33,6 @@ } } -pub(crate) fn subscribe_cb<CB: SubscribableCallback>( - driver_number: usize, - subscribe_number: usize, - callback: &mut CB, -) -> Result<CallbackSubscription, SubscribeError> { - subscribe::<SubscribableCallbackConsumer, _>(driver_number, subscribe_number, callback) -} - -struct SubscribableCallbackConsumer; - -impl<CB: SubscribableCallback> Consumer<CB> for SubscribableCallbackConsumer { - fn consume(data: &mut CB, arg1: usize, arg2: usize, arg3: usize) { - data.call_rust(arg1, arg2, arg3); - } -} - pub fn subscribe<C: Consumer<T>, T>( driver_number: usize, subscribe_number: usize,
diff --git a/src/timer.rs b/src/timer.rs index 7319109..946c6e5 100644 --- a/src/timer.rs +++ b/src/timer.rs
@@ -1,7 +1,7 @@ //! Async timer driver. Can be used for (non-busy) sleeping. use crate::callback::CallbackSubscription; -use crate::callback::SubscribableCallback; +use crate::callback::Consumer; use crate::futures; use crate::result::OtherError; use crate::result::TockError; @@ -33,12 +33,14 @@ phantom: PhantomData<&'a mut ()>, } -impl<CB: FnMut(ClockValue, Alarm)> SubscribableCallback for WithCallback<'_, CB> { - fn call_rust(&mut self, clock_value: usize, alarm_id: usize, _: usize) { - (self.callback)( +struct TimerEventConsumer; + +impl<CB: FnMut(ClockValue, Alarm)> Consumer<WithCallback<'_, CB>> for TimerEventConsumer { + fn consume(data: &mut WithCallback<CB>, clock_value: usize, alarm_id: usize, _: usize) { + (data.callback)( ClockValue { num_ticks: clock_value as isize, - clock_frequency: self.clock_frequency, + clock_frequency: data.clock_frequency, }, Alarm { alarm_id }, ); @@ -61,8 +63,11 @@ hz: clock_frequency, }; - let subscription = - syscalls::subscribe_cb(DRIVER_NUMBER, subscribe_nr::SUBSCRIBE_CALLBACK, self)?; + let subscription = syscalls::subscribe::<TimerEventConsumer, _>( + DRIVER_NUMBER, + subscribe_nr::SUBSCRIBE_CALLBACK, + self, + )?; Ok(Timer { num_notifications, @@ -331,8 +336,10 @@ struct Callback; -impl SubscribableCallback for Callback { - fn call_rust(&mut self, _: usize, _: usize, _: usize) {} +struct ParallelTimerConsumer; + +impl<'a> Consumer<Callback> for ParallelTimerConsumer { + fn consume(_: &mut Callback, _: usize, _: usize, _: usize) {} } /// Activated time driver. Updates current time in the context and manages @@ -358,7 +365,7 @@ /// Activate the timer driver, will return a ParallelSleepDriver which /// can used to sleep. pub fn activate(&'a mut self) -> TockResult<ParallelSleepDriver<'a>> { - let subscription = syscalls::subscribe_cb( + let subscription = syscalls::subscribe::<ParallelTimerConsumer, _>( DRIVER_NUMBER, subscribe_nr::SUBSCRIBE_CALLBACK, &mut self.callback,