Понятие «IN объемного буфера конечной точки» не существует в спецификации USB. Отвечает ли устройство на IN PID с помощью DATA или NACK, полностью зависит от устройства. Ответ может быть сгенерирован на лету на основе состояния устройства или получен из внутреннего буфера. Хост не может знать, что буфер «пустой». Это то, что должно быть определено на более высоком уровне протокола между хостом и устройством.
Например, хост или устройство могут указывать объем данных, которые, как ожидается, будут переданы. Затем хост знает, сколько данных он может прочитать из конечной точки IN до завершения текущей операции. Вот как работает протокол USB Mass Storage.
Если протокол между хостом и устройством не определяет границы сообщений такого типа, лучший способ очистки в буфер - не пытаться. Вместо этого всегда читайте с конечной точки IN и интерпретируйте данные по мере их поступления. Это может включать использование setTimeout()
для проверки того, был ли получен ответ на конкретный запрос в течение заданного срока. Данные, полученные не в ответ на запрос, могут быть отброшены, если они неинтересны.