微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > LazyBoard双轨迹球一体式键盘设计方案

LazyBoard双轨迹球一体式键盘设计方案

时间:10-25 来源:3721RD 点击:

一体化设计,相当于同一个USB物理端口上的两个HID设备。与单一的键盘或鼠标相比,发送的报文需要在最前面添加一个报告ID字节,以指明该报文来自键盘还是鼠标。两种设备的报文格式分别如下:

键盘HID报文格式

字节#

内容

0

报告ID

1

功能键状态

2

定值0x00

3~8

按下的键(最多6个)

鼠标HID报文格式

字节#

内容

0

报告ID

1

按键状态

2

X 位移

3

Y 位移

4

滚轮位移

为了分别声明2种设备类型和对应的报文格式,在初始化阶段,还需向PC发送一定格式的报告描述符。限于篇幅,这里不列出具体内容。

(4)手势识别算法设计

所谓鼠标手势,可以理解为鼠标指针移动方向的一系列特定序列。我们对每个轨迹球的划分了8种运动方向,分别用数字1~8表示,如图2.4。如果位移量没有超过某个阈值,则标签为0。

轨迹球方向划分

目前,系统能够识别出轨迹球左右、上下摇动的手势。对每个轨迹球,维护一个数组,存储最近0.5s内每隔10ms的动作历史。进行手势识别时,从前到后遍历数组,若遇到方向0则忽略;若遇到方向1、5之间的跳变,则向水平方向摇动的计数器增加1;垂直方向依此类推。若最终计数值大于某个阈值,则认为发生了相应的鼠标手势。类似的算法还能应用于轨迹球顺、逆时针转动等手势的识别。

为了避免同一次手势被多次识别,我们引入了"不应期"机制,即当一个鼠标手势发生时,向某个变量装载一个初值,并在以后的访问中逐次减1,直到其值重新为0前都不再进行手势识别。

2.2.3 系统软件流程

系统的软件运行流程如图2.5所示。

上电复位后,首先对单片机的时钟、GPIO、USB通信模块和定时器进行初始化;接着以查询方式分别与3个PS/2设备通信,完成相应的配置;再通过USB与上位PC通信,声明HID设备类型;最后,使能PS/2通信涉及的GPIO中断和定时器中断,进入休眠模式,系统开始正常工作。

共有3种中断可将CPU唤醒。其中,GPIO的下降沿中断与定时器中断用于实现PS/2驱动,已在前面说明。本系统的USB工作在高速模式下,在此模式下,上位PC每隔1ms查询一次USB设备,在下位单片机引发一个中断。该中断响应函数调用联络层的函数,识别键盘键值和轨迹球的手势,并启动HID报文发送。

双轨迹球键盘软件运行流程

2.2.4 系统实现效果

硬件方面,我们改造完成了一个双轨迹球键盘(图2.6左),键盘及轨迹球通过PS/2协议发送数据到EVK1100开发板,开发板再通过USB接口与上位机相连(图2.6右)。

双轨迹球键盘硬件系统

USB接头插入计算机后,可以看到设备管理器中在只增加一个USB输入设备的同时增加了一个鼠标和一个键盘(图2.7)。

插入双轨迹球键盘前后设备管理器对比

左:未插入Lazyboard;右:插入Lazyboard

软件方面,除了可以正常的实现键盘的文本输入及控制,还可以通过轨迹球实现如下基本功能:

(1)单独滚动任意一个轨迹球可进行光标的移动;

(2)左球按下相当于单击左键,右球按下相当于单击右键;

(3)按下左球同时滚动右球,相当于按下左键进行拖拽;

(4)按下右球同时滚动左球,相当于按下右键进行拖拽;

(5)两球同时向下是向下滚动滚轮,反之向上滚动滚轮;

(6)两球同时向外侧是放大,同时向内侧是缩小;

(7)左球左右摇动,打开Windows搜索框;

(8)左球上下摇动,打开"我的电脑";

(9)右球左右摇动,切换到桌面;

(10)右球上下摇动,打开"任务管理器"。

除了以上基本功能,我们还将进一步增加轨迹球手势,如转动(rolling)等,并实现更多诸如双击、刷新、启动任务管理器乃至关机等常用计算机功能的便捷操作。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top