【Android论文栏目提醒】:网学会员Android论文为您提供基于Android平台的鼠标 - 期刊论文参考,解决您在基于Android平台的鼠标 - 期刊论文学习中工作中的难题,参考学习。
第 35 卷 第 1 期 电 子 器 件 Vol. 35 No. 1 2012 年 2 月 Chinese Journal of Electron Devices Feb. 2012 Design & Implementation of Cursor Based on
Android Platform LIU Shasha,ZHANG Zhe ( Electronic Science and Engineering College,Southeast University,Nanjing 210096,China) aAbstract: For the current market demand for electronic devices based on
Android platform, lot of analyses on theinput system framework of Gingerbread have been done, flexible hardware and software cursor are designed; The and ahardware platform is sep6200, high performance system of chip with domestic CPU in it. Additionally sep6200 isdesigned by Southeast University ASIC( Application-Specific Integrated Circuit) System Engineering Research Cen-ter. To the portable terminal devices, cursor greatly improves the performance of the user experience and is valu- theable for market.Key words: embedded; cursor; sep6200 chip;
Android; input systemEEACC: 7200 doi: 10. 3969 / j. issn. 1005-9490. 2012. 01. 019 基于
Android 平台的鼠标 刘莎莎, 张 哲 ( 东南大学电子科学与工程院,南京 210096)摘 要:针对当前基于
Android 平台的电子产品的市场需求,以谷歌发布的 Gingerbread 源码为软件平台,以东南大学国家专用集成电路系统工程技术研究中心设计的基于国产 CPU 的 sep6200 芯片为硬件平台,在分析
Android 输入系统框架的基础上,设计并实现了软件鼠标和硬件鼠标功能,方案设计灵活。
对于手持终端设备来说,鼠标的支持大大提高了用户的体验性能,具有一定的市场应用价值。
关键词:嵌入式; 鼠标; sep6200 芯片;
Android; 输入系统中图分类号:TP316 文献标识码:A 文章编号:1005-9490(2012)01-0079-04 随着嵌入式系统产业的高速发展, 智能手持终端 完美的人机交互方式。
鼠标的实现使
Android 系统设备的操作系统也越来越多样化。
目前市场上倍受 应用在其他领域成为可能, 并同时提高了
Android广大用户青睐的是 Google 的
Android、 微软的 Window 产品的市场竞争力。
诺基亚的 Symbian、 的黑莓和苹果的 iOS。
Mobile、 RIMAndroid 是 Google 于 2007 年 11 月 05 日宣布的基于 1 输入系统Linux 平台的开源手机操作系统的名称,该平台由操 1. 1 输入系统驱动框架作系统、 中间件、用户界面和应用软件组成。
凭借开 如图 1 所示,
Android 输入系统中的驱动框架由放源码完全免费等特性,其在嵌入式领域异军突起, 事件处理层( Event Handler) ,核心层 ( Input Core) 和 〔 〕 1-2 〔3〕如今占据智能手持终端设备领域的半壁江山 。
驱动层( Input Driver) 三部份组成 。
以
Android 系统为搭载平台的电子产品越来越 Event Handler 用于用户空间获取输入事件。
流行,特别是平板电脑的出现,使用户对产品硬件配 用户空间打开输入设备的设备节点,然后对节点进置和体验性能方面的要求越来越高。
而
Android 本 行读写操作以获得鼠标移动信息,或者键盘信息等身提供的交互方式仅限于按键,触摸屏和轨迹球,无 等。
这里对设备节点的文件操作函数就是由该层法满足用户的需求。
针对其输入装置的不足,本文 提供;实现了一种用户熟悉的交互方式 : 鼠标,其无疑是最 Input driver 具体设备的驱动;项目来源:国家重大专项收稿日期:2011-08-31 修改日期:2011-09-19 80 电 子 器 件 第 35 卷 负责管理所有的资源并连接驱动 Input Core层和事件处理层 。
2 鼠标实现 无论是软鼠标还是硬鼠标,其实现机制都是一 样的。
都需要读取事件进行数据处理,唯一不同的 是当实现鼠标移动时,软鼠标是把鼠标坐标值传给 上层,而硬鼠标则是把鼠标坐标值传给驱动。
鼠标 事件的读取和处理过程的实现: ( 1) 在 EventHub 中对鼠标事件加鼠标类型标 志位; ( 2 ) 在 InputReader 中 创 建 MouseInputMapper 类,该类主要对鼠标的数据进行处理 , 主要成员函数 定义如下: 图1 输入系统驱动框图 class MouseInputMapper: public1. 2 输入系统上层框架 InputMapper 随着
Android 系统的不断升级,其输入系统框 {架也发生变化,相对于 2. 1 版本来说,Gingerbread 的 public:输入系统比较复杂,同时创建了三个线程, 并用了匿 int32_t associatedDisplayId) ; MouseInputMapper( InputDevice device,名共享内存机制,且很多在 Java 层的数据处理都放 virtual ~ MouseInputMapper( ) ; c底层, virtual uint32_t getSources( ) ;到了 然而这样却可以使性能明显增加,节 〔4〕 virtual void省系统资源 。
populateDeviceInfo( InputDeviceInfo deviceInfo) ; 如图 2 所示,WindowManagerService 创建了三个 virtual void dump( String8& dump) ;线程: virtual void reset( ) ; InputReaderThread 通过 EventHub 读取输入事 virtual void process( constRawEvent rawEvent) ;件,并通过不同事件类型的 InputMapper 进行数据处 virtual int32_t理,然后放到输入事件队列; getScanCodeState( uint32_t InputDispatcherThread 将队列中的输入事件取 sourceMask,int32_t scanCode) ;出通过 InputPublisher 放到匿名共享内存里; private: PolicyThread 管理当前窗口显示等。
void initializeLocked( ) ; void sync( nsecs_t when) ; }; 编写该类的成员函数,实现鼠标事件数据的处 理,并把该类的实例化对象与鼠标事件对应起来 。
这样当输入事件是鼠标事件时就可以调用对应的处 理函数。
2. 1 软鼠标实现 上面已经实现了鼠标事件的处理,这里只要绘 图2 输入系统上层框图 〔5〕 制鼠标并把把鼠标坐标传给绘制的鼠标即可 。
InputPublisher 和 InputConsumer 通过 InputChannel ( 1) 在 WindowManagerService 中绘制鼠标,并实进行双向通信。
当 InputPublisher 把输入事件放到共 现设置鼠标位置的函数;享内存时会通知 InputConsumer 有事件传入, Input- ( 2) 从 上 面 分 析 可 知, 终 的 事 件 会 发 送 到 最Consumer 收到通知后会从共享内存取出事件数据, ViewRoot 进行分类, 所以在这里当输入事件是鼠标 〔6〕 ViewRoot 对事件进行通过 InputQueue 传给 ViewRoot, 事件时,利用进程间通信机制 把鼠标的坐标值传分类后传给当前具有焦点的 View( Focus View) 处理。
给鼠标,设置其正确位置。
InputConsumer 处理完事件后会通知 InputPublisher 已 2. 2 硬鼠标实现处理完成, InputPublisher 接到通知后会开始向共享内 本文的硬件平台 sep6200 是一款定位于手持视存传输下一次输入事件。
卫 频播 放 设 备、 星 导 航 产 品 的 高 性 能 芯 片。
其 第1 期 刘莎莎,张 哲: 基于
Android 平台的鼠标 81LCDC 支持 16bpp、 18bpp、24bpp 格式 rgb 图像显示; Overlay 相关的功能函数,以使 Overlay 层能够正常支持 yuv420、yuv422、yuv444 格式视频图像显示; 支 工作 。
持 1080p 高清视频输出; 支持 HDMI 输出接口; 支持 对于鼠标层来说最主要的是在 sep6200_overlay最多四层 Overlay 透明显示: 基层 ( 800 ×600, 24bpp / _probe 中调用 dma _alloc _writecombine ( ) 为鼠标层18bpp /16bpp rgb 图 像 ) ,覆 盖 层 1 ( 800 × 600, 分配内存以及在 sep6200 _overlay_ioctl 中实现两个yuv422 /420 /424 视 频 图 像 ) , 盖 层 2 ( 800 × 600, 覆 ioctl 操作:24bpp /18bpp /16bpprgb 图 像 ) , 标 层 ( 1bpp /2bpp 鼠 OVERLAY_SHOW_CURSOR 显示鼠标,即画图像) 。
因此通过为鼠标层分配内存并实现相应的 鼠标图形并复制到上面分配的内存中 。
ioctl 操作即可实现硬件鼠标。
下面介绍的是整个 OVERLAY_SETPOS_CURSOR 设置鼠标位置。
Overlay 驱动的实现,包括鼠标的实现。
2. 2. 2 硬鼠标上层实现2. 2. 1 Overlay 驱动实现 鼠标驱动实现后,用户空间就可以调用相应的 Overlay 驱动的核心结构体是 platform_driver 和 接口操作实现鼠标功能。
由于硬件鼠标的坐标值只miscdevice〔7-8〕,他们定义如下: 需要传给底层 Overlay 驱动即可,所以主要是在上面static struct platform_driver 已经实现好的 MouseInputMapper 类的构造函数里调sep6200_overlay_driver 用 OVERLAY_SHOW_CURSOR 显示鼠标, 在其成员{ 函数 sync( nsecs_t when) 处理数据之后调用 OVER- . driver LAY_SETPOS_CURSOR 把鼠标坐标值传给 Overlay { . name quot sep6200_overlayquot , 驱动的鼠标层,配置相应的寄存器设置鼠标的位置 , . owner THIS_MODULE, 就可以实现硬鼠标的精确移动。
}, 2. 3 软鼠标和硬鼠标的对比 . probe sep6200_overlay_probe, 由上面实现可知,软鼠标和硬鼠标的实现机制 . remove sep6200_overlay_remove, 是一样的: 绘制鼠标和设置鼠标位置。
但是软鼠标 . suspend sep6200_overlay_suspend, 由软件来绘制, 性能比较差,且消耗 CPU 资源; 而硬 . resume sep6200_overlay_resume, 鼠标完全由硬件控制,性能高。
通过实验验证,当玩}; 大型游戏或者播放视频时,软鼠标反应迟钝,有时几static struct miscdevice 乎不动,而硬鼠标则反应灵敏,移动位置精确。
sep6200_overlay_misc_device { 3 总结 DEV_MINOR, DEVICE_NAME, 本文面向当前
Android 手持终端市场,充分考 &sep6200_overlay_fops, 虑到了实际产品的需要,有针对性地提出了实现鼠}; 标的两种不同方案: 软鼠标和硬鼠标,并指出了其优其中 sep6200_overlay_fops 的定义如下: 缺点。
这两种方案根据不同的硬件平台有不同的应static struct file_operations 用。
本文基于实际产品研发,项目中的芯片支持硬sep6200_overlay_fops 鼠标功能,采用了硬鼠标方案,产品具有一定的市场{ 竞争力。
. owner THIS_MODULE, . poll sep6200_overlay_poll, 参考文献: . ioctl sep6200_overlay_ioctl, . mmap sep6200_overlay_mmap, 〔1〕 Ed,Burnette.
Android 基础教程〔M〕 张波等译. 北京: 人民邮电 . . open sep6200_overlay_open, 出版社, 2009. 11-15. . release sep6200_overlay_release, 〔2〕 杨丰盛.
Android 应用开发揭秘〔M〕 北京: 机械工业出版社, . 2010. 10-13.}; 〔3〕 胡伟.
Android 系统架构及其驱动研究〔J〕. 广州广播电视大学 结构体 sep6200_overlay_misc_device 用于为 O- ( 2010, 04) , 学报, 96-101.verlay 创建 一 个 字 符 设 备 节 点 以 便 与 用 户 空 间 通 〔4〕
Android 输入 事 件 流 程 中 的 EventHub 分 析 及 源 码 演 示〔EB /信, sep6200_overlay_fops 是对该设备节点的操作 而 OL〕 http: / / blog. csdn. net / a345017062 / article / details /6417929, .函数, 我们要对这个结构体进行填充并编写所有与 2011-5-13. 82 电 子 器 件 第 35 卷〔5〕 修改
Android 系统的鼠标光标〔 / OL〕 http: / / my. unix- EB . center. 〔7〕 宋宝华. Linux 设备驱动开发详解〔M〕. 北 京: 人民邮电出 版 net / ~ Simon_fu / ? p 555, 2010-7-9. 社, 2008. 440-478.〔6〕
Android aidl 使用详解〔EB / OL〕 http: / / blog. csdn. net / stonecao / . 〔8〕 韩超,梁泉.
Android 系统原理及开发要点详解〔M〕. 北京: 电 2011-5-16. article / details /6425019, 子工业出版社, .