From 81b473fdaf4520fcb1c3ab215c36e03d5e7ba3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonard=20K=C3=B6nig?= <leonard.r.koenig@googlemail.com> Date: Thu, 16 Jul 2020 12:23:17 +0200 Subject: [PATCH] Move to 'Better subscription API' Cf. the pull https://github.com/tock/libtock-rs/pull/131, specifically the changes * https://github.com/tock/libtock-rs/pull/131/files#diff-431b238bab5245843aa5ac7edf249f7bL58 * https://github.com/tock/libtock-rs/pull/131/files#diff-f08a2946da590a5e9b304f0b55b87608L23 --- src/usb_ctap_hid.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/usb_ctap_hid.rs b/src/usb_ctap_hid.rs index f72e3d9..ace1dc2 100644 --- a/src/usb_ctap_hid.rs +++ b/src/usb_ctap_hid.rs @@ -19,6 +19,7 @@ use core::fmt::Write; use libtock::console::Console; use libtock::result::{EALREADY, EBUSY, TockResult, TockError}; use libtock::syscalls; +use libtock::callback::{Identity0Consumer, Identity1Consumer}; use libtock::timer::{Duration}; const DRIVER_NUMBER: usize = 0x20009; @@ -70,8 +71,8 @@ pub fn recv(buf: &mut [u8; 64]) -> bool { } let done = Cell::new(false); - let mut alarm = |_, _, _| done.set(true); - let subscription = syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::RECEIVE, &mut alarm); + let mut alarm = || done.set(true); + let subscription = syscalls::subscribe::<Identity0Consumer, _>(DRIVER_NUMBER, subscribe_nr::RECEIVE, &mut alarm); if subscription.is_err() { return false; } @@ -97,8 +98,8 @@ pub fn send(buf: &mut [u8; 64]) -> bool { } let done = Cell::new(false); - let mut alarm = |_, _, _| done.set(true); - let subscription = syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::TRANSMIT, &mut alarm); + let mut alarm = || done.set(true); + let subscription = syscalls::subscribe::<Identity0Consumer,_>(DRIVER_NUMBER, subscribe_nr::TRANSMIT, &mut alarm); if subscription.is_err() { return false; } @@ -141,7 +142,7 @@ pub fn send_or_recv(buf: &mut [u8; 64]) -> SendOrRecvStatus { } let status = Cell::new(None); - let mut alarm = |direction, _, _| { + let mut alarm = |direction| { status.set(Some(match direction { subscribe_nr::callback_status::TRANSMITTED => SendOrRecvStatus::Sent, subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received, @@ -151,7 +152,7 @@ pub fn send_or_recv(buf: &mut [u8; 64]) -> SendOrRecvStatus { }; let subscription = - syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::TRANSMIT_OR_RECEIVE, &mut alarm); + syscalls::subscribe::<Identity1Consumer, _>(DRIVER_NUMBER, subscribe_nr::TRANSMIT_OR_RECEIVE, &mut alarm); if subscription.is_err() { return SendOrRecvStatus::Error; } @@ -232,7 +233,7 @@ fn recv_with_timeout_detail( } let status = Cell::new(None); - let mut alarm = |direction, _, _| { + let mut alarm = |direction| { status.set(Some(match direction { subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received, // Unknown direction or "transmitted" sent by the kernel. @@ -240,7 +241,7 @@ fn recv_with_timeout_detail( })); }; - let subscription = syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::RECEIVE, &mut alarm); + let subscription = syscalls::subscribe::<Identity1Consumer, _>(DRIVER_NUMBER, subscribe_nr::RECEIVE, &mut alarm); if subscription.is_err() { return Some(SendOrRecvStatus::Error); } @@ -340,7 +341,7 @@ fn send_or_recv_with_timeout_detail( } let status = Cell::new(None); - let mut alarm = |direction, _, _| { + let mut alarm = |direction| { status.set(Some(match direction { subscribe_nr::callback_status::TRANSMITTED => SendOrRecvStatus::Sent, subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received, @@ -350,7 +351,7 @@ fn send_or_recv_with_timeout_detail( }; let subscription = - syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::TRANSMIT_OR_RECEIVE, &mut alarm); + syscalls::subscribe::<Identity1Consumer, _>(DRIVER_NUMBER, subscribe_nr::TRANSMIT_OR_RECEIVE, &mut alarm); if subscription.is_err() { return Some(SendOrRecvStatus::Error); } @@ -449,4 +450,4 @@ pub(crate) fn yieldk_for<F: Fn() -> bool>(cond: F) { syscalls::raw::yieldk(); } } -} \ No newline at end of file +} -- GitLab