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 中匿名内置类的用法。

浙公网安备 33010602011771号