blob: 9685d34bfae944552a8f750441261679363c523e [file] [log] [blame]
use crate::syscalls;
use core::ptr;
pub trait SubscribableCallback {
fn call_rust(&mut self, arg0: usize, arg1: usize, arg2: usize);
}
impl<F: FnMut(usize, usize, usize)> SubscribableCallback for F {
fn call_rust(&mut self, arg0: usize, arg1: usize, arg2: usize) {
self(arg0, arg1, arg2)
}
}
pub struct CallbackSubscription<'a> {
driver_number: usize,
subscribe_number: usize,
_lifetime: &'a (),
}
impl<'a> CallbackSubscription<'a> {
pub fn new(driver_number: usize, subscribe_number: usize) -> CallbackSubscription<'a> {
CallbackSubscription {
driver_number,
subscribe_number,
_lifetime: &(),
}
}
}
impl<'a> Drop for CallbackSubscription<'a> {
fn drop(&mut self) {
unsafe {
syscalls::subscribe_ptr(self.driver_number, self.subscribe_number, ptr::null(), 0);
}
}
}