基于 NXP QN9080 三模鼠标开发 —— BLE 模式键鼠结合

一、概述

       虽然说在普通情况下,大多数的蓝牙鼠标都是只有鼠标功能的,因为大家都会觉得蓝牙鼠标的上报率比较低,只适合平时使用或者办公使用,所以不需要键盘功能,但是如果在办公的时候能够使用鼠标直接保存文件或者截屏,甚至于音乐功能,计算机功能等不也是美滋滋。所以在这里给大家讲解一些怎么在 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)

 

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

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

评论