潘多拉 RT-Thread 模拟 USB 鼠标
实验概述
本实验使用潘多拉 IoT Board 板载的六轴传感器 icm20608 获取开发板的旋转方向及角度,然后转换为鼠标的位移信息。同时使用板载按键实现鼠标的左右键,最后将这些鼠标信息通过 RT-Thread 的 USB 组件发送至电脑,从而实现开发板模拟 USB 鼠标的功能。
RT-Thread USB 组件
RT-Thread USB 组件位于 rt-thread/components/drivers/usb,是 RT-Thread 依据 USB2.0 协议规范将 USB 协议栈逻辑高度抽象,支持 host(主机)和 device(从机)模式。
该组件允许用户通过宏 RT_USB_DEVICE_COMPOSITE
开启复合功能,无需额外的代码即可对多个设备类型进行复合,虚拟串口、以太网卡、人体学输入设备、大容量存储设备、微软通用 USB 等。
该组件在驱动移植方面提供了非常友好的移植接口,用户可将厂商 SDK(软件开发工具包)中 PCD(端口连接检测)驱动直接接入到 RT-Thread,实现 0 代码使用 USB。
ICM20608 软件包
ICM20608 软件包是 RT-Thread 针对六轴传感器 icm20608 功能使用的实现,使用这个软件 包,可以让该传感器在 RT-Thread 上非常方便使用 icm20608 的基本功能,包括读取三轴加速度(3-axis accelerometer)、三轴陀螺仪(3-axis gyroscope)、零值校准等功能。可参考《潘多拉 RT-Thread 六轴传感器》。
硬件连接
要实现 3D 鼠标,需要用到潘多拉 IoT Board 上的 USB OTG,其原理图如下图所示:
如上图所示,单片机通过以下管脚来控制 LCD 显示屏输出。
本实验使用到两个 USB 接口。其中,USB1 为 ST-Link,主要用于程序的下载与调试。USB2 是模拟鼠标使用的 USB OTG 接口,引脚 USB_D-(PA11)和 USB_D+(PA12)为 USB 主机与从机的数据交互接口,在本实验中开发板作为从机(USB Device),电脑作为主机(USB Host)。
另外,我们还使用潘多拉 IoT Board 上的 KEY2 模拟鼠标左键,KEY0 模拟鼠标右键。
示例代码
程序主要流程如下:
- 初始化设备或者查找设备
查找设备名称为 hidd 的 hid 设备,初始化 icm20608 传感器,初始化鼠标按键。
-
打开设备
打开查找到的 hid 设备。
-
创建线程
分别创建鼠标数据发送处理线程、传感器数据读取与处理线程、按键检测线程,并且启动这些创建的线程。