自定义HID应用程序开发(Windows)
+ -

自定义HID的异步操作示例

2021-09-14 734 0

自定义HID的异步操作和同步类似,这里有两个关键的区别:

  • 第一:CreateFile时wFlagsAndAttributes参数包括FILE_FLAG_OVERLAPPED标识。
  • 第二:ReadFile,WriteFile必须的OVERLAPPED参数;

异步CreateFile打开HID示例:


 HANDLE tmp_DeviceHandle = CreateFile(  strDevicePath,
                                         GENERIC_READ | GENERIC_WRITE,
                                         FILE_SHARE_READ | FILE_SHARE_WRITE,
                                         NULL, 
                                         OPEN_EXISTING,
                                         FILE_FLAG_OVERLAPPEDm//和同步的FILE_ATTRIBUTE_NORMAL参数不一样
                                         NULL);
        if (tmp_DeviceHandle == INVALID_HANDLE_VALUE)
        {
            CloseHandle(tmp_DeviceHandle);
            continue;
        }

异步ReadFile从自定义HID读数据

以下内容为截取并整理github hidapi的代码片段,详见:HidApi库来进行开发,下载地址是https://github.com/yigityuce/HidApi

 OVERLAPPED ol;
 memset(&ol, 0, sizeof(ol));
 ol.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 isok = ReadFile(tmp_DeviceHandle, data, 64, &rtn, NULL);
 if (!isok)
 {
    if (GetLastError() != ERROR_IO_PENDING) 
    {
        /* ReadFile() has failed.
           Clean up and return error. */
        CancelIo(dev->device_handle);
        dev->read_pending = FALSE;
        goto end_of_function;
    }
    else
    {
        res = WaitForSingleObject(ol.hEvent, 500);
        if (res != WAIT_OBJECT_0)
        {
            /* There was no data this time. Return zero bytes available,
               but leave the Overlapped I/O running. */
            return 0;
        }
        res = GetOverlappedResult(tmp_DeviceHandle, &ol, &rtn, TRUE/*wait*/);
    }
 }

异步WritelFile写数据到自定义HID

以下内容为截取并整理github hidapi的代码片段,详见:HidApi库来进行开发,下载地址是https://github.com/yigityuce/HidApi

 OVERLAPPED ol;
 memset(&ol, 0, sizeof(ol));
 ol.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 isok = WritleFile(tmp_DeviceHandle, data, 64, &rtn, NULL);
 if (!isok)
 {
    if (GetLastError() != ERROR_IO_PENDING) 
    {

    }
    else
    {
        res = WaitForSingleObject(ol.hEvent, 500);
        if (res != WAIT_OBJECT_0)
        {
            /* There was no data this time. Return zero bytes available,
               but leave the Overlapped I/O running. */
            return 0;
        }

    }
 }
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 篇笔记 写笔记

Windows下USB驱动异步URB转IRP请求函数代码
URB有同步请求,也有异步请求。这里微软官方提供了一个异步请求URB的代码示例// The SubmitUrbASync routine submits an URB asynchronously.//// Parameters://// Parameters:// Devic......
自定义HID的异步操作示例
自定义HID的异步操作和同步类似,这里有两个关键的区别:第一:CreateFile时wFlagsAndAttributes参数包括FILE_FLAG_OVERLAPPED标识。第二:ReadFile,WriteFile必须的OVERLAPPED参数;异步CreateFile打开HID示例: ......
USB音频设备UAC数据同步方式
对于USB扬声器,USB主机负载发送音频数据,而USB设备负责接收来自主机发送过来的数据,数据的传输方式采用的是同步方式。由于USB主机和USB设备时钟同步的问题,会有一定的偏差,长时间的累积会导致主机和设备之间数据的不同步。如USB主机可能会发送数据相对USB设备播放数据过快,导致USB设备来不及......
UAC音频设备的同步传输(同步、自适应、异步)模式区分
USB定义了四种数据传输,分别为控制传输,中断传输、批量传输和同步传输。其中同步传输按端点的配置可分为同步方式,自适应方式和异步方式。这是通过端点描述符的bEndpointType的bit3-2的值来进行配置的。bEndpointType的bit3-2传输方式00无同步0......
高速USB模式下 UAC2.0
UAC2.0 Win10原生驱动已经支持,同时UAC2.0较UAC1.0有天生的高带宽、低延时的优势。支持32bit 384k的音频格式,同时支持USB High Speed!为什么要在高速USB模式下运行UAC2.0???UAC1.0 不支持 32bit音频格式UAC2.0 在USB 全速模式......
UAC耳机扬声器音频写PCM数据的三种方式
UAC耳机扬声器音频PCM数据有三种方式,分别为:异步传输 Asynchronous同步传输 synchronous 自适应传输 adaptive。UAC音频数据同步传输同步传输是三种方式中最低质量的,所以也是使用于一搬的普通产品中。同步传输时只要主机发送数据,设备端都会接收数据。但由于两个时......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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