파이프 정책 수정을 위한 WinUSB 함수
애플리케이션이 엔드포인트 파이프의 기본 정책 매개 변수를 가져와서 설정할 수 있도록 하려면 Winusb.dll 파이프의 기본 정책을 검색하는 WinUsb_GetPipePolicy 함수를 노출합니다. WinUsb_SetPipePolicy 함수를 사용하면 애플리케이션에서 정책 매개 변수를 새 값으로 설정할 수 있습니다.
WinUSB를 사용하면 엔드포인트의 파이프에 정책을 적용하여 기본 동작을 수정할 수 있습니다. 이러한 정책을 사용하면 디바이스를 해당 기능에 가장 잘 일치하도록 WinUSB를 구성할 수 있습니다. 다음 표에서는 WinUSB에서 지원하는 파이프 정책 목록을 제공합니다.
참고 테이블에 설명된 정책은 지정된 엔드포인트에 대해서만 유효합니다. 다른 엔드포인트에서 정책을 설정해도 읽기 또는 쓰기 요청에 대한 WinUSB의 동작에는 영향을 주지 않습니다.
| 정책 번호 | 정책 이름 | Description | 엔드포인트(방향) | 기본값 |
|---|---|---|---|---|
| 0x01 | SHORT_PACKET_TERMINATE | 버퍼가 엔드포인트에서 지원하는 최대 패킷 크기의 배수인 쓰기 요청에 대해 길이가 0인 패킷을 보냅니다. | 대량(OUT) 인터럽트(OUT) |
FALSE |
| 0x02 | AUTO_CLEAR_STALL | 데이터 흐름을 중지하지 않고 중단된 파이프를 자동으로 지웁니다. | 대량(IN) 인터럽트(IN) |
FALSE |
| 0x03 | PIPE_TRANSFER_TIMEOUT | 요청을 취소하기 전에 시간 제한 간격(밀리초)을 기다립니다. | 대량(IN) 대량(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 | WinUSB에서 지원하는 USB 전송의 최대 크기를 가져옵니다. WinUsb_GetPipePolicy 호출하여 검색할 수 있는 읽기 전용 정책입니다. | 대량(IN) 대량(OUT) 인터럽트(IN) 인터럽트(OUT) |
|
| 0x09 | RESET_PIPE_ON_RESUME | 새 요청을 수락하기 전에 일시 중단에서 다시 시작한 후 엔드포인트의 파이프를 다시 설정합니다. | 대량(IN) 대량(OUT) 인터럽트(IN) 인터럽트(OUT) |
FALSE |
다음 표에서는 각 파이프 정책을 사용하는 방법에 대한 모범 사례를 식별하고 정책을 사용할 때의 결과 동작에 대해 설명합니다.
| 정책 | 다음 경우 사용... | 동작 |
|---|---|---|
| SHORT_PACKET_TERMINATE(0x01) | 디바이스는 길이가 0인 패킷으로 OUT 전송을 종료해야 합니다. 대부분의 디바이스에는 이 요구 사항이 없습니다. | 사용하도록 설정된 경우(정책 매개 변수 값이 TRUE 또는 0이 아닌 경우) 엔드포인트에서 지원하는 최대 패킷 크기의 배수인 모든 쓰기 요청 뒤에 길이가 0인 패킷이 잇습니다. 호스트 컨트롤러에 데이터를 보낸 후 WinUSB는 길이가 0인 패킷으로 쓰기 요청을 보낸 다음 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 ALLOW_PARTIAL_READS 사용하도록 설정된 경우 WinUSB의 동작을 정의합니다. ALLOW_PARTIAL_READS 사용하지 않도록 설정하면 winUSB에서 AUTO_FLUSH 값이 무시됩니다. WinUSB는 나머지 데이터를 삭제하거나 호출자의 다음 읽기 요청과 함께 보낼 수 있습니다.
|
| RAW_IO | 성능은 우선 순위이며 애플리케이션은 동일한 엔드포인트에 동시 읽기 요청을 제출합니다.
RAW_IO WinUsb_ReadPipe 호출자가 전달하는 버 퍼에 특정 제한을 적용합니다.
|
사용하도록 설정된 경우 전송은 큐 및 오류 처리를 바이패스하여 여러 읽기 요청에 대한 성능을 향상시킵니다. WinUSB는 다음과 같이 읽기 요청을 처리합니다.
|
| RESET_PIPE_ON_RESUME | 디바이스는 일시 중단 시 데이터 토글 상태를 유지하지 않습니다. | 일시 중단에서 다시 시작되면 WinUSB는 호출자가 엔드포인트에 새 요청을 보낼 수 있도록 하기 전에 엔드포인트를 다시 설정합니다. |
관련 항목
WinUSB 전원 관리
WinUSB 아키텍처 및 모듈
USB 클라이언트 드라이버를 개발하기 위한 드라이버 모델 선택
WinUSB(Winusb.sys) 설치
WinUSB 함수를 사용하여 USB 디바이스에 액세스하는 방법
WinUSB 함수
WinUsb_GetPipePolicy
WinUsb_SetPipePolicy
WinUSB