функция 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 может вернуть следующий код ошибки.
Код возврата | Описание |
---|---|
|
Вызывающий объект передал значение NULL в параметре InterfaceHandle . |
|
Указывает, что перекрывающаяся операция ввода-вывода выполняется, но не завершена. Если перекрывающаяся операция не может быть завершена немедленно, функция возвращает false , а функция GetLastError возвращает ERROR_IO_PENDING, указывая, что операция выполняется в фоновом режиме. Вызовите WinUsb_GetOverlappedResult, чтобы проверка успешной или неудачной операции. |
|
Указывает, что для выполнения операции недостаточно памяти. |
|
Время ожидания операции записи, инициированной WinUsb_WritePipe в USB-стеке, истекло до завершения операции. |
Комментарии
Чтобы создать запрос на запись, приложение должно выделить буфер, заполнить его данными, которые вы хотите записать на устройство, и отправить буфер на контроллер узла, вызвав WinUsb_WritePipe.
Если задано RAW_IO, к размеру буфера применяются следующие ограничения.
- Длина буфера должна быть кратна максимальному размеру пакета конечной точки.
- Длина должна быть меньше или равна значению MAXIMUM_TRANSFER_SIZE, полученному WinUsb_GetPipePolicy.
Запрос на запись, содержащий данные нулевой длины, пересылается в стек 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 |