VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3165|回复: 20

HID类设备向USB口读写数据??

[复制链接]

1

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-2-22 12:00:02 | 显示全部楼层 |阅读模式
有哪位朋友提供一点资料关于HID类设备向USB口读写数据问题?
回复

使用道具 举报

0

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-6 02:15:01 | 显示全部楼层
你这个问题问的比较笼统,先简略回答如下:
1,如果是指硬件(固件),那么先要看使用什么USB接口芯片,根据芯片资料,编写固件完成发送/接收数据的功能.如果芯片是采用带USB HID接口的单片机,操作更简单,只要读写特殊的地址,就可以了,具体操作还要看硬件的资料
2,如果指PC编程,在WINDOWS下找到此设备的符号链接名,用CreateFile打开,然后用ReadFile/WriteFile读写就可以了,要用到SetupApi,如果感兴趣可以继续讨论
回复

使用道具 举报

3

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-5-16 19:45:02 | 显示全部楼层
如果我知道设备路径是"\\\\.\\usb#vid_0204&pid_6025#_#"
GUID 标识是 {36FC9E60-C465-11CF-8056-444553540000}
CreatFile具体怎么用能连上设备的管道0呢?
回复

使用道具 举报

1

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-7-7 23:00:02 | 显示全部楼层
TO:soilking
我的问题应该是属于你说的第二种情况,我现在就是要写一个HID类,通过这个类来实现PC端界面与USB口间的通讯,我只负责写数据和读数据及识别硬件接口.我已基本实现了识别功能,想请教一下如何发送数据,我要发送的数据最多有8个字节,我该怎么处理??谢谢!!
回复

使用道具 举报

0

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-8-9 16:00:03 | 显示全部楼层
给你几个函数,应该够你用了,别嫌弃

        DeviceHandle=CreateFile (detailData->DevicePath,
                                GENERIC_READ|GENERIC_WRITE,
                                FILE_SHARE_READ|FILE_SHARE_WRITE,
                                NULL,
                                OPEN_EXISTING,
                                0,
                                NULL);
        HidD_GetPreparsedData (DeviceHandle, &PreparsedData);       
               
        HidP_GetCaps (PreparsedData, &Capabilities);

            ReadHandle=CreateFile
                (detailData->DevicePath,
                GENERIC_READ|GENERIC_WRITE,
                FILE_SHARE_READ|FILE_SHARE_WRITE,
                NULL,
                OPEN_EXISTING,

                Result = ReadFile
                        (ReadHandle,
                        InputReport,
                        Capabilities.InputReportByteLength,
                        &NumberOfBytesRead,
                        (LPOVERLAPPED) &HIDOverlapped);

        Result = WriteFile
                (DeviceHandle,
                OutputReport,
                Capabilities.OutputReportByteLength,
                &BytesWritten,
                NULL);
                FILE_FLAG_OVERLAPPED,
                NULL);

               
         CloseHandle(DeviceHandle);

         CloseHandle(ReadHandle);
回复

使用道具 举报

1

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-8-12 09:30:02 | 显示全部楼层
不好意思,现在才看到你的资料,我已经实现数据的发送功能,对于读数据那一块还在进行当中,谢谢你。我想请教下是不是读数据是一位一位读进来啊???
回复

使用道具 举报

0

主题

9

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-14 18:00:01 | 显示全部楼层
设备不同,读法也不一样啊
回复

使用道具 举报

1

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-8-14 19:00:02 | 显示全部楼层
那假如是用USB连接一个电话机,那电话机上传过来的数据我应该什么时候开始读数据,还是我有不停的读????
回复

使用道具 举报

0

主题

9

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-14 20:30:01 | 显示全部楼层
要看设备和驱动具体支持怎么读写
WriteFile
ReadFIle
DeviceIoControl
回复

使用道具 举报

0

主题

9

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-14 20:45:02 | 显示全部楼层
如果你不了解设备的相关接口和驱动程序的IoControl
那你就比较麻烦了

如果驱动程序是你自己写的,那很好办啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表