Skip to content

DfuDevice.get_status() does not handle STALL #7

@mobilinkd

Description

@mobilinkd
Flashing block 6
Traceback (most recent call last):
  File "./dfuse-tool.py", line 147, in <module>
    flash(args)
  File "./dfuse-tool.py", line 103, in flash
    status = dfu.wait_while_state(dfuse.DfuState.DFU_DOWNLOAD_BUSY)
  File "/home/rob/dfuse-tool/dfuse/DfuDevice.py", line 84, in wait_while_state
    status = self.get_status()
  File "/home/rob/dfuse-tool/dfuse/DfuDevice.py", line 51, in get_status
    status = self.control_msg(DFU_REQUEST_RECEIVE, DFU_GETSTATUS, 0, 6)
  File "/home/rob/dfuse-tool/dfuse/DfuDevice.py", line 39, in control_msg
    return self.dev.ctrl_transfer(requestType, request, value, self.intf.bInterfaceNumber, buffer)
  File "/usr/lib/python3.5/site-packages/usb/core.py", line 1043, in ctrl_transfer
    self.__get_timeout(timeout))
  File "/usr/lib/python3.5/site-packages/usb/backend/libusb1.py", line 883, in ctrl_transfer
    timeout))
  File "/usr/lib/python3.5/site-packages/usb/backend/libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 32] Pipe error

This is apparently because the EPIPE is not being handled properly at a lower level and converted into a stall status.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions