USB 호스트 컨트롤러 드라이버에서 USB 엔드포인트 구성
UCX는 엔드포인트 개체 만들기를 관리하고 호스트 컨트롤러에 엔드포인트를 프로그래밍하거나 USB 호스트 컨트롤러로 프로그래밍 해제하도록 알 수 있습니다.
엔드포인트는 프로그래밍되지만 UCX에서도 관리됩니다. 디바이스가 버스에 연결 및 연결 해제되고, 일시 중단 및 다시 설정과 같은 전원 이벤트를 경험하고, 대체 설정 변경과 같은 새 엔드포인트 만들기를 수행하면 엔드포인트 상태가 변경됩니다.
엔드포인트 구성
UCX는 호스트 컨트롤러 드라이버가 구현한 콜백 함수를 호출하여 엔드포인트가 USB 호스트 컨트롤러로 프로그래밍되거나 해제되어야 하는 경우 드라이버에 알립니다. EVT_UCX_USBDEVICE_ENABLE 호출되면 드라이버는 디바이스의 기본 엔드포인트로 전송을 수행하기 위해 컨트롤러를 준비합니다. 컨트롤러 준비에는 기본 엔드포인트 프로그래밍이 포함됩니다. EVT_UCX_USBDEVICE_DISABLE 호출되면 드라이버는 기본 엔드포인트의 프로그래밍을 해제하고 디바이스와 연결된 다른 컨트롤러 리소스를 해제합니다. EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE 호출되면 드라이버에 컨트롤러로 프로그래밍할 기본이 아닌 엔드포인트 목록이 제공되고 컨트롤러에서 제거할 기본이 아닌 엔드포인트의 또 다른 목록이 제공됩니다. 그런 다음 호스트 컨트롤러 드라이버는 지정된 기본이 아닌 엔드포인트를 컨트롤러에 프로그래밍하고 컨트롤러에서 기본이 아닌 엔드포인트(다른 목록에 지정됨)도 제거합니다.
큐 상태 관리
UCX는 호스트 컨트롤러 드라이버에서 구현한 콜백 함수를 호출하여 엔드포인트 큐 상태를 변경합니다. 그런 다음 드라이버는 UCX에 지정된 엔드포인트 큐와 드라이버 내에서 유지 관리되는 두 번째 수준 큐에서 해당 작업을 수행합니다. 엔드포인트 큐는 다음 시나리오에서 중단되거나 제거됩니다.
- USB 디바이스 클라이언트 드라이버는 URB_FUNCTION_ABORT_PIPE 요청을 보냅니다.
- 일시 중단 중.
- 디바이스가 연결된 허브에서 디바이스 연결 끊김을 감지합니다.
- 선택 인터페이스 설정 요청 중.
호스트 컨트롤러 드라이버에 큐 중단 또는 제거에 대해 알리기 위해 UCX는 EVT_UCX_ENDPOINT_ABORT 또는 EVT_UCX_ENDPOINT_PURGE 호출합니다. 나중에 UCX에서 엔드포인트 큐가 필요한 경우 UCX는 EVT_UCX_ENDPOINT_START 콜백을 호출하여 드라이버에 큐를 시작하도록 알립니다.
전송 취소
호스트 컨트롤러 드라이버가 GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL 선언하는 컨트롤러의 경우 드라이버는 UcxEndpointNeedToCancelTransfers 를 호출하고 TT(Transaction Translator) 허브 뒤에 있는 USB 전체 또는 저속 디바이스로의 비동기(대량 또는 제어) USB 전송을 취소하기 위한 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 구현해야 합니다. 다른 모든 경우에서 드라이버는 선택적으로 UcxEndpointNeedToCancelTransfers 를 호출하여 이 엔드포인트에서 전송 취소가 허용되고 드라이버가 전송 취소를 진행할 수 있음을 나타내는 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 알림을 가져올 수 있습니다. 또는 드라이버는 UcxEndpointNeedToCancelTransfers를 호출하지 않고 직접 전송을 취소할 수 있습니다.
호스트 컨트롤러 드라이버가 항상 이 GUID에 대한 요청에 실패하는 경우 이러한 두 함수 호출을 완전히 무시할 수 있습니다.
드라이버가 UcxEndpointNeedToCancelTransfers를 호출하지 않으면 드라이버의 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 콜백이 호출되지 않으며 콜백 등록 중에 NULL이 될 수 있습니다.
드라이버가 UcxEndpointNeedToCancelTransfers를 사용하려는 경우 전송이 컨트롤러로 프로그래밍된 후 취소된 후 완료되기 전에 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 대기할 때 드라이버가 메서드를 호출해야 합니다.