USBD_PIPE_INFORMATION 구조체(usb.h)

USBD_PIPE_INFORMATION 구조는 USB 클라이언트 드라이버가 특정 인터페이스의 파이프에 대한 정보를 보관하는 데 사용됩니다.

구문

typedef struct _USBD_PIPE_INFORMATION {
  USHORT           MaximumPacketSize;
  UCHAR            EndpointAddress;
  UCHAR            Interval;
  USBD_PIPE_TYPE   PipeType;
  USBD_PIPE_HANDLE PipeHandle;
  ULONG            MaximumTransferSize;
  ULONG            PipeFlags;
} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;

멤버

MaximumPacketSize

이 파이프가 처리하는 최대 패킷 크기(바이트)를 지정합니다. 이 값은 엔드포인트 설명자의 wMaxPacketSize 값보다 작거나 같아야 합니다. USBD_PF_CHANGE_MAX_PACKET 플래그가 PipeFlags 멤버에 설정되지 않은 경우 USB 스택은 이 값을 무시합니다.

고속 등시 엔드포인트의 경우 수신된 MaximumPacketSize 값에는 엔드포인트가 지원하는 경우 추가 트랜잭션에서 전송할 수 있는 바이트 수가 포함됩니다. 자세한 내용은 설명 부분을 참조하세요.

EndpointAddress

이 파이프의 버스 주소를 지정합니다.

Interval

해당 엔드포인트 설명자(USB_ENDPOINT_DESCRIPTOR)의 bInterval 필드로 표시된 폴링 간격을 포함합니다. 이 값은 인터럽트 및 등시 파이프에만 유효합니다. 다른 유형의 파이프의 경우 이 값을 무시해야 합니다. 펌웨어에서 디바이스의 구성을 반영합니다. 드라이버는 변경할 수 없습니다.

폴링 간격은 디바이스의 속도 및 호스트 컨트롤러 유형과 함께 드라이버가 전송을 시작해야 하는 빈도를 결정합니다. Interval의 값은 고정된 시간을 나타내지 않습니다. 상대 값이며, 실제 폴링 빈도는 디바이스 및 USB 호스트 컨트롤러가 낮음, 전체 또는 고속으로 작동하는지 여부에 따라 달라집니다.

호스트 컨트롤러 또는 디바이스가 저속으로 작동하는 경우 전송 기간("폴링 기간"이라고도 함)은 1밀리초 프레임 단위로 측정되며 기간은 다음 표에 표시된 대로 Interval 의 값과 관련이 있습니다.

간격 폴링 기간(1밀리초 프레임) Interrupt 등시
0~15 8 지원됩니다. 지원되지 않습니다.
16-35 16 지원됩니다. 지원되지 않습니다.
36-255 32 지원됩니다. 지원되지 않습니다.
 

최대 속도로 작동할 수 있는 디바이스 및 호스트 컨트롤러의 경우 이 기간은 1밀리초 프레임 단위로 측정됩니다. 전속 등시 전송의 경우 Interval 값과 폴링 기간은 항상 1입니다. 이 값은 모든 프레임에서 데이터를 전송할 수 있음을 나타냅니다. 전속 인터럽트 전송의 경우 폴링 기간은 Interval 값에서 파생됩니다. 다음 표에서는 인터럽트 및 등시 엔드포인트에 대해 지원되는 값을 나타냅니다.

간격 폴링 기간(1밀리초 프레임) Interrupt 등시
1 1 지원됨. 지원됨.
2~3개 2 지원됩니다. 지원되지 않습니다.
4-7 4 지원됩니다. 지원되지 않습니다.
8~15 8 지원됩니다. 지원되지 않습니다.
16-31 16 지원됩니다. 지원되지 않습니다.
32-255 32 지원됩니다. 지원되지 않습니다.
 

고속으로 작동할 수 있는 디바이스 및 호스트 컨트롤러의 경우 해당 기간은 마이크로프레임 단위로 측정됩니다. 폴링 기간은 수식을 Polling period = 2 ** (Interval - 1)사용하여 Interval 값에서 파생됩니다. 계산된 값은 다음 표에 표시됩니다.

간격 폴링 기간(마이크로프레임) Interrupt 등시
1 1 지원됨. 지원됨.
2 2 지원됨. 지원됨.
3 4 지원됨. 지원됨.
4 8 지원됨. 지원됨.
5 16 지원됩니다. 지원되지 않습니다.
6-255 32 지원됩니다. 지원되지 않습니다.
 

고속 등시 전송에 대해 지원되는 폴링 기간은 1, 2, 4 및 8입니다. 클라이언트 드라이버가 폴링 기간이 8보다 큰 고속 등시 엔드포인트에 대한 URB_FUNCTION_ISOCH_TRANSFER 요청을 제출하는 경우 상태 USBD_STATUS_INVALID_PARAMETER 요청이 실패합니다. 등시 전송에 대한 자세한 내용은 USB 등시 엔드포인트로 데이터를 전송하는 방법을 참조하세요.

마침표와 폴링 간격 간의 이전 테이블의 매핑은 Microsoft Windows 2000 이상 버전의 Windows 운영 체제에서 유효합니다.

PipeType

이 파이프에서 사용하는 전송 유형을 지정합니다. 이러한 값은 USBD_PIPE_TYPE 열거형에 정의됩니다.

PipeHandle

대량 또는 인터럽트 파이프에 대한 불투명 핸들을 지정합니다. 호스트 컨트롤러 드라이버는 클라이언트 드라이버가 URB_FUNCTION_SELECT_CONFIGURATION 형식의 URB를 사용하여 디바이스 구성을 선택하거나 클라이언트 드라이버가 URB_FUNCTION_SELECT_INTERFACE 형식의 URB를 사용하는 인터페이스에 대한 설정을 변경할 때 이 핸들을 반환합니다.

MaximumTransferSize

이 파이프의 전송 요청에 대한 최대 크기(바이트)를 지정합니다. Windows Server 2003, Windows XP 이상 운영 체제에서 이 멤버는 사용되지 않으며 유효한 데이터를 포함하지 않습니다.

다양한 버전의 Windows에서 각 USB 엔드포인트 유형의 최대 전송 크기에 대한 자세한 내용은 USB 전송 및 패킷 크기를 참조하세요.

참고 WinUSB의 경우 MaximumTransferSize 를 사용하여 USB 전송의 최대 크기를 결정하지 마세요. 대신 WinUsb_GetPipePolicy 검색한 MAXIMUM_TRANSFER_SIZE 값을 사용합니다.
 

PipeFlags

드라이버가 파이프의 구성 가능한 특정 특성을 지정하는 데 사용할 수 있는 파이프 플래그의 비트 OR을 포함합니다. 드라이버는 함수 형식이 URB_FUNCTION_SELECT_CONFIGURATION URB 요청이 있는 USB 디바이스의 구성을 선택할 때 이러한 파이프 특성을 지정합니다.

다음 표에서는 각 파이프 플래그의 의미를 설명합니다.

플래그 이름 의미
USBD_PF_CHANGE_MAX_PACKET 드라이버가 MaximumPacketSize에 지정된 값으로 엔드포인트 최대 패킷 크기를 재정의하고 있음을 나타냅니다. 이 값은 파이프의 엔드포인트 설명자에 지정된 기본 최댓값보다 작거나 같아야 합니다.

설명

이 구조에는 디바이스의 인터페이스 설명자에서 검색된 엔드포인트에 대한 정보가 포함됩니다. 인터페이스 설명자에서 USBD_PIPE_INFORMATION 정보를 가져오는 방법에 대한 설명은 USB 디바이스에 대한 구성 선택 방법을 참조하세요.

MaximumPacketSize 값은 호스트 컨트롤러가 단일 트랜잭션의 엔드포인트에서 보내거나 받을 수 있는 최대 바이트 수를 나타내는 엔드포인트 설명자의 wMaxPacketSize 필드의 처음 11비트에서 파생됩니다.

일반적으로 고속 전송의 경우 호스트 컨트롤러는 마이크로프레임당 하나의 트랜잭션을 보내거나 받습니다. 그러나 고속, 높은 대역폭 등시 또는 인터럽트 엔드포인트는 추가 트랜잭션을 통해 더 높은 데이터 속도를 지원합니다. 이렇게 하면 호스트 컨트롤러가 단일 마이크로프레임에서 최대 3072바이트까지 전송할 수 있습니다. 해당 유형의 엔드포인트에서 지원되는 추가 트랜잭션 수는 wMaxPacketSize비트 12..11(최소 비트는 0)으로 표시됩니다. 이 숫자는 0, 1 또는 2일 수 있습니다. 12..11이 0을 나타내는 경우 마이크로프레임당 추가 트랜잭션은 엔드포인트에서 지원되지 않습니다. 숫자가 1이면 호스트 컨트롤러는 추가 트랜잭션(마이크로프레임당 총 2개의 트랜잭션)을 보낼 수 있습니다. 2는 두 개의 추가 트랜잭션(마이크로프레임당 총 3개의 트랜잭션)을 나타냅니다.

등시 엔드포인트(고속 및 고속 대역폭)에 대해 MaximumPacketSize 에서 받은 값은 호스트 컨트롤러가 엔드포인트에서 하나의 마이크로프레임으로 보내거나 받을 수 있는 총 바이트 수를 나타냅니다. 이 값에는 엔드포인트가 지원하는 경우 추가 트랜잭션의 바이트 수가 포함됩니다. 예를 들어 다음과 같은 등시 엔드포인트 특성을 고려합니다.

  • wMaxPacketSize 는 1,024입니다.
  • 비트 12..11 은 2를 나타냅니다.
  • 간격 은 1입니다.
앞의 예제에서 MaximumPacketSize 에서 받은 값은 3,072바이트(총 트랜잭션 * wMaxPacketSize)입니다. Interval이 1이므로 폴링 기간은 1입니다. 따라서 호스트 컨트롤러는 프레임의 각 마이크로프레임에서 3,072바이트를 전송할 수 있습니다. 단일 I/O 요청(하나의 URB에 설명됨)에서 호스트 컨트롤러는 24,576바이트 이하를 전송할 수 있습니다.

요구 사항

요구 사항
헤더 usb.h(Usb.h 포함)

추가 정보

USB 구조체

USB_ENDPOINT_DESCRIPTOR