Replace the libusb_bulk_transfer with the same prepare-submit-wait

routine iso transfers use.
This commit is contained in:
Sebastian Zagrodzki
2017-02-10 21:46:12 +01:00
parent 9e50cd8c1c
commit c9c2757fe6

View File

@@ -20,6 +20,7 @@ import "C"
import ( import (
"fmt" "fmt"
"log"
"reflect" "reflect"
"time" "time"
"unsafe" "unsafe"
@@ -65,19 +66,23 @@ func bulk_xfer(e *endpoint, buf []byte, timeout time.Duration) (int, error) {
return 0, nil return 0, nil
} }
data := (*reflect.SliceHeader)(unsafe.Pointer(&buf)).Data t, err := e.newUSBTransfer(TRANSFER_TYPE_BULK, buf)
if err != nil {
var cnt C.int return 0, err
if errno := C.libusb_bulk_transfer(
e.handle,
C.uchar(e.Address),
(*C.uchar)(unsafe.Pointer(data)),
C.int(len(buf)),
&cnt,
C.uint(timeout/time.Millisecond)); errno < 0 {
return 0, usbError(errno)
} }
return int(cnt), nil defer t.free()
if err := t.submit(timeout); err != nil {
log.Printf("bulk: xfer failed to submit: %s", err)
return 0, err
}
n, err := t.wait(buf)
if err != nil {
log.Printf("bulk: xfer failed: %s", err)
return 0, err
}
return n, err
} }
func interrupt_xfer(e *endpoint, buf []byte, timeout time.Duration) (int, error) { func interrupt_xfer(e *endpoint, buf []byte, timeout time.Duration) (int, error) {