OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6815|回复: 9

usb 键盘,鼠标与游戏手柄枚举时候的区别

[复制链接]

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-6
在线时间
0 小时
发表于 2014-12-6 20:20:53 | 显示全部楼层 |阅读模式
5金钱
  这有一个例程。能枚举键盘。。。。我想改成枚举游戏手柄,,  有大神知道怎么改吗,  求帮助。。。。。。。。。。。。。。。。。

最佳答案

查看完整内容[请看2#楼]

貌似是有个ID可以区分类别的。具体要仔细看USB hid协议了
画杯粪,为力量
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-6 20:20:54 | 显示全部楼层
貌似是有个ID可以区分类别的。具体要仔细看USB hid协议了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-6 20:20:54 | 显示全部楼层
[mw_shl_code=c,true]static USBH_Status USBH_HID_InterfaceInit ( USB_OTG_CORE_HANDLE *pdev, void *phost) { uint8_t maxEP; USBH_HOST *pphost = phost; uint8_t num =0; USBH_Status status = USBH_BUSY ; HID_Machine.state = HID_ERROR; if(pphost->device_prop.Itf_Desc[0].bInterfaceSubClass == HID_BOOT_CODE) { /*Decode Bootclass Protocl: Mouse or Keyboard*/ if(pphost->device_prop.Itf_Desc[0].bInterfaceProtocol == HID_KEYBRD_BOOT_CODE) { HID_Machine.cb = &HID_KEYBRD_cb; } else if(pphost->device_prop.Itf_Desc[0].bInterfaceProtocol == HID_MOUSE_BOOT_CODE) { HID_Machine.cb = &HID_MOUSE_cb; } HID_Machine.state = HID_IDLE; HID_Machine.ctl_state = HID_REQ_IDLE; HID_Machine.ep_addr = pphost->device_prop.Ep_Desc[0][0].bEndpointAddress; HID_Machine.length = pphost->device_prop.Ep_Desc[0][0].wMaxPacketSize; HID_Machine.poll = pphost->device_prop.Ep_Desc[0][0].bInterval ; if (HID_Machine.poll < HID_MIN_POLL) { HID_Machine.poll = HID_MIN_POLL; } /* Check fo available number of endpoints */ /* Find the number of EPs in the Interface Descriptor */ /* Choose the lower number in order not to overrun the buffer allocated */ maxEP = ( (pphost->device_prop.Itf_Desc[0].bNumEndpoints <= USBH_MAX_NUM_ENDPOINTS) ? pphost->device_prop.Itf_Desc[0].bNumEndpoints : USBH_MAX_NUM_ENDPOINTS); /* Decode endpoint IN and OUT address from interface descriptor */ for (num=0; num < maxEP; num++) { if(pphost->device_prop.Ep_Desc[0][num].bEndpointAddress & 0x80) { HID_Machine.HIDIntInEp = (pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); HID_Machine.hc_num_in =\ USBH_Alloc_Channel(pdev, pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); /* Open channel for IN endpoint */ USBH_Open_Channel (pdev, HID_Machine.hc_num_in, pphost->device_prop.address, pphost->device_prop.speed, EP_TYPE_INTR, HID_Machine.length); } else { HID_Machine.HIDIntOutEp = (pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); HID_Machine.hc_num_out =\ USBH_Alloc_Channel(pdev, pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); /* Open channel for OUT endpoint */ USBH_Open_Channel (pdev, HID_Machine.hc_num_out, pphost->device_prop.address, pphost->device_prop.speed, EP_TYPE_INTR, HID_Machine.length); } } start_toggle =0; status = USBH_OK; }else if(pphost->device_prop.Itf_Desc[0].bInterfaceSubClass==0X00)//自定义HID设备 { //自定义协议,支持游戏手柄 if(pphost->device_prop.Itf_Desc[0].bInterfaceProtocol == 0X00) { HID_Machine.cb = &HID_GAMEPAD_cb;//游戏手柄 } HID_Machine.state = HID_IDLE; HID_Machine.ctl_state = HID_REQ_IDLE; HID_Machine.ep_addr = pphost->device_prop.Ep_Desc[0][0].bEndpointAddress; HID_Machine.length = pphost->device_prop.Ep_Desc[0][0].wMaxPacketSize; HID_Machine.poll = pphost->device_prop.Ep_Desc[0][0].bInterval ; if (HID_Machine.poll < HID_MIN_POLL) { HID_Machine.poll = HID_MIN_POLL; } /* Check fo available number of endpoints */ /* Find the number of EPs in the Interface Descriptor */ /* Choose the lower number in order not to overrun the buffer allocated */ maxEP = ( (pphost->device_prop.Itf_Desc[0].bNumEndpoints <= USBH_MAX_NUM_ENDPOINTS) ? pphost->device_prop.Itf_Desc[0].bNumEndpoints : USBH_MAX_NUM_ENDPOINTS); /* Decode endpoint IN and OUT address from interface descriptor */ for (num=0; num < maxEP; num++) { if(pphost->device_prop.Ep_Desc[0][num].bEndpointAddress & 0x80) { HID_Machine.HIDIntInEp = (pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); HID_Machine.hc_num_in =\ USBH_Alloc_Channel(pdev, pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); /* Open channel for IN endpoint */ USBH_Open_Channel (pdev, HID_Machine.hc_num_in, pphost->device_prop.address, pphost->device_prop.speed, EP_TYPE_INTR, HID_Machine.length); } else { HID_Machine.HIDIntOutEp = (pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); HID_Machine.hc_num_out =\ USBH_Alloc_Channel(pdev, pphost->device_prop.Ep_Desc[0][num].bEndpointAddress); /* Open channel for OUT endpoint */ USBH_Open_Channel (pdev, HID_Machine.hc_num_out, pphost->device_prop.address, pphost->device_prop.speed, EP_TYPE_INTR, HID_Machine.length); } } start_toggle =0; status = USBH_OK; }else //不支持的USB设备 { pphost->usr_cb->DeviceNotSupported(); } return status; } [/mw_shl_code]

看以上代码。HID_BOOT_CODE,HID_KEYBRD_BOOT_CODE,HID_MOUSE_BOOT_CODE
这几个,用来区分的类型。
 bInterfaceSubClass,为0表示自定义HID
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-6
在线时间
0 小时
 楼主| 发表于 2014-12-7 00:03:59 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
额。。。   原子哥还没睡啊,,我去看看~~~~
画杯粪,为力量
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-6
在线时间
0 小时
 楼主| 发表于 2014-12-7 11:59:21 | 显示全部楼层
读了。。原子哥~~   你的综合例程里哪个文件是usb枚举的啊。。。 表示没找到      T_T
画杯粪,为力量
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2014-11-1
在线时间
0 小时
发表于 2014-12-7 12:17:14 | 显示全部楼层
修改HID报告描述符,有一个HID报告描述符生成工具
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-6
在线时间
0 小时
 楼主| 发表于 2014-12-7 15:22:17 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥~~  这是哪个文件下的啊。。。   我想找那个文件名。。
画杯粪,为力量
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-6
在线时间
0 小时
 楼主| 发表于 2014-12-7 16:18:08 | 显示全部楼层
回复【5楼】wlff:
---------------------------------
HID   报告描述符在哪那文件里面ne?
画杯粪,为力量
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-6
在线时间
0 小时
 楼主| 发表于 2014-12-7 17:01:46 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥~~ 这是枚举后的吧,我现在还不能枚举呢。。。。。。~~~~(>_<)~~~~
画杯粪,为力量
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-3-27
在线时间
3 小时
发表于 2016-5-31 22:26:32 | 显示全部楼层
楼主解决了没?    我是新手  也遇到了这个问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 05:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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