WinUsb_ReadIsochPipe function (winusb.h)

The WinUsb_ReadIsochPipe function reads data from an isochronous IN endpoint.

Syntax

BOOL WinUsb_ReadIsochPipe(
  [in]           WINUSB_ISOCH_BUFFER_HANDLE  BufferHandle,
  [in]           ULONG                       Offset,
  [in]           ULONG                       Length,
  [in, out]      PULONG                      FrameNumber,
  [in]           ULONG                       NumberOfPackets,
  [out]          PUSBD_ISO_PACKET_DESCRIPTOR IsoPacketDescriptors,
  [in, optional] LPOVERLAPPED                Overlapped
);

Parameters

[in] BufferHandle

An opaque handle to the transfer buffer that was registered by a previous call to WinUsb_RegisterIsochBuffer.

[in] Offset

Offset into the buffer relative to the start the transfer.

[in] Length

Length in bytes of the transfer buffer.

[in, out] FrameNumber

On input, indicates the starting frame number for the transfer. On output, contains the frame number of the frame that follows the last frame used in the transfer.

[in] NumberOfPackets

Total number of isochronous packets required to hold the transfer buffer. Also indicates the number of elements in the array pointed to by IsoPacketDescriptors.

[out] IsoPacketDescriptors

An array of USBD_ISO_PACKET_DESCRIPTOR structures. After the transfer completes, each element contains the status and size of the isochronous packet.

[in, optional] Overlapped

Pointer to an OVERLAPPED structure used for asynchronous operations.

Return value

WinUsb_ReadIsochPipe returns TRUE if the operation succeeds. Otherwise this function returns FALSE, and the caller can retrieve the logged error by calling GetLastError.

Remarks

WinUsb_ReadIsochPipe packetizes the transfer buffer so that in each 1ms interval, the host can receive the maximum bytes allowed per interval. The maximum bytes is as specified by the endpoint descriptor for full and high-speed endpoints, and endpoint companion descriptor for SuperSpeed endpoints. If the caller submits multiple read requests to stream data from the device, the transfer size should be a multiple of the maximum bytes per interval (as returned by WinUsb_QueryPipeEx) * 8 / interval.

Because of the transfer packaging used in the underlying kernel-mode interface, the lowest latency notification to an application or driver is 1ms intervals.

Requirements

Requirement Value
Minimum supported client Windows 8.1
Minimum supported server Windows Server 2012 R2
Target Platform Universal
Header winusb.h (include Winusb.h)
Library Winusb.lib
DLL Winusb.dll

See also

Send USB isochronous transfers from a WinUSB desktop app

WinUSB Functions