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