Android 从硬件到应用程序:一步一步爬上去 6 -- 我写的APP测试框架层硬件服务(终点)
创Android Applicationproject:采用Eclipse的Android插入ADT创Androidproject,project名字Gpio,创建完成后,project文件夹packages/apps/文件夹下,并删除project文件夹下的gen文件夹。不删除的话会造成类反复的错误。
src/com/android/gpio/Gpio.java:
package com.android.gpio;
import com.android.gpio.R;
import android.app.Activity;
import android.os.ServiceManager;
import android.os.Bundle;
import android.os.IGpioService;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class Gpio extends Activity implements OnClickListener {
private final static String LOG_TAG = "com.android.Gpio";
private IGpioService gpioService = null; private Button setButton = null;
private Button clearButton = null; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); gpioService = IGpioService.Stub.asInterface(
ServiceManager.getService("gpio")); setButton = (Button)findViewById(R.id.button_set);
clearButton = (Button)findViewById(R.id.button_clear); setButton.setOnClickListener(this);
clearButton.setOnClickListener(this);
} @Override
public void onClick(View v) {
if(v.equals(setButton)) {
try{
int val='1';
gpioService.setVal(val);
} catch (RemoteException e){
Log.e(LOG_TAG,"setting value");
}
}
else if(v.equals(clearButton)) {
try{
int val='0';
gpioService.setVal(val);
} catch (RemoteException e){
Log.e(LOG_TAG,"setting value");
}
}
}
}
布局res/layout/main.xml:
<? xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> <Button
android:id="@+id/button_clear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/clear"
android:textStyle="bold"
android:layout_marginTop="140dp"/>
<Button
android:id="@+id/button_set"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/set"
android:textStyle="bold"
android:layout_marginTop="0dp"/>
</LinearLayout>
字符串res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"? >
<resources>
<string name="app_name">GPIO</string>
<string name="set">Set</string>
<string name="clear">Clear</string>
</resources>
AndroidManifest.xml:
<? xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.gpio"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
<activity android:name=".Gpio"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
编辑project文件夹下Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := Gpio
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
编辑build/target/product/generic_no_telephony.mk:
在PRODUCT_PACKAGES := \ 后增加Gpio \
编译project会生成Gpio.apk
make TARGET_PRODUCT=am335xevm_sk -j8 OMAPES=4.x
到这一步一切准备工作都已就绪,開始更新目标板am335evm的文件系统:(左为host,右为evm)
out/target/product/am335xevm_sk/system/app/Gpio.apk ==> rootfs/ out/target/product/am335xevm_sk/system/framework/services.jar ==> rootfs/system/framework/ out/target/product/am335xevm_sk/system/framework/framework.jar ==> rootfs/system/framework/ out/target/product/am335xevm_sk/obj/lib/libandroid_servers.so ==> rootfs/system/lib/ out/target/product/am335xevm_sk/obj/lib/gpio.default.so ==> rootfs/system/lib/hw/
确保rootfs下 ueventd.rc 已经加入:(Android 从硬件到应用:一步一步向上爬 3 -- 硬件抽象层訪问硬件驱动 提到)
/dev/AdrIO 0666 root root
启动,安装Gpio.apk。打开GPIO:
现象:
点击"Set"button: D1灯亮 点击"Clear"button: D1灯灭
可见编写的APP通过调用硬件服务已经成功操作了AM335寄存器,改变AM335X_GPIO_LED4级别。经N渎MOS设备控制LED D1灯灭。
版权声明:本文博主原创文章,博客,未经同意不得转载。
Android 从硬件到应用程序:一步一步爬上去 6 -- 我写的APP测试框架层硬件服务(终点)的更多相关文章
- Android 从硬件到应用程序:一步一步爬上去 5 -- 在Frameworks蒂姆层硬件服务
Android Frameworks层提供硬件服务,Android系统APP能够调用这些硬件服务,而硬件则完全控制.实现应有的功能.上一页下一页.为了这一个frameworks高层的应用java接口硬 ...
- Android 从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调硬件驱动
Android下,java应用程序通过JNI方法调用硬件抽象层模块,在Android 从硬件到应用:一步一步向上爬 3 -- 硬件抽象层訪问硬件驱动 中我们已经编译好了硬件抽象层模块,以下就要開始为H ...
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...
- 深入学习:如何实现不同Android设备之间相同应用程序的网络服务发现功能
在我们的app中添加网络服务发现功能(NSD)以方便在不同的设备上响应局域网中的请求.这种功能对于多设备之间点对点服务来说很有用,例如多人游戏,多人通话,文件共享等. 一,在网络中注册你的服务 注意: ...
- 使用GDB调试Android NDK native(C/C++)程序
使用GDB调试Android NDK native(C/C++)程序 先说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口 ...
- Android系统默认Home应用程序(Launcher)的启动过程源码分析
在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还须要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...
- Android系统默认Home应用程序(Launcher)的启动过程源代码分析
在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个 Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序
NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...
随机推荐
- UVA305 - Joseph(数论 + 打表)
UVA305 - Joseph(数论 + 打表) 题目链接 题目大意:约瑟夫环问题:n个人围成一圈,每次都淘汰第m个人,问最后一个幸存下来的人的编号. 这题的意思有点不一样,它规定前面的k个人是好人, ...
- Eclipse热键
Eclipse编辑功能很强大.掌握Eclipse快捷功能.高开发效率.Eclipse中有例如以下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编辑的好帮手.能为用户提供 ...
- [TroubleShooting] The server network address can not be reached or does not exist
Backtround: I'm trying to set up mirroring between two sql 2008 R2 databases on different servers in ...
- 【原创】构建高性能ASP.NET站点 开篇
原文:[原创]构建高性能ASP.NET站点 开篇 构建高性能ASP.NET站点 开篇 前言:有段时间没有写ASP.NET的东西了,心里总是觉得缺少了什么,毕竟自己对ASP.NET还是情有独钟的. 在本 ...
- POJ 3691 DNA repair 基于AC自己主动机DP
dp[i][j] 它表示的长度 i 下游前缀 j 更改节点的最小数量. 很清楚dp[0][0] = 0; dp[ i ][ j ] = min(dp[ i ][ j ],dp[i-1][k] + (j ...
- POJ 2226 Muddy Fields(最小顶点覆盖)
POJ 2226 Muddy Fields 题目链接 题意:给定一个图,要求用纸片去覆盖'*'的位置.纸片能够重叠.可是不能放到'.'的位置,为最少须要几个纸片 思路:二分图匹配求最小点覆盖.和放车那 ...
- SharePoint 2010 Form Authentication (SQL) based on existing database
SharePoint 2010 表单认证,基于现有数据库的用户信息表 本文主要描写叙述本人配置过程中涉及到的步骤,仅作为參考,不要仅限于此步骤. 另外本文通俗易懂,适合大众口味儿. I. 开启并配置基 ...
- 移动端 微信 网易 触屏滑动回弹菜单(css版)
总结一下: 有点:网易新闻,微信 热文 都是 -webkit-overflow-scrolling: touch;实现,css实现,轻巧: bug: 部分安卓浏览器(uc,自带) 只支持持续滑动,不 ...
- poj 1274The Perfect Stall
第一次接触二分图匹配. 这题是一个匈牙利算法的模板题直接套即可. 题意是 给你奶牛和谷仓的个数a和b,接下来a行是奶牛喜欢去的谷仓.第一个是谷仓个数,接下来是谷仓编号. 这里我们把行当奶牛,列当谷仓 ...
- Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)
Centos 6.5下一个SNMP简单配置(snmp protocol v3.监控宝) jom_ch@2014/7/25 1,安装 >yum -y install net-snmp net-sn ...