一、概述
继上一篇 2.4G 模式配对方式的讲述之后,这次我给大家讲一下在鼠标中怎么去实现宏按键的功能。对于宏按键的定义,相信很多资深游戏玩家都明白什么是宏按键,没错,他就是一个能够让你使用一个简单的按键去让鼠标按照自己定义的字母以及间隔时间进行数据发送,这样的一个功能相信大家都是很感兴趣的,下面我给大家简单地讲一下怎么去实现这个功能。
二、环境搭建
2.1 SDK 下载
本文基于 NXP QN9080 IC,SDK 可在NXP 官网 https://mcuxpresso.nxp.com 下载。
2.2 硬件
本文基于 QN9080 DK 板进行开发,DK 板如图 2.2 所示。
图 2.2
2.3 开发软件
SDK 支持 IAR、Keil、MCUXpreeso IDE 三种开发软件、本文以 IAR 为开发环境作为介绍。
三、工程介绍
在 SDK_2.2.0_QN908XCDK\boards\qn908xcdk\usb_examples\usb_device_composite_hid_mouse_hid_keyboard 目录下的工程是描述如何在一个鼠标之中添加键盘功能的。而宏按键最重要的就是如何在鼠标中发出键盘的数据,所以我们可以直接在这个例程上面进行修改。
3.1 添加键盘功能
如果需要在鼠标上面添加键盘功能,首先需要做的是添加键盘的描述符。大家可以在例程中的 usb_device_descriptor.c 中看到键盘的描述符,具体可参考图 3.1 -1。
图 3.1 – 1
关于键盘描述符每一个是代表什么意义,在这里就不详细给大家介绍了,大家可以参考 HID 协议。除了添加键盘的描述符之外,我们还需要给键盘定义好键盘发送数据的 Interface 以及 Endpoint。这里需要注意的是如果你的键盘不是单独使用一个 Interface 进行发送的话,而是需要与鼠标共同使用同一个 Interface,这样就需要将键盘的描述符合并进鼠标的描述符内,并且使用 Report ID 进行区分,要不然会出现识别不了键盘描述符的问题,如何使用 Report ID 进行区分的方式在讲述 USB 模式鼠标时曾经讲到过,有兴趣的可以去参考一下。至于键盘单独使用一个 Interface 的方式可以参考图 3.1 – 2。
图 3.1 – 2
除去上面所讲的两点,我们还需要对键盘的的 Interface 进行设置以及键盘的其他配置进行设置。当然,也不要忘记了将键盘需要用到的一些结构体以及一些变量进行初始化或者是声明,要不然你会发现你的编译会出现一大堆的错误,至于设置的具体代码大家可以参考图 3.1 – 3,当然这部分的代码大家也可以在 hid_keyboard.c 中找到。
图 3.1 – 3
最后在配置完之后大家还需要注意一下修改各种接口以及端点等等的数量是否已经相匹配了,这里就不一一列出了,大家自己在修改的时候注意一下就好。
3.2 键盘数据发送
在配置好键盘的基本配置之后,接下来就是数据发送了,键盘的数据发送是和鼠标的数据发送是一样的,都是在一个 Callback 里面进行发送。大家可以参考一下图 3.2 – 1。
图 3.2 - 1
大家可以在 USB_DeviceHidKeyboardAction 这个函数里面进行键盘数据的发送,至于发送的格式和鼠标发送的数据格式是一样的,都是将需要发送的数据赋值给 buffer,然后将 buffer 通过选定好的键盘的 Endpoint 进行发送,具体代码可以参考图 3.2 – 2、
图 3.2 - 2
上图中的 ① 是键盘数据赋值的过程,而图中的 ② 是选择 Endpoint 发送固定长度的 buffer 的过程。而至于发什么数据能够得到什么字母或者符号,大家可以在 hid_keyboard.h 中进行查询。
至此,我们已经实现鼠标之中添加键盘发送的功能了,我们也就可以在这个基础上实现我们宏按键的功能了。后面将会给大家讲一下蓝牙模式的电池电量的读取以及如何上报给电脑端,希望大家可以继续关注。
四、参考资料
[1] Device Class Definition for Human Interface Devices (HID)
评论