Поделиться через


функция WinUsb_WritePipe (winusb.h)

Функция WinUsb_WritePipe записывает данные в канал.

Синтаксис

BOOL WinUsb_WritePipe(
  [in]            WINUSB_INTERFACE_HANDLE InterfaceHandle,
  [in]            UCHAR                   PipeID,
  [in]            PUCHAR                  Buffer,
  [in]            ULONG                   BufferLength,
  [out, optional] PULONG                  LengthTransferred,
  [in, optional]  LPOVERLAPPED            Overlapped
);

Параметры

[in] InterfaceHandle

Непрозрачный дескриптор интерфейса, содержащего конечную точку, с которой связан канал.

Для записи в канал, связанный с конечной точкой в первом интерфейсе, используйте дескриптор, возвращенный WinUsb_Initialize. Для всех остальных интерфейсов используйте дескриптор целевого интерфейса, полученный WinUsb_GetAssociatedInterface.

[in] PipeID

PipeID соответствует полю bEndpointAddress в дескрипторе конечной точки. Сведения о макете этого поля см. в таблице 9-13 статьи "Спецификация универсальной серийной шины редакции 2.0" на сайте USB Technology. В поле bEndpointAddress бит 7 указывает направление конечной точки: 0 для OUT; 1 для IN.

[in] Buffer

Выделенный вызывающим объектом буфер, содержащий данные для записи.

[in] BufferLength

Количество записываемых байтов. Это число должно быть меньше или равно размеру буфера (в байтах).

[out, optional] LengthTransferred

Указатель на переменную ULONG, которая получает фактическое количество байтов, записанных в канал. Дополнительные сведения см. в подразделе "Примечания".

[in, optional] Overlapped

Необязательный указатель на структуру OVERLAPPED, которая используется для асинхронных операций. Если этот параметр указан, WinUsb_WritePipe немедленно возвращается и событие получает сигнал по завершении операции.

Возвращаемое значение

WinUsb_WritePipe возвращает значение TRUE , если операция выполнена успешно. В противном случае эта функция возвращает значение FALSE, и вызывающий объект может получить зарегистрированную ошибку, вызвав Метод GetLastError.

GetLastError может вернуть следующий код ошибки.

Код возврата Описание
ERROR_INVALID_HANDLE
Вызывающий объект передал значение NULL в параметре InterfaceHandle .
ERROR_IO_PENDING
Указывает, что перекрывающаяся операция ввода-вывода выполняется, но не завершена. Если перекрывающаяся операция не может быть завершена немедленно, функция возвращает false , а функция GetLastError возвращает ERROR_IO_PENDING, указывая, что операция выполняется в фоновом режиме. Вызовите WinUsb_GetOverlappedResult, чтобы проверка успешной или неудачной операции.
ERROR_NOT_ENOUGH_MEMORY
Указывает, что для выполнения операции недостаточно памяти.
ERROR_SEM_TIMEOUT
Время ожидания операции записи, инициированной WinUsb_WritePipe в USB-стеке, истекло до завершения операции.

Комментарии

Чтобы создать запрос на запись, приложение должно выделить буфер, заполнить его данными, которые вы хотите записать на устройство, и отправить буфер на контроллер узла, вызвав WinUsb_WritePipe.

Если задано RAW_IO, к размеру буфера применяются следующие ограничения.

  • Длина буфера должна быть кратна максимальному размеру пакета конечной точки.
  • Длина должна быть меньше или равна значению MAXIMUM_TRANSFER_SIZE, полученному WinUsb_GetPipePolicy.
Нет ограничений на размер буфера, если RAW_IO не задан в качестве типа политики канала. Если размер буфера превышает максимальную длину передачи, сообщаемую MAXIMUM_TRANSFER_SIZE, WinUSB разделяет запрос на запросы меньшего размера и последовательно отправляет их на контроллер узла.

Запрос на запись, содержащий данные нулевой длины, пересылается в стек USB.

Если приложение передает значение NULL в параметре Overlapped (синхронная операция), оно должно убедиться, что LengthTransferred не имеет значения NULL, даже если операция не создает выходных данных.

Если параметр Overlapped не имеет значение NULL (асинхронная операция), параметру LengthTransferred можно присвоить значение NULL. Для перекрывающейся операции (и если LengthTransferred имеет значение, отличное от NULL ), значение, полученное в LengthTransferred после возврата WinUsb_WritePipe , не имеет смысла, пока перекрывающаяся операция не будет завершена. Чтобы получить фактическое количество возвращенных байтов, вызовите WinUsb_GetOverlappedResult.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть winusb.h (включая Winusb.h)
Библиотека Winusb.lib
DLL Winusb.dll

См. также раздел

WinUSB

Функции WinUSB

WinUsb_Initialize