请教USB HID通讯问题!
在学习板上可以正常收发数据 , 但转到开发板上发送的数据可以正常发送,但是开发板接收不到, 开发板和调试助手可以正常调试的,不知道有没有大神遇到这种问题?
buffer =
new
byte
[outputReportLength];
buffer[0] = r.reportID;
int
maxBufferLength = 0;
if
(r.reportBuff.Length < outputReportLength - 1)
maxBufferLength = r.reportBuff.Length;
else
maxBufferLength = outputReportLength - 1;
for
(
int
i = 1; i < maxBufferLength; i++)
buffer[i] = r.reportBuff[i - 1];
hidDevice.Write(buffer, 0, OutputReportLength);
对比一下给学习板和开发板发送的buffer和OutputReportLength是否一样
学习板的outputreportLength是2 然后我这边就发送两个字节, lrc歌词下位机可以正常收发。
开发板的ou'tputrepo'rtLength获取的是65,但其实是64,我就发送65个字节会报错, 发送64个字节没报错,但是下位机收取不到
1、为什么学习板发过来的是两个字节,而开发板发过来的是65个字节,协议不一样?
2、给开发板发送65个字节是开发板报错吧?报错是报的什么错,是没有按照协议回复?
估计是你没有按照通讯协议收发信息
学习板上定的长度就是2个字节
开发版上的定的长度是64个字节, 但上位机收到outputreportlength是65,发65字节报"参数错误", 发64个字节可以正常发,但是开发板收不到数据
我今天让他们换个开发板试试
你有c# hid方面的成功使用的代码吗, 我可以和你的代码参考下
for (int i = 0; i < maxBufferLength; i++)
buffer[i + 1] = r.reportBuff[i];
这个buffer我现在就直接手动赋值了
顶起 没人玩USB HID通讯吗?
这个创建通信类的的代码
public
HID_RETURN OpenDevice(UInt16 vID, UInt16 pID)
{
// IntPtr hInfoSet = SetupDiGetClassDevs(ref gHid, null, IntPtr.Zero, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
if
(deviceOpened ==
false
)
{
//获取连接的HID列表
List<
string
> deviceList =
new
List<
string
>();
GetHidDeviceList(
ref
deviceList);
if
(deviceList.Count == 0)
return
HID_RETURN.NO_DEVICE_CONECTED;
for
(
int
i = 0; i < deviceList.Count; i++)
{
device = CreateFile(deviceList[i], DESIREDACCESS.GENERIC_READ | DESIREDACCESS.GENERIC_WRITE, 0, 0, CREATIONDISPOSITION.OPEN_EXISTING, FLAGSANDATTRIBUTES.FILE_FLAG_OVERLAPPED, 0);
if
(!device.IsInvalid)
{
// strDevicePath = GetDevicePath(hInfoSet, ref oInterface);
HIDD_ATTRIBUTES attributes;
//IntPtr serialBuff = Marshal.AllocHGlobal(512);
HidD_GetAttributes(device,
out
attributes);
//HidD_GetSerialNumberString(device, serialBuff, 512);
//string deviceStr = Marshal.PtrToStringAuto(serialBuff);
//Marshal.FreeHGlobal(serialBuff);
if
(attributes.VendorID == vID && attributes.ProductID == pID)
// && deviceStr == serial
{
IntPtr preparseData;
HIDP_CAPS caps;
HidD_GetPreparsedData(device,
out
preparseData);
HidP_GetCaps(preparseData,
out
caps);
HidD_FreePreparsedData(preparseData);
outputReportLength = caps.OutputReportByteLength;
inputReportLength = caps.InputReportByteLength ;
hidDevice =
new
FileStream(device, FileAccess.ReadWrite, inputReportLength,
true
);
deviceOpened =
true
;
//BeginAsyncRead();
Guid gHid = HIDGuid;
IntPtr hInfoSet = SetupDiGetClassDevs(
ref
gHid,
null
, IntPtr.Zero, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
DeviceInterfaceData oInterface =
new
DeviceInterfaceData();
strDevicePath = GetDevicePath(hInfoSet,
ref
oInterface);
bool
canRead = hidDevice.CanRead;
//获取一个值,该值指示当前流是否支持读取。
bool
canWrite = hidDevice.CanWrite;
//获取一个值,该值指示当前流是否支持写入。
return
HID_RETURN.SUCCESS;
}
}
}
return
HID_RETURN.DEVICE_NOT_FIND;
}
else
return
HID_RETURN.DEVICE_OPENED;
}
顶起,usbhid,只能发64个字节,下位机返回时第一个字节有特殊用途具体干啥的忘记了,实际有效数据为63个字节
大错特错,发65字节=1字节report id + 64 data
请教USB HID通讯问题!相关推荐
- Qt USB HID通讯
一.下载hidapi库 下载地址 https://github.com/libusb/hidapi/tree/hidapi-0.12.0 点击Releases 点击hidapi-win.zip下载 解 ...
- Android USB Host与HID通讯
Android USB Host与HID通讯 (一) Android USB Host与HID通讯 (二) Android USB Host与HID通讯Demo android usb host 读写 ...
- Android USB Host与HID通讯(二)
2019独角兽企业重金招聘Python工程师标准>>> 原文出处:http://han21912.lofter.com/post/c3919_51401d 接上一篇:Android ...
- Android usb otg通讯总结 HiD通讯直接来取吧
最近在搞一个Android的通过otg与设备进行usb通讯的功能HID. 过程中遇到了一个大坑,就是usb发数据的时候,第一次显示发送成功(返回值大于1),但是设备并没有收到实际的数据,把usb重新拔 ...
- STM32设置USB HID模式
使用USBHID模式与电脑.手机终端通讯,速率和准确率比虚拟串口和CH340转接速度要快. 在USB_OTG_FS中,选择Device_Only,其它默认. 在Middleware中的Class Fo ...
- Android USB HID整理
概述 USB协议支持外设热插拔,这些外设分为许多不同类型,每一种设备类都具有相同的动作和类似的功能.比如显示器,鼠标,话筒等等. HID(Human Interface Device)类提供了人机接口 ...
- VC++编写USB接口通讯程序
用VC++编写USB接口通讯程序 摘要:详细介绍Visual C++ 6.0环境下利用Windows API(Application Program Interface)函数来实现与符合HID设备类的 ...
- Window7 USB HID 即插即用触摸屏 原始数据获取
源头 这是一个擦PG的活,由于前期和甲方没有沟通好,导致甲方Vxworks没办法读USB HID触摸屏的数据,然后同事摊手就绕到我这来了.我的第一想法是甲方技术能力不足,USB Host获取不到正确 ...
- 玩转USB HID系列:Linux下使用Python开发USB HID
玩转USB系列:Linux下使用Python开发USB HID 实验环境 开发步骤 安装pyusb 库 我们来与HID设备通讯! 注意 实验环境 ubuntu 16.04 LTS 64-bit pyt ...
最新文章
- 加拿大工程院院士于非:互联—— 从质量、能源、信息到智能
- ASP.NET2.0的multiview和wizard控件
- 每天一点C++(之四)
- 菜鸟教程python3 mysql_Python 操作 MySQL 数据库
- 商汤科技 中科院自动化所:视觉跟踪之端到端的光流相关滤波 | CVPR 2018
- 展望Silverlight 5.0新版本更新与发展
- IE6不支持max的解决办法
- django本地安装mysql_django使用mysql(本地环境下)_MySQL
- Windows mysql-64位 数据库安装
- mysql-dj数据准备-创建班级表
- ORACLE 如何产生一个随机数
- Java中serialVersionUID
- Struts框架介绍(重点)
- 2021考研——复习规划(数学篇)
- ZigBee(CC2530)(03)数据手册分享(英文+中文)
- 边沿触发器(T触发器)
- 图像特征提取现成的方法
- navicat报错 Access violation at address in module ‘navicat.exe‘
- JavaScript - 运算符与表达式
- Unity3D中C#调用iOS的静态库(*.a)
热门文章
- 计算机二级access公共基础知识,计算机二级ACCESS考试
- 如何给自己的思维导图加水印
- IBM V3500存储恢复步骤实例(linux)
- matlab中绘制饼图_如何将第五个切块分离出来,matlab考试题及答案精选
- 音质最好的骨传导蓝牙耳机有哪些?骨传导蓝牙耳机排行
- vim配置(无插件,含状态栏,背景透明等)
- 在html中属于复选框标记的是,在 HTML 表单中,文本框、口令框和复选框都是用 INPUT 标记符生成的_学小易找答案...
- 帝国理工学院计算机科学与技术申请条件,伦敦帝国理工学院计算机理学硕士研究生申请要求及申请材料要求清单...
- amesim子模型_Amesim中液压管路模型的选择方法
- multiple definition of `yylloc‘