Я работаю над драйвером и приложением для устройства USB для обновления прошивки через DFU. У меня есть USB-устройство, которое работает правильно. После этого я пытаюсь обновить прошивку устройства, а при загрузке прошивки я отсоединяю USB-кабель. Загрузка завершилась неудачно, как ожидалось. После этого я подключаю USB-устройство, и он находится в режиме DFU с продуктом 0xffff, потому что прошивка повреждена. Я пытаюсь запустить обновление снова, и каждый вызов IOUSBDevice :: DeviceRequest возвращает ошибку 0xe000404f (kIOUSBPipeStalled - Pipe застопорилась, ошибка должна быть очищена).DeviceRequest IOUSBDevice возвращает 0xe000404f на OS X
Я проверил с помощью USB Prober, а устройство в режиме DFU не имеет конечных точек. Я не уверен, как это работает, но похоже, что при вызове DeviceRequest используется нулевой канал. Так что, может быть, я должен назвать что-то вроде ClearPipeStall нулевой трубы для работы с устройством в режиме DFU с поврежденной прошивкой? Как мне это сделать? Если мое предположение неверно, как я могу решить эту проблему? После подключения устройства в режиме DFU я не выполняю никаких операций ввода-вывода, я просто получаю pid/vid и обнаруживаю объекты IOUSBDevice и IOUSBInterface (интерфейс DFU), как обычно.
На El Capitan я использую IOUSBHostInterface :: deviceRequest(), а также возвращает ошибку (но код ошибки отличается, я потерял код и не могу получить его прямо сейчас, потому что я установил Mavericks на своем Mac).