dfuse-tool icon indicating copy to clipboard operation
dfuse-tool copied to clipboard

DfuDevice.get_status() does not handle STALL

Open mobilinkd opened this issue 8 years ago • 0 comments

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.

mobilinkd avatar Mar 25 '17 16:03 mobilinkd