This fields contains binary data, and ctypes' c_char_type stops reading when encountering NULL byte. --- netmd/libusb1.py | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/netmd/libusb1.py b/netmd/libusb1.py index 6796860..4aae1ad 100644 --- a/netmd/libusb1.py +++ b/netmd/libusb1.py @@ -466,7 +466,7 @@ libusb_transfer._fields_ = [('dev_handle', libusb_device_handle_p), ('actual_length', c_int), ('callback', libusb_transfer_cb_fn_p), ('user_data', py_object), - ('buffer', c_char_p), + ('buffer', c_void_p), ('num_iso_packets', c_int), ('iso_packet_desc', libusb_iso_packet_descriptor_p) ] @@ -609,9 +609,9 @@ def libusb_control_transfer_get_data(transfer): def libusb_control_transfer_get_setup(transfer): return cast(transfer, libusb_control_setup_p) -def libusb_fill_control_setup(buffer, bmRequestType, bRequest, wValue, wIndex, +def libusb_fill_control_setup(setup_p, bmRequestType, bRequest, wValue, wIndex, wLength): - setup = cast(buffer, libusb_control_setup_p).contents + setup = cast(setup_p, libusb_control_setup_p).contents setup.bmRequestType = bmRequestType setup.bRequest = bRequest setup.wValue = libusb_cpu_to_le16(wValue) @@ -644,6 +644,7 @@ def libusb_fill_control_transfer(transfer_p, dev_handle, buffer, callback, setup = cast(buffer, libusb_control_setup_p).contents transfer.length = LIBUSB_CONTROL_SETUP_SIZE + \ libusb_le16_to_cpu(setup.wLength) + transfer.buffer = cast(buffer, c_void_p) transfer.user_data = user_data transfer.callback = callback @@ -654,7 +655,7 @@ def libusb_fill_bulk_transfer(transfer_p, dev_handle, endpoint, buffer, length, transfer.endpoint = endpoint transfer.type = LIBUSB_TRANSFER_TYPE_BULK transfer.timeout = timeout - transfer.buffer = buffer + transfer.buffer = cast(buffer, c_void_p) transfer.length = length transfer.user_data = user_data transfer.callback = callback @@ -666,7 +667,7 @@ def libusb_fill_interrupt_transfer(transfer_p, dev_handle, endpoint, buffer, transfer.endpoint = endpoint transfer.type = LIBUSB_TRANSFER_TYPE_INTERRUPT transfer.timeout = timeout - transfer.buffer = buffer + transfer.buffer = cast(buffer, c_void_p) transfer.length = length transfer.user_data = user_data transfer.callback = callback