【Android论文栏目提醒】:网学会员--在 Android论文编辑为广大网友搜集整理了:嵌入式实验报告 - 其它论文绩等信息,祝愿广大网友取得需要的信息,参考学习。
嵌入式实验报告 嵌入式实验报告 完成
Android-x86系统在Atom510平台上的触摸屏校准及实现
Android-x86的触摸屏校准程序 计64 王鹏 2006010610 李瑞平 2006011343 郑益夫 2006011357 赵生宇 2006011350 2010-1-15 嵌入式实验报告 2 目录 嵌入式实验报告 ................................................................................................................... 3 一、 实验目的 ............................................................................................................. 3 1、实验背景 .................................................................................................................. 3 2、实验计划 ................................................................................................................. 3 二、 实验过程 ............................................................................................................. 3 1、实现
Android-x86系统在Atom510平台上的安装并测试触摸屏的使用情况 ........................................................................................................................ 3 2、手动完成
Android-x86系统在Atom平台上的触摸屏校准工作 ......... 4 3、完成
Android-x86系统的tslib移植工作并实现触摸屏校准程序 ... 5 三、实验总结 ................................................................................................................... 7 嵌入式实验报告 3 嵌入式实验报告 一、 实验目的 1、实验背景
Android系统是google开发的一套手机操作系统。
考虑到如今上网本市场的日益火爆不甘局限于手机平台的
Android操作系统也开始向x86平台移植google成立了LiveAndroid项目不过该项目自从推出 0.3 版本后似乎就没什么动静了。
目前名叫
Android x86的项目小组所完成的工作最为先进他们已经实现了
Android在x86平台上的很多硬件软件功能但他们的缺点是只在上网本eeepc上进行了测试并没有完成在其他x86平台上的正常运行例如我们实验中要解决的在Atom510平台上的触摸屏问题。
2、实验计划 1、实现
Android-x86系统在Atom510平台上的安装并测试触摸屏的使用情况 2、手动完成
Android-x86系统在Atom510平台上的触摸屏校准工作 3、完成
Android-x86系统的tslib移植工作并实现触摸屏校准程序 二、 实验过程 1、实现
Android-x86系统在Atom510平台上的安装并测试触摸屏的使用情况 首先要获取
Android-x86源码。
如何获取
Android x86小组最新的
Android-x86源码可以参考http://www.
android-x86.org/getsourcecode 上的说明实验中的
Android版本都是1.6。
接下来我们在linux系统下编译
Android-x86。
编译器必须选择较高版本的gcc已经试过的gcc 4.1.2是不能编译成功的gcc 4.4.2则可以。
第一次编译的时间会很长有3个小时左右不要makeclean以后编译大概只要花15分钟。
编译出的iso镜像文件存放在
android-x86/out/target/product/eeepc/中将其考到windows系统下用UltraISO制作成优盘启动盘。
使用制作成的优盘启动盘将
Android-x86系统安装到Atom平台上按照提示可以完成。
重启Atom平台后就可以运行
Android系统了。
接下来我们观察Atom平台上的触摸屏使用情况。
我们使用了
Android中的一个画图工具来进行测试这个工具可以在屏幕顶端输出LCD坐标。
经过我们的测试
Android-x86在嵌入式实验报告 4 Atom上的触摸屏在落点位置上有很大偏差并且LCD坐标的运动方向与实际的运动方向成90度需要调整。
2、手动完成
Android-x86系统在Atom平台上的触摸屏校准工作 首先我们要研究一下LCD坐标与实际坐标的运动方向相差90度的原因。
分析源码后发现
Android系统中在顶层控制输入设备的文件实际是用java语言写的是属于
Android系统应用层的功能它是frameworks/base/services/java/com/
android/serve/中的InputDevice.java文件。
我们将其与
Android源码中的同一个文件对比后发现
Android-x86为了能让鼠标能正常使用就多加了一个90度的旋转添加代码如下 if orientation Surface.ROTATION_90 orientation Surface.ROTATION_270 int tmp w w h h tmp 将这段代码删去后重新编译安装
Android-x86后发现LCD坐标的运动方向与触摸屏坐标的运动方向一致了但与鼠标的运动方向相差了90度。
考虑到鼠标与触摸屏的共同使用会产生问题并且原来的手机设备上并没有鼠标我们暂且搁置了鼠标上的90度错误。
接下来我们要进行触摸屏的手动校准工作。
在这之前我们要了解触摸屏校准的基本方法。
触摸屏校准的本质是要将触摸屏输出坐标校正到与LCD坐标一致它可以用一个矩阵转换完成。
具体的转换公式如下 sXs aXd bYd c sYs dXd eYd f 其中Xs、Ys是LCD坐标Xd、Yd是触摸屏输出坐标s是一个参数放大系数主要是为了增加精度一般都设得很大如65535。
校准工作实际上是要计算出af这6个校准参数的值。
我们可以举一个简单的320×240的触摸屏校准例子。
我们首先要知道至少3个已知的正确的LCD坐标并且测试出实际的LCD坐标。
已知的坐标可以选择成触摸屏的4个顶点00、3200、0240、320240再读出当点在这4个点上的实际坐标值。
将坐标带入公式并将s设为一个很大的数可以解出6个参数的值。
前面提到的
Android自带的画图工具可以帮助我们完成校准工作。
点在四个顶点00、0600、800600、8000上我们可以读出实际的LCD坐标2044、20555、770551、77140。
将s设置成4096我们可以近似的计算出af的值为4369.07、0、87381.33、4818.82、0、192752.94。
在InputDevice.java文件中正确的位置上添加如下代码 scaledX Float.valueOfDouble.toString4369.07 scaledX - 87381.33/4096 scaledY Float.valueOfDouble.toString4818.82 scaledY - 192752.94/4096 scaledX、scaledY是
Android系统从输入设备中得到的LCD坐标。
重新编译安装后我们可以看到触摸屏可以很精准的运行了。
嵌入式实验报告 5 3、完成
Android-x86系统的tslib移植工作并实现触摸屏校准程序 手工校准放法虽然效果不错但却不省事对于不同设备的不同触摸屏都要手工计算并且修改源代码。
Android系统上并没有触摸屏的校准程序我们打算自己实现一个。
tslib是一个使用得很广泛的触摸屏校准库它有自己的一套校准模型。
Android x86小组最近刚刚把这个库移植进了
Android-x86但还存在很多细节问题仍不能使用。
这些问题的修改方法如下 1、tslib有两个文件ts.conf、ts.env没有放入到
Android的文件系统内而
Android文件系统的特点是不会提供权限写文件所以我们必须要在编译时就将这两个文件加入。
编写好这两个文件后放在vendor/samsung/q1u/下并修改AndoidBoard.mk文件添加这两句话 eval call add-prebuilt-targetTARGET_OUT_DATA_ETCts.conf eval call add-prebuilt-targetTARGET_OUT_DATA_ETCts.env 这两个文件会出现在/system/etc/中。
2、fb0 的位置变了: tslib/tests/fbutils.cstatic char defaultfbdevice “/dev/fb0”改为static char defaultfbdevice /dev/graphics/fb0 3、plugins的目录变了src/ts_load_module.cdefine PLUGIN_DIR /system/lib/ts/plugins/” 改为 define PLUGIN_DIR /system/lib/ts/“ 4、ts.conf的修改 这时在Adroid的debug模式下执行ts_calibrate程序会报找不到模型文件的错误这是因为Adroid编译时将编译出的模型文件命名为input-raw了我们要将ts.conf中的选项module_raw input-raw打开。
5、ts.env的修改 ts.env内容如下 TSLIB_CONSOLEDEVICEnone TSLIB_FBDEVICE/dev/fb0 TSLIB_TSDEVICE/dev/input/event5 TSLIB_CALIBFILE/sdcard/pointercal TSLIB_CONFFILE/system/etc/ts.conf TSLIB_PLUGINDIR/lib/ts 6、校准后参数的写入问题 前面提到
Android文件系统的特点是不会提供权限写文件我们发现在SD卡中的文件我们是有写权限的问题是Atom平台并没有提供SD卡的接口。
Android x86小组提出了一个模拟SD卡的方法具体可以看嵌入式实验报告 6 www.
android-x86.org/documents/sdcardhowto 。
我们需要在
Android启动时按‘e’则可以编辑系统的环境变量添加‘SDCARDpremount’按‘b’启动后我们就在/sdcard/目录下有写权限了。
在ts.env中设TSLIB_CALIBFILE/sdcard/pointercal。
这时我们可以在
Android平台上正常运行tslib的校准程序并且校准结果参数存放在文件/sdcard/pointercal中。
接下来的操作就是在InputDevice.java中添加从文件读取参数实现校准公式的操作了。
修改添加如下 static class TransformInfo float x1 float y1 float z1 float x2 float y2 float z2 float s static int readCalNum TransformInfo t null int result 1 try FileReader fr new FileReaderCALIBRATION_FILE BufferedReader br new BufferedReaderfr String first_line br.readLine fr.close StringTokenizer st new StringTokenizerfirst_line t new TransformInfo t.x1 Integer.parseIntst.nextToken t.y1 Integer.parseIntst.nextToken t.z1 Integer.parseIntst.nextToken t.x2 Integer.parseIntst.nextToken t.y2 Integer.parseIntst.nextToken t.z2 Integer.parseIntst.nextToken t.s Integer.parseIntst.nextToken catchjava.io.FileNotFoundException e result 0 System.out.printlnFileNotFound catchjava.io.IOException e result 0 System.out.printlnIOException tInfo t return result 嵌入式实验报告 7 scaledX Float.valueOfDouble.toStringtInfo.x1 scaledX tInfo.y1 scaledY tInfo.z1/tInfo.s scaledY Float.valueOfDouble.toStringtInfo.x2 scaledX tInfo.y2 scaledY tInfo.z2/tInfo.s 这样我们就完成了
Android-x86的触摸屏校准程序了。
三、实验总结 这个实验是和编译实验结合的但实验中我们并没有用到编译实验中的任何东西。
总的来说实验做的还比较顺利。
除了刚开始时分析
Android代码时有些头痛。
我们碰到的困难主要有几个。
一个是所做项目缺乏很多资料没有前人做过的参照很多都只能自己来试。
还有就是在设计校准程序时本来最早打算用google给的
Android SDK开发工具来做研究的一段时间后发现很不靠谱走了一段弯路。
实验最大的困难是调试起来太麻烦了每次编译都要花大概15分钟左右还要制作启动盘、安装整个过程要花20多分钟一个上午也调不了几次。
相比较困难而言我们的收获也很丰富。
通过大量的查找资料提高了我们的调研能力。
此外我们对鼠标、触摸屏等输入设备的架构设计也有了一定的了解对于第三方库的移植也有了简单的了解和尝试。