Winusb WinUsb_SetPipePolicy函数的使用

在项目过程中用 WinUsb_ReadPipe函数异步读取usb device数据;用

WinUsb_GetOverlappedResult()函数获取读取的结果长度;测试demo的数据长度是从1056byte 按8byte 步长往上涨的, 当跑到2MB+1032byte的时候,上位机就会少收取8字节就结束了,而少收的这8字节就进入到了下一次请求的结果中;用usb分析仪抓包下位机发送的数据并没有错误;

遇到问题不会就是百度啊,这是万能的解决方法,遇到这一篇帖子基于WinUSB的异步方式bulk传输的稳定性问题_褐色狸花猫的博客-CSDN博客_usb的通信稳定性

猜测,这个问题肯定与WinUsb_SetPipePolicy有关,果不其然,还真与其有关;

微软官方文档中对于管道策略(用于管道策略修改的 WinUSB 函数 - Windows drivers | Microsoft Docs)的介绍有这么一个参数:

对于这个参数的解释如下:

 

于是使用WinUsb_SetPipePolicy()将管道策略设置成了IGNORE_SHORT_PACKETS,问题就完美解决了。

    ULONG timeout;
    timeout = TRUE;
    WinUsb_SetPipePolicy(usbInterface->usbHandle, 0x87, IGNORE_SHORT_PACKETS, sizeof(ULONG), &timeout);
BOOL WinUsb_ReadPipe(
  [in]            WINUSB_INTERFACE_HANDLE InterfaceHandle,
  [in]            UCHAR                   PipeID,
  [out]           PUCHAR                  Buffer,
  [in]            ULONG                   BufferLength,
  [out, optional] PULONG                  LengthTransferred,
  [in, optional]  LPOVERLAPPED            Overlapped
);
BOOL WinUsb_GetOverlappedResult(
  [in]  WINUSB_INTERFACE_HANDLE InterfaceHandle,
  [in]  LPOVERLAPPED            lpOverlapped,
  [out] LPDWORD                 lpNumberOfBytesTransferred,
  [in]  BOOL                    bWait
);
BOOL WinUsb_SetPipePolicy(
  [in] WINUSB_INTERFACE_HANDLE InterfaceHandle,
  [in] UCHAR                   PipeID,
  [in] ULONG                   PolicyType,
  [in] ULONG                   ValueLength,
  [in] PVOID                   Value
);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值