Функции WinUSB для изменения политики канала
Чтобы приложения могли получать и задавать параметры политики политики канала конечной точки по умолчанию, Winusb.dll предоставляет функцию WinUsb_GetPipePolicy для получения политики по умолчанию канала. Функция WinUsb_SetPipePolicy позволяет приложению задать параметр политики новым значением.
WinUSB позволяет изменить поведение по умолчанию, применяя политики к каналу конечной точки. С помощью этих политик вы можете настроить WinUSB для оптимального соответствия устройств своим возможностям. В следующей таблице приведен список политик канала, поддерживаемых WinUSB.
Примечание.
Политики, описанные в таблице, допустимы только для указанных конечных точек. Настройка политики на других конечных точках не влияет на поведение WinUSB для запросов на чтение или запись.
Номер политики | Имя политики | Description | Конечная точка (направление) | Default value |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Отправляет пакет нулевой длины для запроса на запись, в котором буфер является нескольким из максимального размера пакета, поддерживаемого конечной точкой. | Bulk (OUT) Прерывание (OUT) |
FALSE |
0x02 | AUTO_CLEAR_STALL | Автоматически очищает застойный канал без остановки потока данных. | Массовый (IN) Прерывание (IN) |
FALSE |
0x03 | PIPE_TRANSFER_TIMEOUT | Ожидает интервал времени ожидания в миллисекундах перед отменой запроса. | Массовый (IN) Bulk (OUT) Прерывание (IN) Прерывание (OUT) |
5 секунд (5000 миллисекунд) для управления; 0 для других |
0x04 | IGNORE_SHORT_PACKETS | Завершает запрос на чтение при получении короткого пакета или определенного количества байтов. Если размер файла неизвестен, запрос завершается по короткому пакету. | Массовый (IN) Прерывание (IN) |
FALSE |
0x05 | ALLOW_PARTIAL_READS | Разрешает чтение запросов с устройства, которое возвращает больше данных, чем запрашивается вызывающим абонентом. | Массовый (IN) Прерывание (IN) |
TRUE |
0x06 | AUTO_FLUSH | Сохраняет избыточные данные из запроса на чтение и добавляет его в следующий запрос на чтение или удаляет избыточные данные. | Массовый (IN) Прерывание (IN) |
FALSE |
0x07 | RAW_IO | Пропускает очередь и обработку ошибок для повышения производительности для нескольких запросов на чтение. | Массовый (IN) Прерывание (IN) |
FALSE |
0x08 | MAXIMUM_TRANSFER_SIZE | Возвращает максимальный размер USB-передачи, поддерживаемой WinUSB. Это политика только для чтения, которую можно получить путем вызова WinUsb_GetPipePolicy. | Массовый (IN) Bulk (OUT) Прерывание (IN) Прерывание (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Сбрасывает канал конечной точки после возобновления приостановки перед принятием новых запросов. | Массовый (IN) Bulk (OUT) Прерывание (IN) Прерывание (OUT) |
FALSE |
В следующей таблице описаны рекомендации по использованию каждой из политик канала и описание результирующего поведения при включении политики.
Политика | Включите, если... | Поведение |
---|---|---|
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 отключен, значение AUTO_FLUSH игнорируется WinUSB. WinUSB может отменить оставшиеся данные или отправить его с помощью следующего запроса на чтение вызывающего средства.
|
RAW_IO | Производительность является приоритетом, и приложение отправляет одновременные запросы на чтение в ту же конечную точку. RAW_IO накладывает определенные ограничения на буфер, передаваемый вызывающим объектом в WinUsb_ReadPipe:
|
Если этот параметр включен, передача обхода очереди и обработки ошибок для повышения производительности для нескольких запросов на чтение. WinUSB обрабатывает запросы на чтение следующим образом:
Включение этого параметра значительно повышает производительность нескольких запросов на чтение, уменьшая задержку между последним пакетом одной передачи и первым пакетом следующей передачи. |
RESET_PIPE_ON_RESUME | Устройство не сохраняет состояние переключения данных во время приостановки. | При возобновлении приостановки WinUSB сбрасывает конечную точку, прежде чем разрешить вызывающему объекту отправлять новые запросы в конечную точку. |