一、概述
虽然说在普通情况下,大多数的蓝牙鼠标都是只有鼠标功能的,因为大家都会觉得蓝牙鼠标的上报率比较低,只适合平时使用或者办公使用,所以不需要键盘功能,但是如果在办公的时候能够使用鼠标直接保存文件或者截屏,甚至于音乐功能,计算机功能等不也是美滋滋。所以在这里给大家讲解一些怎么在 QN9080 中实现蓝牙鼠标加键盘的功能。
二、环境搭建
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\wireless_examples\bluetooth\hid_device 目录下的工程已经实现蓝牙鼠标的功能,我们可以在这个工程里面添加一个键盘的功能。由于例程中已经有简单的 BLE 鼠标功能,所以本文将会着重于如何添加键盘功能以及需要注意的事项。
3.1 修改 Report Map
我们需要在原本的 Mouse 的 Report Map 加上键盘的 Report Map,因此我们需要通过 Report ID 进行区分通过添加 0x85 0x01 去定义 Mouse,然后添加键盘的 Report Map,并且在普通键盘 Report Map 的基础上添加 0x85 0x02 去定义键盘。具体修改如图 3.1 – 1 以及图 3.1 – 2。
图 3.1 - 1
图 3.1 - 2
图 3.1 – 1 中的 ① 代表的是 Report Map 的总个数,② 表示的是键盘功能,③ 表示的是键盘的 Report ID 是 0x01,而图 3.1 – 2 中的 ④ 代表的是键盘功能的结束,⑤ 代表的是鼠标功能的开始,⑥ 代表的是鼠标功能的 Report ID 是 0x02。这里需要说明一下,无论是键盘功能放前面还是鼠标功能放前面都是可以的,而且 Report ID 也不一定需要按照顺序,你可以按照自己的需求定义序号。
3.2 修改 Value Report
Value Report 主要是修改你发送的最大数据量。具体修改方式如图 3.2 – 1。
图 3.2 – 1
图 3.2 – 1 中的 ① 表示的是你需要发送的最大的数据量,图中的 15 表示我最大可以发送 15 个字节数据,这个需要根据实际情况进行修改,另外图中的 ② 表示使用 0x00 进行填充,前面的最大数据量是多少,就用多少个 0x00 进行填充。
3.3 数据发送
在获取完数据之后,我们需要将数据进行发送,那么发送的数据格式以及发送方式会有什么不同呢,下面我们一起来看一下。由于在 Report Map 中添加了 Report ID,因此我们在发送的数据中需要将 Report ID 添加上去,在结构体 mouseHidReport_tag 中添加 Report ID 的变量。由于 Report Map 中定义的顺序是 Report ID -> Button -> X -> Y -> Z。所以发送时的 Buffer 顺序为 Report ID -> Button -> X -> Y -> 滚轮数据。具体鼠标的发送数据格式如图 3.3 – 1。
图 3.3 – 1
具体鼠标的数据赋值如图 3.3 – 2。
图 3.3 – 2
键盘的数据格式如普通键盘,只不过在前面加上 Report ID,也就是由原本的 8 Byte 变成 9 Byte,具体的赋值如图 3.3 – 3。
图 3.3 – 3
同样的,由于 Report Map 定义的顺序是 Report ID -> Control Key -> Reserved Byte -> Normal Key。因此 Buffer[0] 赋值的是 Report ID,真正普通按键的值是放在 Buffer[3] – Buffer[8]。
但是需要注意的是发送的时候,会使用到函数 SendReport,函数原型如图 3.3 – 4,里面有一个参数是上报数据的数据长度,由于 Mouse 和 KeyBoard 的数据长度不同,所以我们需要分别给不同的参数。
图 3.3 – 4
本例程中,将直接新建一个键盘数据发送的函数,并将数据长度修改为 9。具体修改如图 3.3 – 5。
图 3.3 – 5
修改完之后的演示结果如图 3.3 – 6,但是由于光标移动在图片中不好展现,因此只有键盘的打字截图,大家可以参照一下。
图 3.3 – 6
四、总结
经过前面的解析说明,相信大家都能够基于 QN9080 SDK 进行 BLE 模式鼠标功能添加键盘功能的实现了,感谢大家的观看。
五、参考资料
[1] Device Class Definition for Human Interface Devices (HID)
评论