Android应用程序之LED驱动

工欲善其事必先利其器,很多人都想知道 libfriendlyarm-hardware.so 是怎么实现的,但是非常遗憾,它的代码并不开源我们倒不如来个逆向思维,先学会去使用它,在使用的过程中你就会发现很多细节,这也是创造者留下的蛛丝马迹。等你对这些接口十分了解后,你自然会成为下一个 libfriendlyarm-hardware.so 实现者。
    本文介绍如何使用
libfriendlyarm-hardware.so 驱动 Tiny6410-S70 开发板上的四盏 LED 灯。

1.在 SDK 下新建 Android 应用程序;
2.定位到你的 Android 应用程序目录在应用程序目录下创建 libs 目录,再进入 libs 目录下创建 armeabi 目录,然后将 libfriendlyrm-hardware.so 库文件拷贝到armeabi 目录下
3.回到你的应用程序目录,进入 src 目录下分别创建 com\friendlyarm\AndroidSDK 三层目录,然后在 AndroidSDK 目录下用文件编辑器新增一个源代码文件并命名为 HardwareControler.java,,在该文件中输入以下代码:
package com.friendlyarm.AndroidSDK;

public class HardwareControler
{
    static public native int setLedState( int ledID, int ledState );
    static {
        System.loadLibrary("friendlyarm-hardware");
    }   
}
   
Android 是基于 java 语言的,要想在 java 中使用 C/C++ 语言编写的函数就要使用 JNI 接口当我们选择使用 libfriendlyrm-hardware.so 库的那一刻起,就注定我们要在 ..\..\AndroidSDK 目录下创建一个名为 HardwareControler 的类,并在该类下声明本地接口及加载动态库。
4.在 Eclipse 左侧右击你的项目,选择“Refresh”刷新一下项目,便可以项目相关目录看到
libfriendlyarm-hardware.so 和 HardwareControler.java。
   

5.
编写前端 Activity 类;
    LED 的点亮和熄灭通常使用按钮来控制,Android 中有一种 ToggleButton 可以实现开关状态。对于一个按钮要给它绑定一个监听器:
     bt1.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(bt1.isChecked())
                    hc.setLedState(0, 1);
                else
                    hc.setLedState(0, 0);    
            }     
        });
    上述的实现是采用 java 中匿名内置类的用法。

posted @ 2013-04-09 16:21  莫回头  阅读(403)  评论(0)    收藏  举报