zoukankan      html  css  js  c++  java
  • 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灯灭。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    PHP数组(数组正则表达式、数组、预定义数组)
    面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
    uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
    LA4329 Ping pong 树状数组
    HDU 1257 最少拦截系统
    HDU 1260 Tickets
    codeforce 621D
    codeforce 621C Wet Shark and Flowers
    codeforce 621B Wet Shark and Bishops
    codeforce 621A Wet Shark and Odd and Even
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4848562.html
Copyright © 2011-2022 走看看