




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档-下载后可编辑基于Android平台的鼠标的设计方案-技术方案摘要:针对当前基于Android平台的电子产品的市场需求,以谷歌发布的Gingerbread源码为软件平台,以东南大学国家专用集成电路系统工程技术研究中心设计的基于国产CPU的sep6200芯片为硬件平台,在分析Android输入系统框架的基础上,设计并实现了软件鼠标和硬件鼠标功能,方案设计灵活。对于手持终端设备来说,鼠标的支持大大提高了用户的体验性能,具有一定的市场应用价值。
随着嵌入式系统产业的高速发展,智能手持终端设备的操作系统也越来越多样化。目前市场上倍受广大用户青睐的是Google的Android、微软的WindowMobile、诺基亚的Symbian、RIM的黑莓和苹果的iOS。
Android是Google于2022年11月05日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。凭借开放源码完全等特性,其在嵌入式领域异军突起,如今占据智能手持终端设备领域的半壁江山。
以Android系统为搭载平台的电子产品越来越流行,特别是平板电脑的出现,使用户对产品硬件配置和体验性能方面的要求越来越高。而Android本身提供的交互方式仅限于按键,触摸屏和轨迹球,无法满足用户的需求。针对其输入装置的不足,本文实现了一种用户熟悉的交互方式:鼠标,其无疑是完美的人机交互方式。鼠标的实现使Android系统应用在其他领域成为可能,并同时提高了Android产品的市场竞争力。
1输入系统
1.1输入系统驱动框架
如图1所示,Android输入系统中的驱动框架由事件处理层(EventHandler),层(InputCore)和驱动层(InputDriver)三部份组成。
EventHandler用于用户空间获取输入事件。用户空间打开输入设备的设备节点,然后对节点进行读写操作以获得鼠标移动信息,或者键盘信息等等。这里对设备节点的文件操作函数就是由该层提供;Inputdriver具体设备的驱动;InputCore负责管理所有的资源并连接驱动层和事件处理层。
图1输入系统驱动框图
1.2输入系统上层框架
随着Android系统的不断升级,其输入系统框架也发生变化,相对于2.1版本来说,Gingerbread的输入系统比较复杂,同时创建了三个线程,并用了匿名共享内存机制,且很多在Java层的数据处理都放到了c++底层,然而这样却可以使性能明显增加,节省系统资源。
如图2所示,WindowManagerService创建了三个线程:
InputReaderThread通过EventHub读取输入事件,并通过不同事件类型的InputMapper进行数据处理,然后放到输入事件队列;InputDispatcherThread将队列中的输入事件取出通过InputPublisher放到匿名共享内存里;PolicyThread管理当前窗口显示等。
图2输入系统上层框图
InputPublisher和InputConsumer通过InputChannel进行双向通信。当InputPublisher把输入事件放到共享内存时会通知InputConsumer有事件传入,InputConsumer收到通知后会从共享内存取出事件数据,通过InputQueue传给ViewRoot,ViewRoot对事件进行分类后传给当前具有焦点的View(FocusView)处理。InputConsumer处理完事件后会通知InputPublisher已处理完成,InputPublisher接到通知后会开始向共享内存传输下输入事件。
2鼠标实现
无论是软鼠标还是硬鼠标,其实现机制都是一样的。都需要读取事件进行数据处理,不同的是当实现鼠标移动时,软鼠标是把鼠标坐标值传给上层,而硬鼠标则是把鼠标坐标值传给驱动。鼠标事件的读取和处理过程的实现:
(1)在EventHub中对鼠标事件加鼠标类型标志位;
(2)在InputReader中创建MouseInputMapper类,该类主要对鼠标的数据进行处理,主要成员函数定义如下:
编写该类的成员函数,实现鼠标事件数据的处理,并把该类的实例化对象与鼠标事件对应起来。
这样当输入事件是鼠标事件时就可以调用对应的处理函数。
2.1软鼠标实现
上面已经实现了鼠标事件的处理,这里只要绘制鼠标并把把鼠标坐标传给绘制的鼠标即可。
(1)在WindowManagerService中绘制鼠标,并实现设置鼠标位置的函数;(2)从上面分析可知,终的事件会发送到ViewRoot进行分类,所以在这里当输入事件是鼠标事件时,利用进程间通信机制把鼠标的坐标值传给鼠标,设置其正确位置。
2.2硬鼠标实现
本文的硬件平台sep6200是一款定位于手持视频播放设备、卫星导航产品的高性能芯片。其LCDC支持16bpp、18bpp、24bpp格式rgb图像显示;支持yuv420、yuv422、yuv444格式视频图像显示;支持1080p高清视频输出;支持HDMI输出接口;支持多四层Overlay透明显示:基层(800×600,24bpp/18bpp/16bpprgb图像),覆盖层1(800×600,yuv422/420/424视频图像),覆盖层2(800×600,24bpp/18bpp/16bpprgb图像),鼠标层(1bpp/2bpp图像)。因此通过为鼠标层分配内存并实现相应的ioctl操作即可实现硬件鼠标。下面介绍的是整个Overlay驱动的实现,包括鼠标的实现。
2.2.1Overlay驱动实现
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_twhen)处理数据之后调用OVERLAY_SETPOS_CURSOR把鼠标坐标值传给Overlay驱动的鼠标层,配置相应的寄存器设置鼠标的位置,就可以实现硬鼠标的移动。
2.3软鼠标和硬鼠标的对比
由上面实现可知,软鼠标和硬鼠标的实现机制是一样的:绘制鼠标和设置鼠标位置。但是软鼠标由软件来绘制,性能比较差,且消耗CPU资源;而硬鼠标完全由硬件控制,性能高。通过实验验证,当玩大型游戏或者播放视频时,软鼠标反应迟钝,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精益生产方式与企业精益化管理探讨
- 供暖行业部门管理办法
- 殡葬管理办法实施效果
- 金融硕士课程体系核心知识图谱构建
- 高效农田建设与管理策略研究
- 北京通风廊道管理办法
- 小学教师教学研究成果展示
- 煤矿安全检查工证件查询
- 机场勘测项目管理办法
- 安全生产知培训
- 中远海运招聘笔试题库2025
- 中小学小班化教学模式与支持体系构建研究
- 温州市2024-2025学年高一下学期6月期末-英语试卷及答案
- 2025至2030中国核应急机器人行业市场现状分析及竞争格局与投资发展报告
- 导管室护理管理制度
- 降低跌倒事件的发生率QC圈
- 深静脉血栓的试题及答案
- 2025年安徽省邮政行业职业技能大赛(快递员赛项)备赛试题库(含答案)
- 汽车产业链协同发展-洞察阐释
- 滴灌带造颗粒合同协议
- 学校总务后勤工作总结模版
评论
0/150
提交评论