USB的逻辑值和用途值有什么区别?
用途最小值,用途最大值、逻辑最小值,逻辑最大值分别是什么意思?
如题:
code uint8 ReportDescriptor[]=
{
//每行开始的第一字节为该条目的前缀,前缀的格式为:
//D7~D4:bTag。D3~D2:bType;D1~D0:bSize。以下分别对每个条目注释。
//这是一个全局(bType为1)条目,将用途页选择为普通桌面Generic Desktop Page。
//后面跟1字节数据(bSize为1),后面的字节数就不注释了,自己根据bSize来判断。
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//这是一个局部(bType为2)条目,用途选择为0x00。在普通桌面页中,
//该用途是未定义的,如果使用该用途来开集合,那么系统将不会把它
//当作标准系统设备,从而就成了一个用户自定义的HID设备。
0x09, 0x00, // USAGE (0)
//这是一个主条目(bType为0)条目,开集合,后面跟的数据0x01表示
//该集合是一个应用集合。它的性质在前面由用途页和用途定义为
//用户自定义。
0xa1, 0x01, // COLLECTION (Application)
//这是一个全局条目,说明逻辑值最小值为0。
0x15, 0x00, // LOGICAL_MINIMUM (0) 逻辑最小值什么意思?
//这是一个全局条目,说明逻辑值最大为255。
0x25, 0xff, // LOGICAL_MAXIMUM (255) 逻辑最大值什么意思?
//这是一个局部条目,说明用途的最小值为1。 这里用途的最小值是什么意思?
0x19, 0x01, // USAGE_MINIMUM (1)
//这是一个局部条目,说明用途的最大值8。 这里用途的最大值是什么意思?
0x29, 0x08, // USAGE_MAXIMUM (8)
//这是一个全局条目,说明数据域的数量为八个。
0x95, 0x08, // REPORT_COUNT (8) 我的数据有214个(0xD6),这里是不是可以修改为:0x95, 0xD6,
//这是一个全局条目,说明每个数据域的长度为8bit,即1字节。
0x75, 0x08, // REPORT_SIZE (8)
//这是一个主条目,说明有8个长度为8bit的数据域做为输入。
0x81, 0x02, // INPUT (Data,Var,Abs) 这里很不理解我要传送214个字节该如何修改,是要修改成数组形式吗?
//这是一个局部条目,说明用途的最小值为1。这里用途的最大值和最小值是什么意思?又是指那个用途的最小值和最大值?
0x19, 0x01, // USAGE_MINIMUM (1)
//这是一个局部条目,说明用途的最大值8。
0x29, 0x08, // USAGE_MAXIMUM (8)
//这是一个主条目。定义输出数据(8字节,注意前面的全局条目)。
0x91, 0x02, // OUTPUT (Data,Var,Abs) 这里是要下发的8个数据如何修改?
//下面这个主条目用来关闭前面的集合。bSize为0,所以后面没数据。
0xc0 // END_COLLECTION
};
用途最大值减掉用途最小值就是你数据的个数(输入214,输出8),逻辑最小值到逻辑最大值之间就是你所能返回的数据(0~255)
但是你返回的数值计算机不一定认识,如果你返回的值没在用途最小值与用途最大值之间的话,计算机是不识别你所返回的值的,就是说你可以
返回这样的值,但是这个值我不一定处理!
那物理最小值、物理最大值,又份别是什么意思?两者之间有什么关系?
针对我要开发的驱动是要选择开应用集合: 0xa1, 0x01, // COLLECTION (Application)
还是开物理集合: 0xa1, 0x03,(好像是03)
一般都是应用集合。物理值就是实际的值。
http://group.ednchina.com/GROUP_MES_14600_93_33447.HTM
USB的逻辑值和用途值有什么区别?的更多相关文章
- Convert和Parse对null值处理的区别
类型的转换在日常的变成中是经常被用到的,我们最常用的类型转换的方法就是Convert和Parse, 下面来说一下这两者null值处理的区别. int i1 = Convert.ToInt32(null ...
- SQL表值函数和标量值函数的区别
SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...
- 编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别
建议28:理解延迟求值和主动求值之间的区别 要理解延迟求值(lazy evaluation)和主动求值(eager evaluation),先看个例子: List<, , , , , , , , ...
- javascript原始值和引用值类型及区别
原始值和引用值类型及区别 首先,原始值和引用值类型都是js中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且js是弱类型,动态语言,数据类型可变. 原始值(简单数据类型) 存储在栈中的简单 ...
- js和php对bool值的判断区别
一.将一种数据类型转换为bool值时,PHP和JS的转换规则不同 PHP中 当转换为 boolean 时,以下值被认为是 FALSE : 布尔值 FALSE 本身 整型值 0(零) 浮点型值 0.0( ...
- c#类库和可移值类库的区别
所谓类库,只能指定一个类库的可运行平台. 而可移值类库,可以在无需修改代码的情况,同时可以在多平台上运行DLL文件.多平台如NET Framework.Silverlight.Windows Phon ...
- 实际举例C#引用类型和值类型的区别<网摘>
我们都知道,c#的两大数据类型分别为值类型和引用类型.很多人或许闭着眼睛都能说出值类型包括简单类型.结构体类型和枚举类型,引用类型包括自定义类.数组.接口.委托等,但是当被问及到二者之间的联系和区别, ...
- C# 引用类型与值类型的区别
//引用类型(使用了class) class SomeRef{public Int32 x;} //值类型(使用了struct) struct SomeVal{public Int32 x;} sta ...
- 【转】c#引用类型与值类型的区别大盘点
解析:CLR支持两种类型:值类型和引用类型.用Jeffrey Richter(<CLR via C#>作者)的话来说,“不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能 ...
随机推荐
- WKWebview点击图片查看大图
大家都知道,WKWebview是没有查看大图的属性或者方法的,所以只能通过js与之交互来实现这一功能,原理:通过js获取页面的图片,把它存放到数组,给图片添加点击事件,通过index显示大图就行了 其 ...
- Eclipse ADT的Custom debug keystore所需证书规格
最近开始研究Google Play的In-app Billing IAB内置计费API,发现一个比较烦人的问题就是测试时应用必须经过正式签名,而默认Eclipse ADT调试运行使用的是临时生成的De ...
- ios开发应用内实现多语言自由切换
需求描述:应用内部有一按钮,点击切换语言(如中英文切换).说起来这个是好久以前做的一个功能点了,刚开始也是没有头绪,后来解决了发现很简单,把方法分享一下.1.原理.查看NSLocalizedStrin ...
- 一键cobbler批量安装脚本
前几天机房上架180台服务器,太多了,使用了cobbler批量安装,具体的看我上代码,我把配置cobbler的命令给堆积起来,也算是个脚本吧,欢迎拍砖指正,下面我上脚本: #!/bin/bash # ...
- 一个中高级PHP工程师所应该具备的能力
很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说一个PHP高级工程师所应该具备的,希望给初级或已经达到中级的PHP工程师一些帮助. 一.平静 ...
- noip 2005 等价表达式
/* 开始想的是 维护a的每个指数的系数 然而不好办 然而还有^10^10^10这种数据 特殊值带入吧 多搞几个素数 接下来就是玄学的事了 给a赋值之后 就是简单地表达式求值 虽然思路简单 但是字符串 ...
- 数据库、C#、Java生成唯一GUID 方法
GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值.GUID ...
- (转)SQL流程控制语句学习(一):变量及控制语句种类
1.局部变量 用户自己定义的,称局部变量,以@标识. 作用范围:定义局部变量的批处理.存储过程.触发器和语句块 局部变量的定义: declare @局部变量名 数据类型 注意:变量的类型不能是text ...
- 动态脚本,在js里面又写js
不知道怎么回事 代码测试不过 var a=document.createElement("script"); a.type="text/javascript"; ...
- GetTextMetrics
该函数的参数要求是一个TEXTMETRIC结构体的指针 也就是说我们可以定义一个结构类型的变量 将该变量的地址传递进来 通过该函数就能得到当前字体的信息来填充这个结构体 int CXuexi2View ...