[ZLG-ARM] 请问KEIL USB HID怎样将返回多个字节的数据?

[复制链接]
3808|10
 楼主| cyuan5 发表于 2007-3-9 17:14 | 显示全部楼层 |阅读模式
const&nbsp;U8&nbsp;HID_ReportDescriptor[]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;HID_UsagePageVendor(0x00),<br />&nbsp;&nbsp;HID_Usage(0x01),<br />&nbsp;&nbsp;HID_Collection(HID_Application),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsagePage(HID_USAGE_PAGE_BUTTON),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsageMin(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsageMax(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//3<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMin(0),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMax(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//3<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Input(HID_Data&nbsp;|&nbsp;HID_Variable&nbsp;|&nbsp;HID_Absolute),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(1),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(5),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Input(HID_Constant),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsagePage(HID_USAGE_PAGE_LED),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Usage(HID_USAGE_LED_GENERIC_INDICATOR),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMin(0),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMax(1),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(8),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//8<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(7),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写字节数<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Output(HID_Data&nbsp;|&nbsp;HID_Variable&nbsp;|&nbsp;HID_Absolute),
平常人 发表于 2007-3-9 22:25 | 显示全部楼层

问题问得不清不楚,让人如何回答;中文的表达好像有问题

另外,倒数第二行好像有问题,是不是写错了。<br /><br />从描述符看,应是有3个输入按键,和8个输出的LED信号。
 楼主| cyuan5 发表于 2007-3-10 09:31 | 显示全部楼层

我头一次用USB,因为我想用来做数据通讯,不知道应该怎样改啦

谢谢.我头一次用USB,因为我想用来做数据通讯,不知道应该怎样改啦??
平常人 发表于 2007-3-10 18:05 | 显示全部楼层

倒数第二行是否为HID_ReportSize(1),看看后面的注释

从你的问题中看不出你要问什么。
 楼主| cyuan5 发表于 2007-3-11 12:41 | 显示全部楼层

我是想PC机读取HID(数据包长度为7个字节)PC机下发7个字节无问

我是想PC机读取HID(数据包长度为7个字节)PC机下发7个字节无问题,返回只有一个字节,应该怎样改才行呀?
 楼主| cyuan5 发表于 2007-3-11 16:03 | 显示全部楼层

HID_ReportSize返回位数,count是字节数

const&nbsp;U8&nbsp;HID_ReportDescriptor[]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;HID_UsagePageVendor(0x00),<br />&nbsp;&nbsp;HID_Usage(0x01),<br />&nbsp;&nbsp;HID_Collection(HID_Application),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsagePage(HID_USAGE_PAGE_SIMULATION),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsageMin(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsageMax(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//3<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMin(0),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMax(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(7),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//3<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(8),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Input(HID_Data&nbsp;|&nbsp;HID_Variable&nbsp;|&nbsp;HID_Absolute),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(7),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(8),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//5<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Input(HID_Constant),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsagePage(HID_USAGE_PAGE_LED),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Usage(HID_USAGE_LED_GENERIC_INDICATOR),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMin(0),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMax(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(7),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写字节数<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(8),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有效位<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Output(HID_Data&nbsp;|&nbsp;HID_Variable&nbsp;|&nbsp;HID_Absolute),<br />&nbsp;&nbsp;HID_EndCollection,<br />};<br />U8&nbsp;CM[7];<br />void&nbsp;USB_EndPoint1&nbsp;(void)&nbsp;__task&nbsp;{<br /><br />&nbsp;&nbsp;for&nbsp;(;;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;os_evt_wait_or(USB_EVT_IN,&nbsp;0xFFFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Wait&nbsp;for&nbsp;USB_EVT_IN&nbsp;event&nbsp;*/<br />//&nbsp;&nbsp;&nbsp;&nbsp;GetInReport();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;此处为返回数据<br />//&nbsp;&nbsp;&nbsp;&nbsp;USB_WriteEP(0x81,&nbsp;&InReport,&nbsp;sizeof(InReport));<br />&nbsp;&nbsp;&nbsp;&nbsp;USB_WriteEP(0x81,&nbsp;CM,&nbsp;sizeof(CM));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />}<br /><br />但输入总是不行,应该怎样改呀?
computer00 发表于 2007-3-11 20:25 | 显示全部楼层

估计是你没有返回那么多数据。往输入断点里面写7个字节出

  
平常人 发表于 2007-3-11 20:48 | 显示全部楼层

还是不明白楼主要求什么

你是否要求PC输出到设备7个字节,设备输入到PC也是要7个字节?<br /><br />你每个字节是如何使用?一个字节中的8个位,是以8个二进制位表示,还是表示为一个0~255的数,两种方式的描述符是不一样的。以8个二进制位表示的例子是,每个位表示一个LED灯的亮灭,一个字节可对应8个灯;表示为一个0~255数的例子是,8个位共同表示一个灯的明暗亮度,一个字节可表示256种状态。
 楼主| cyuan5 发表于 2007-3-12 08:12 | 显示全部楼层

平常人你好:我是想PC机读取HID(数据包长度为7个字节)

平常人你好:我是想PC机读取HID(数据包长度为7个字节),每个字节是8位<br /><br />USB_WriteEP(0x81,&nbsp;CM,&nbsp;sizeof(CM));&nbsp;sizeof(CM)就是7个数据啦,<br /><br />HID_UsageMin(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsageMax(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这两个用来做什么的????????????<br />
平常人 发表于 2007-3-14 21:06 | 显示全部楼层

假定PC向设备传输的报告是7个字节,USB设备向PC传输也是7个

<br />首先我只能做这样假定,因为你始终没有明确说清楚;根据这个假定,对你上述的HID描述符作如下修改,虽然还有很多不规范的地方,但应可以用:<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsagePage(HID_USAGE_PAGE_SIMULATION),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMin(0),&nbsp;&nbsp;&nbsp;<font color=#FF0000>每个数据的最小取值为0</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMax(255),&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FF0000>每个数据的最大取值为255</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(7),&nbsp;&nbsp;<font color=#FF0000>共有7个数据</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(8),&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FF0000>每个数据有8个比特位</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Input(HID_Data&nbsp;|&nbsp;HID_Variable&nbsp;|&nbsp;HID_Absolute),&nbsp;&nbsp;<font color=#FF0000>以上为输入数据</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_UsagePage(HID_USAGE_PAGE_LED),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Usage(HID_USAGE_LED_GENERIC_INDICATOR),<br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMin(0),&nbsp;&nbsp;&nbsp;<font color=#FF0000>每个数据的最小取值为0</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_LogicalMax(255),&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FF0000>每个数据的最大取值为255</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportCount(7),&nbsp;&nbsp;<font color=#FF0000>共有7个数据</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_ReportSize(8),&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FF0000>每个数据有8个比特位</font><br />&nbsp;&nbsp;&nbsp;&nbsp;HID_Output(HID_Data&nbsp;|&nbsp;HID_Variable&nbsp;|&nbsp;HID_Absolute),&nbsp;<font color=#FF0000>以上为输出数据</font><br />&nbsp;<br />HID_UsageMin(1)&nbsp;和&nbsp;HID_UsageMax(3)&nbsp;是用来描述如何使用传输的数据,假如这是用来描述一个鼠标的三个按键,则可以认为1表示左健、2表示中间健、3表示右健。不管如何定义,PC端与设备端必须一致。
computer00 发表于 2007-3-18 20:44 | 显示全部楼层

好象通常是2表示右键,3表示中键吧~~~~~~~~~

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

本版积分规则

60

主题

86

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部