Я пишу код для USB-устройства. Предположим, что хост USB начинает передачу управляющего чтения для чтения некоторых данных с устройства, а объем запрошенных данных (wLength в пакете настройки) кратен максимальному размеру пакета конечной точки 0. Затем, после того как хост получит все данные (в форме нескольких транзакций IN с пакетами данных максимального размера), инициирует ли он другую транзакцию IN, чтобы увидеть, есть ли еще данные, хотя их больше не может быть?
Вот примерная последовательность событий, которая меня интересует:
Я проверил это на своем компьютере (Windows Vista, если это имеет значение), и получил ответ нет : хост был достаточно умен, чтобы знать, что с устройства больше нельзя получать данные , даже если все пакеты, отправленные устройством, были полными (максимальный размер, разрешенный для конечной точки 0). Мне интересно, есть ли какие-нибудь хосты, которые недостаточно и будут пытаться выполнить другую транзакцию IN и ожидать получения пакета данных нулевой длины.
Я думаю, что прочитал соответствующие части спецификаций USB 2.0 и USB 3.0 с usb.org, но я не нашел решения этой проблемы. Я был бы признателен, если бы кто-нибудь мог указать мне нужный раздел в любом из этих документов.
Я знаю, что может потребоваться пакет нулевой длины, если устройство решит отправить меньше данных, чем хост, запрошенный в wLength.
] Я знаю, что могу сделать свой код достаточно гибким, чтобы справиться с любым случаем, но я надеюсь, что мне не придется этого делать.
Спасибо всем, кто может ответить на этот вопрос!