Функции WinUSB для изменения политики канала
Чтобы разрешить приложениям получать и задавать параметры политики по умолчанию для канала конечной точки, Winusb.dll предоставляет функцию WinUsb_GetPipePolicy для получения политики канала по умолчанию. Функция WinUsb_SetPipePolicy позволяет приложению задать для параметра политики новое значение.
WinUSB позволяет изменять поведение по умолчанию, применяя политики к каналу конечной точки. С помощью этих политик можно настроить WinUSB в соответствии с его возможностями. В следующей таблице приведен список политик канала, поддерживаемых WinUSB.
Примечание
Политики, описанные в таблице, допустимы только для указанных конечных точек. Установка политики на других конечных точках не влияет на поведение WinUSB для запросов на чтение или запись.
Номер политики | Имя политики | Описание | Конечная точка (направление) | Значение по умолчанию |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Отправляет пакет нулевой длины для запроса на запись, в котором буфер кратен максимальному размеру пакета, поддерживаемому конечной точкой. | Массовый (OUT) Прерывание (OUT) |
Ложь. |
0x02 | AUTO_CLEAR_STALL | Автоматически очищает остановленный канал без остановки потока данных. | Массовый (IN) Прерывание (IN) |
Ложь. |
0x03 | PIPE_TRANSFER_TIMEOUT | Ожидает интервал времени ожидания (в миллисекундах) перед отменой запроса. | Массовый (IN) Массовый (OUT) Прерывание (IN) Прерывание (OUT) |
5 секунд (5000 миллисекунд) для управления; 0 для других |
0x04 | IGNORE_SHORT_PACKETS | Выполняет запрос на чтение при получении короткого пакета или при чтении определенного количества байтов. Если размер файла неизвестен, запрос завершается коротким пакетом. | Массовый (IN) Прерывание (IN) |
Ложь. |
0x05 | ALLOW_PARTIAL_READS | Разрешает запросы на чтение с устройства, которое возвращает больше данных, чем запрошено вызывающим. | Массовый (IN) Прерывание (IN) |
TRUE |
0x06 | AUTO_FLUSH | Сохраняет лишние данные из запроса на чтение и добавляет их в следующий запрос на чтение или удаляет лишние данные. | Массовый (IN) Прерывание (IN) |
Ложь. |
0x07 | RAW_IO | Обход очереди и обработка ошибок для повышения производительности для нескольких запросов на чтение. | Массовый (IN) Прерывание (IN) |
Ложь. |
0x08 | MAXIMUM_TRANSFER_SIZE | Возвращает максимальный размер usb-передачи, поддерживаемой WinUSB. Это политика только для чтения, которую можно получить, вызвав WinUsb_GetPipePolicy. | Массовый (IN) Массовый (OUT) Прерывание (IN) Прерывание (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Сбрасывает канал конечной точки после возобновления приостановки перед приемом новых запросов. | Массовый (IN) Массовый (OUT) Прерывание (IN) Прерывание (OUT) |
Ложь. |
В следующей таблице приведены рекомендации по использованию каждой из политик конвейера, а также описано поведение, полученное при включении политики.
Политика | Включить, если... | Поведение |
---|---|---|
SHORT_PACKET_TERMINATE(0x01) | Устройство должно завершить передачу out с пакетом нулевой длины. Большинство устройств не имеют этого требования. | Если параметр политики включен (значение параметра политики равно TRUE или ненулевому), каждый запрос на запись, кратный максимальному размеру пакета, поддерживаемого конечной точкой, следует пакет нулевой длины. После отправки данных на контроллер узла WinUSB отправляет запрос на запись с пакетом нулевой длины, а затем завершает запрос, созданный WinUsb_WritePipe. |
AUTO_CLEAR_STALL | Вы не хотите, чтобы неудачные передачи оставляли конечную точку в зависаемом состоянии. Эта политика полезна только при наличии нескольких ожидающих запросов на чтение к конечной точке при отключении RAW_IO. |
|
PIPE_TRANSFER_TIMEOUT | Ожидается, что передача данных в конечную точку завершится в течение определенного времени. |
|
IGNORE_SHORT_PACKETS | RAW_IO отключена, и вы не хотите, чтобы короткие пакеты выполняли запросы на чтение. |
|
ALLOW_PARTIAL_READS | Устройство может отправить больше данных, чем запрошено, если размер буфера запросов кратен максимальному размеру пакета конечной точки. Используйте , если приложение хочет прочитать несколько байтов, чтобы определить, сколько байтов необходимо прочитать. |
|
AUTO_FLUSH | ALLOW_PARTIAL_READS политика включена. Устройство может отправлять больше данных, чем было запрошено, и приложению не требуются другие данные. Это возможно, если размер буфера запросов кратен максимальному размеру пакета конечной точки. |
AUTO_FLUSH определяет поведение WinUSB при включении ALLOW_PARTIAL_READS. Если ALLOW_PARTIAL_READS отключен, winUSB игнорирует значение AUTO_FLUSH. WinUSB может либо удалить оставшиеся данные, либо отправить их с помощью следующего запроса на чтение вызывающей стороны.
|
RAW_IO | Производительность является приоритетом, и приложение отправляет одновременные запросы на чтение в одну и ту же конечную точку. RAW_IO накладывает определенные ограничения на буфер, передаваемый вызывающим объектом в WinUsb_ReadPipe:
|
Если этот параметр включен, передает обход очередей и обработку ошибок, чтобы повысить производительность для нескольких запросов на чтение. WinUSB обрабатывает запросы на чтение следующим образом:
Включение этого параметра значительно повышает производительность нескольких запросов на чтение, уменьшая задержку между последним пакетом одной передачи и первым пакетом следующей передачи. |
RESET_PIPE_ON_RESUME | Устройство не сохраняет состояние переключения данных при приостановке. | При возобновлении из приостановки WinUSB сбрасывает конечную точку, прежде чем позволит вызывающему объекту отправлять новые запросы к конечной точке. |
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по