summary refs log tree commit diff
path: root/usb_util
diff options
context:
space:
mode:
Diffstat (limited to 'usb_util')
-rw-r--r--usb_util/src/device_handle.rs4
-rw-r--r--usb_util/src/usb_transfer.rs15
2 files changed, 7 insertions, 12 deletions
diff --git a/usb_util/src/device_handle.rs b/usb_util/src/device_handle.rs
index 77a91be..17b0f68 100644
--- a/usb_util/src/device_handle.rs
+++ b/usb_util/src/device_handle.rs
@@ -9,7 +9,7 @@ use crate::bindings;
 use crate::error::{Error, Result};
 use crate::libusb_context::LibUsbContextInner;
 use crate::libusb_device::LibUsbDevice;
-use crate::usb_transfer::{UsbTransfer, UsbTransferBuffer};
+use crate::usb_transfer::{TransferCanceller, UsbTransfer, UsbTransferBuffer};
 
 /// DeviceHandle wraps libusb_device_handle.
 pub struct DeviceHandle {
@@ -155,7 +155,7 @@ impl DeviceHandle {
     pub fn submit_async_transfer<T: UsbTransferBuffer>(
         &self,
         transfer: UsbTransfer<T>,
-    ) -> Result<()> {
+    ) -> Result<TransferCanceller> {
         unsafe { transfer.submit(self.handle) }
     }
 }
diff --git a/usb_util/src/usb_transfer.rs b/usb_util/src/usb_transfer.rs
index e08bc92..e3ca623 100644
--- a/usb_util/src/usb_transfer.rs
+++ b/usb_util/src/usb_transfer.rs
@@ -241,14 +241,6 @@ impl<T: UsbTransferBuffer> UsbTransfer<T> {
         UsbTransfer { inner }
     }
 
-    /// Get canceller of this transfer.
-    pub fn get_canceller(&self) -> TransferCanceller {
-        let weak_transfer = Arc::downgrade(&self.inner.transfer);
-        TransferCanceller {
-            transfer: weak_transfer,
-        }
-    }
-
     /// Set callback function for transfer completion.
     pub fn set_callback<C: 'static + Fn(UsbTransfer<T>) + Send>(&mut self, cb: C) {
         self.inner.callback = Some(Box::new(cb));
@@ -287,11 +279,14 @@ impl<T: UsbTransferBuffer> UsbTransfer<T> {
     ///
     /// Assumes libusb_device_handle is an handled opened by libusb, self.inner.transfer.ptr is
     /// initialized with correct buffer and length.
-    pub unsafe fn submit(self, handle: *mut libusb_device_handle) -> Result<()> {
+    pub unsafe fn submit(self, handle: *mut libusb_device_handle) -> Result<TransferCanceller> {
+        let weak_transfer = Arc::downgrade(&self.inner.transfer);
         let transfer = self.into_raw();
         (*transfer).dev_handle = handle;
         match Error::from(libusb_submit_transfer(transfer)) {
-            Error::Success(_e) => Ok(()),
+            Error::Success(_e) => Ok(TransferCanceller {
+                transfer: weak_transfer,
+            }),
             err => {
                 UsbTransfer::<T>::from_raw(transfer);
                 Err(err)