如何添加 HID Interface – 以添加 Keyboard Interface 为例

一、简介

最近有位客户遇到一个问题,他们的鼠标设备除了发送 Mouse 数据外还需要发送 Keyboard 数据,但这两个数据使用的是同一个端点,同时发送时会有很大概率出现发送失败的问题,需要我们协助添加一个 HID Keyboard 接口以解决。

当然,在 NXP LPC5516 的 USB 例程中有着 Mouse 和 Keyboard 两个接口的复合设备例程 usb_device_composite_hid_mouse_hid_keyboard,这里便以该例程总结一下,添加新的 HID 接口需要在代码上进行怎样的修改,方便不熟悉 NXP LPC55xx 系列芯片平台的朋友快速上手。


二、添加过程

首先需要打开 usb_device_descriptor.c 文件,对里面的代码进行添加。



1. 首先需要添加如下结构体定义,这里通过定义多个结构体嵌套,将 Keyboard 的 Endpoint、Interface设置链接至 g_UsbDeviceHidKeyboardConfig 数组中,方便再后续修改设置以及添加新的 Endpoint。



2. 添加 keyboard 报告描述符,这里将 Keyboard 的报告描述符保存至数组 g_UsbDeviceHidKeyboardReportDescriptor[ ] 中。



3. 接下来则到了修改配置描述符,首先需要添加上新添加的 Keyboard 接口描述符的字节长度,以及修改 INTERFACE_COUNT 数量加 1。



4. 添加 Keyboard Interface 描述符,这里需要添加上 Interface 描述符、HID 描述符以及 Endpoint 描述符。



5. 随后到下面的 USB_DeviceGetHidReportDescriptor()函数,添加代码如下,该函数用于向主机上报每个 HID 接口的报告描述符。



6. 在 USB_DeviceSetSpeed()函数中,添加如下代码,LPC5516 有着 HS、FS USB 两个 USB 接口,这里通过识别使用的是 HS 或 FS,分别设置接口的帧数和传输的字节数长度。




7. 打开 hid_keyboard.c 文件,该文件则为对应 Keyboard 接口的发送动作、回调函数、初始化、setConfigure、setInterface 函数,参照该文件添加或根据自己需求更改即可。


打开 Composite.c 文件,对该文件代码进行添加修改,这里则主要是对 Mouse 和 Keyboard 接口同时进行设置。


8. 在 g_CompositeClassConfig[ ] 中添加上 Keyboard 的回调函数及设置。



9. 在 USB_DeviceCallback()函数中的 kUSB_DeviceEventSetConfiguration 事件 添加上 USB_DeviceHidKeyboardSetConfigure() 函数。



10. 在 kUSB_DeviceEventSetInterface 添加如下代码。



11. 最后在 USB_DeviceApplicactionInit()的初始化函数中,添加如下代码,对 Keyboard 相关句柄进行初始化即可。




 五、总结

以上以 LPC5516 的 usb_device_composite_hid_mouse_hid_keyboard 例程为例,总结了添加新的 HID Keyboard 接口需要修改添加的地方,除键盘鼠标等 USB 设备外,其它 USB 设备需要添加 HID 接口的操作也与如上类似。当然这里对一些相关头文件的宏定义这里则没有展开讲解,相信这对大家来说修改也不是什么难点。



参考资料:

1. 《微控制器 USB 的技术及应用入门》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论