Skip to content
Snippets Groups Projects
Commit 81b473fd authored by koenigl's avatar koenigl
Browse files
parent e1c6aca7
Branches
No related tags found
No related merge requests found
...@@ -19,6 +19,7 @@ use core::fmt::Write; ...@@ -19,6 +19,7 @@ use core::fmt::Write;
use libtock::console::Console; use libtock::console::Console;
use libtock::result::{EALREADY, EBUSY, TockResult, TockError}; use libtock::result::{EALREADY, EBUSY, TockResult, TockError};
use libtock::syscalls; use libtock::syscalls;
use libtock::callback::{Identity0Consumer, Identity1Consumer};
use libtock::timer::{Duration}; use libtock::timer::{Duration};
const DRIVER_NUMBER: usize = 0x20009; const DRIVER_NUMBER: usize = 0x20009;
...@@ -70,8 +71,8 @@ pub fn recv(buf: &mut [u8; 64]) -> bool { ...@@ -70,8 +71,8 @@ pub fn recv(buf: &mut [u8; 64]) -> bool {
} }
let done = Cell::new(false); let done = Cell::new(false);
let mut alarm = |_, _, _| done.set(true); let mut alarm = || done.set(true);
let subscription = syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::RECEIVE, &mut alarm); let subscription = syscalls::subscribe::<Identity0Consumer, _>(DRIVER_NUMBER, subscribe_nr::RECEIVE, &mut alarm);
if subscription.is_err() { if subscription.is_err() {
return false; return false;
} }
...@@ -97,8 +98,8 @@ pub fn send(buf: &mut [u8; 64]) -> bool { ...@@ -97,8 +98,8 @@ pub fn send(buf: &mut [u8; 64]) -> bool {
} }
let done = Cell::new(false); let done = Cell::new(false);
let mut alarm = |_, _, _| done.set(true); let mut alarm = || done.set(true);
let subscription = syscalls::subscribe(DRIVER_NUMBER, subscribe_nr::TRANSMIT, &mut alarm); let subscription = syscalls::subscribe::<Identity0Consumer,_>(DRIVER_NUMBER, subscribe_nr::TRANSMIT, &mut alarm);
if subscription.is_err() { if subscription.is_err() {
return false; return false;
} }
...@@ -141,7 +142,7 @@ pub fn send_or_recv(buf: &mut [u8; 64]) -> SendOrRecvStatus { ...@@ -141,7 +142,7 @@ pub fn send_or_recv(buf: &mut [u8; 64]) -> SendOrRecvStatus {
} }
let status = Cell::new(None); let status = Cell::new(None);
let mut alarm = |direction, _, _| { let mut alarm = |direction| {
status.set(Some(match direction { status.set(Some(match direction {
subscribe_nr::callback_status::TRANSMITTED => SendOrRecvStatus::Sent, subscribe_nr::callback_status::TRANSMITTED => SendOrRecvStatus::Sent,
subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received, subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received,
...@@ -151,7 +152,7 @@ pub fn send_or_recv(buf: &mut [u8; 64]) -> SendOrRecvStatus { ...@@ -151,7 +152,7 @@ pub fn send_or_recv(buf: &mut [u8; 64]) -> SendOrRecvStatus {
}; };
let subscription = 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() { if subscription.is_err() {
return SendOrRecvStatus::Error; return SendOrRecvStatus::Error;
} }
...@@ -232,7 +233,7 @@ fn recv_with_timeout_detail( ...@@ -232,7 +233,7 @@ fn recv_with_timeout_detail(
} }
let status = Cell::new(None); let status = Cell::new(None);
let mut alarm = |direction, _, _| { let mut alarm = |direction| {
status.set(Some(match direction { status.set(Some(match direction {
subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received, subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received,
// Unknown direction or "transmitted" sent by the kernel. // Unknown direction or "transmitted" sent by the kernel.
...@@ -240,7 +241,7 @@ fn recv_with_timeout_detail( ...@@ -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() { if subscription.is_err() {
return Some(SendOrRecvStatus::Error); return Some(SendOrRecvStatus::Error);
} }
...@@ -340,7 +341,7 @@ fn send_or_recv_with_timeout_detail( ...@@ -340,7 +341,7 @@ fn send_or_recv_with_timeout_detail(
} }
let status = Cell::new(None); let status = Cell::new(None);
let mut alarm = |direction, _, _| { let mut alarm = |direction| {
status.set(Some(match direction { status.set(Some(match direction {
subscribe_nr::callback_status::TRANSMITTED => SendOrRecvStatus::Sent, subscribe_nr::callback_status::TRANSMITTED => SendOrRecvStatus::Sent,
subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received, subscribe_nr::callback_status::RECEIVED => SendOrRecvStatus::Received,
...@@ -350,7 +351,7 @@ fn send_or_recv_with_timeout_detail( ...@@ -350,7 +351,7 @@ fn send_or_recv_with_timeout_detail(
}; };
let subscription = 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() { if subscription.is_err() {
return Some(SendOrRecvStatus::Error); return Some(SendOrRecvStatus::Error);
} }
...@@ -449,4 +450,4 @@ pub(crate) fn yieldk_for<F: Fn() -> bool>(cond: F) { ...@@ -449,4 +450,4 @@ pub(crate) fn yieldk_for<F: Fn() -> bool>(cond: F) {
syscalls::raw::yieldk(); syscalls::raw::yieldk();
} }
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment