用途最小值,用途最大值、逻辑最小值,逻辑最大值分别是什么意思?
如题:

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

 
04-26 15:21