基于Android平台的鼠标的设计方案
800× 600,24bpp/18bpp/16bpp rgb 图像), 覆盖层1 ( 800 × 600,yuv422/420/424 视频图像), 覆盖层2 (800 × 600,24bpp/18bpp/16bpprgb 图像), 鼠标层(1bpp/2bpp图像)。因此通过为鼠标层分配内存并实现相应的ioctl 操作即可实现硬件鼠标。下面介绍的是整个Overlay 驱动的实现,包括鼠标的实现。
2. 2. 1 Overlay 驱动实现
Overlay 驱动的核心结构体是platform_driver 和miscdevice,他们定义如下:
其中sep6200_overlay_fops 的定义如下:
结构体sep6200 _overlay_misc_device 用于为Overlay 创建一个字符设备节点以便与用户空间通信,而sep6200_overlay_fops 是对该设备节点的操作函数,我们要对这个结构体进行填充并编写所有与Overlay 相关的功能函数,以使Overlay 层能够正常工作。
对于鼠标层来说最主要的是在sep6200_overlay_probe 中调用dma_alloc_writecombine( )为鼠标层分配内存以及在sep6200_overlay_ioctl 中实现两个ioctl 操作:
OVERLAY_SHOW_CURSOR显示鼠标,即画鼠标图形并复制到上面分配的内存中。
OVERLAY_SETPOS_CURSOR设置鼠标位置。
2. 2. 2硬鼠标上层实现
鼠标驱动实现后,用户空间就可以调用相应的接口操作实现鼠标功能。由于硬件鼠标的坐标值只需要传给底层Overlay 驱动即可,所以主要是在上面已经实现好的MouseInputMapper 类的构造函数里调用OVERLAY_SHOW_CURSOR 显示鼠标,在其成员函数sync ( nsecs _ t when) 处理数据之后调用OVERLAY_SETPOS_CURSOR 把鼠标坐标值传给Overlay 驱动的鼠标层,配置相应的寄存器设置鼠标的位置,就可以实现硬鼠标的精确移动。
2. 3 软鼠标和硬鼠标的对比
由上面实现可知,软鼠标和硬鼠标的实现机制是一样的:绘制鼠标和设置鼠标位置。但是软鼠标由软件来绘制,性能比较差,且消耗CPU 资源;而硬鼠标完全由硬件控制,性能高。通过实验验证,当玩大型游戏或者播放视频时,软鼠标反应迟钝,有时几乎不动,而硬鼠标则反应灵敏,移动位置精确。
3 总结
本文面向当前Android 手持终端市场,充分考虑到了实际产品的需要,有针对性地提出了实现鼠标的两种不同方案:软鼠标和硬鼠标,并指出了其优缺点。这两种方案根据不同的硬件平台有不同的应用。本文基于实际产品研发,项目中的芯片支持硬鼠标功能,采用了硬鼠标方案,产品具有一定的市场竞争力。
- 基于FPGA的DSP设计方法(08-26)
- 电力电子装置控制系统的DSP设计方案(04-08)
- 基于DSP Builder的VGA接口设计(04-10)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 数字信号处理(DSP)应用系统中的低功耗设计(05-02)
- 基于DSP的嵌入式显微图像处理系统的设计(06-28)