WinUSB
+ -

WinUSB使用WinUsb_WritePipe给USB设备写数据

2022-05-11 1241 0

WinUSB 提供了以下用于发送写入请求请求的函数:

  • WinUsb_WritePipe

写数据WinUsb_WritePipe

  • 分配一个缓冲区并使用要写入到设备的数据进行填充。 如果应用程序未将缓冲区大小设置为管道的策略RAW_IO,则缓冲区大小没有限制。 如有必要,WinUSB 会将缓冲区划分为适当大小的区块。 如果RAW_IO,则缓冲区的大小受 WinUSB 支持的最大传输大小限制。
  • 调用 WinUsb_WritePipe ,将缓冲区写入设备。 传递设备的 WinUSB 接口句柄、用于批量传出管道的管道标识符(如本主题的向设备查询 USB 描述符部分所述)和缓冲区。 函数在 bytesWritten 参数中返回实际写入到设备的字节数。 Overlapped 参数设置为 NULL 以请求同步操作。 若要执行异步写入请求,请将 Overlapped 设置为指向 OVERLAPPED 结构的指针。

包含长度为零的数据的写入请求将沿 USB 堆栈向下转发。 如果传输长度大于最大传输长度,则 WinUSB 会将该请求划分成长度为最大传输长度的较小请求,并按顺序提交它们。 下面的代码示例分配一个字符串,并将其发送到设备的批量传出终结点。

BOOL WriteToBulkEndpoint(WINUSB_INTERFACE_HANDLE hDeviceHandle, UCHAR* pID, ULONG* pcbWritten)
{
    if (hDeviceHandle==INVALID_HANDLE_VALUE || !pID || !pcbWritten)
    {
        return FALSE;
    }

    BOOL bResult = TRUE;

    UCHAR szBuffer[] = "Hello World";
    ULONG cbSize = strlen(szBuffer);
    ULONG cbSent = 0;

    bResult = WinUsb_WritePipe(hDeviceHandle, *pID, szBuffer, cbSize, &cbSent, 0);
    if(!bResult)
    {
        goto done;
    }

    printf("Wrote to pipe %d: %s \nActual data transferred: %d.\n", *pID, szBuffer, cbSent);
    *pcbWritten = cbSent;


done:
    return bResult;

}
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

WinUSB使用WinUsb_WritePipe给USB设备写数据
WinUSB 提供了以下用于发送写入请求请求的函数:WinUsb_WritePipe写数据WinUsb_WritePipe分配一个缓冲区并使用要写入到设备的数据进行填充。 如果应用程序未将缓冲区大小设置为管道的策略RAW_IO,则缓冲区大小没有限制。 如有必要,WinUSB 会将缓冲区划分为......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!