Remove unnecessary done.get()

This commit is contained in:
Mirna
2020-10-22 12:10:43 +02:00
parent 8cb85563da
commit 59af769c69

View File

@@ -79,13 +79,11 @@ impl NfcTag {
pub fn receive(buf: &mut [u8; 256]) -> Result<RecvOp, TockError> { pub fn receive(buf: &mut [u8; 256]) -> Result<RecvOp, TockError> {
let result = syscalls::allow(DRIVER_NUMBER, allow_nr::RECEIVE, buf)?; let result = syscalls::allow(DRIVER_NUMBER, allow_nr::RECEIVE, buf)?;
// set callback with 2 arguments, to receive ReturnCode and RX Amount // set callback with 2 arguments, to receive ReturnCode and RX Amount
let done = Cell::new(false);
let result_code = Cell::new(None); let result_code = Cell::new(None);
let recv_amount = Cell::new(None); let recv_amount = Cell::new(None);
let mut callback = |result, amount| { let mut callback = |result, amount| {
result_code.set(Some(result)); result_code.set(Some(result));
recv_amount.set(Some(amount)); recv_amount.set(Some(amount))
done.set(true)
}; };
let subscription = syscalls::subscribe::<callback::Identity2Consumer, _>( let subscription = syscalls::subscribe::<callback::Identity2Consumer, _>(
DRIVER_NUMBER, DRIVER_NUMBER,
@@ -93,7 +91,7 @@ impl NfcTag {
&mut callback, &mut callback,
)?; )?;
syscalls::command(DRIVER_NUMBER, command_nr::RECEIVE, 0, 0)?; syscalls::command(DRIVER_NUMBER, command_nr::RECEIVE, 0, 0)?;
util::yieldk_for(|| done.get()); util::yieldk_for(|| recv_amount.get().is_some());
mem::drop(subscription); mem::drop(subscription);
mem::drop(result); mem::drop(result);
Ok(RecvOp { Ok(RecvOp {
@@ -108,19 +106,15 @@ impl NfcTag {
pub fn transmit(buf: &mut [u8], amount: usize) -> Result<usize, TockError> { pub fn transmit(buf: &mut [u8], amount: usize) -> Result<usize, TockError> {
let result = syscalls::allow(DRIVER_NUMBER, allow_nr::TRANSMIT, buf)?; let result = syscalls::allow(DRIVER_NUMBER, allow_nr::TRANSMIT, buf)?;
// set callback with 1 argument, to receive ReturnCode // set callback with 1 argument, to receive ReturnCode
let done = Cell::new(false);
let result_code = Cell::new(None); let result_code = Cell::new(None);
let mut callback = |result| { let mut callback = |result| result_code.set(Some(result));
result_code.set(Some(result));
done.set(true)
};
let subscription = syscalls::subscribe::<callback::Identity1Consumer, _>( let subscription = syscalls::subscribe::<callback::Identity1Consumer, _>(
DRIVER_NUMBER, DRIVER_NUMBER,
subscribe_nr::TRANSMIT, subscribe_nr::TRANSMIT,
&mut callback, &mut callback,
)?; )?;
syscalls::command(DRIVER_NUMBER, command_nr::TRANSMIT, amount, 0)?; syscalls::command(DRIVER_NUMBER, command_nr::TRANSMIT, amount, 0)?;
util::yieldk_for(|| done.get()); util::yieldk_for(|| result_code.get().is_some());
mem::drop(subscription); mem::drop(subscription);
mem::drop(result); mem::drop(result);
Ok(result_code.get().unwrap()) Ok(result_code.get().unwrap())