linux app调用 jni 加载 led驱动点亮led等

本文详细介绍了如何在Linux环境下,通过app调用JNI接口来加载C++编写的JNI库,进而操作LED驱动以点亮LED灯。首先展示了app部分的图形界面activity代码,接着是JNI的C++实现,包括基本的代码框架和Android.mk文件。LED驱动的实现参考了作者之前的文章,并提示调试时需注意printk的日志级别。最终,经过调试验证,app成功点亮了平板上的LED灯。
摘要由CSDN通过智能技术生成

1.app部分编写代码流程

jni : java native interface 
java代码调用jni的方式:
1, 加载jni的动态库
	static{
		System.loadLibrary("led_jni"); // /system/lib/libled_jni.so 
	}
2, 声明本地native方法
	public native int openDev();
	public native int devOn();
	public native int devOff();
	public native int closeDev();
3, 直接调用native方法
	mynative.openDev();

示例代码如下:

LedActive.java
package com.example.ducks;

import com.hq.lowlevel.LedNative;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;
import android.view.View.OnClickListener;

public class LedActivity extends Activity{

	LedNative mynative;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_led);
		initUI();
		
		mynative = new LedNative();
		
		mynative.openDev();
	}
	
	private void initUI() {
		// TODO Auto-generated method stub
		Button btn_on = (Button) findViewById(R.id.led1_off);
		Button btn_off = (Button) findViewById(R.id.led1_on);
		
		btn_on.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i("LedActivity", "led on");
				Toast.makeText(LedActivity.this, "狼来了,请闭眼", 3000).show();
				mynative.devOn();
			}
		});
		
		btn_off.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i("LedActivity", "led off");
				Toast.makeText(LedActivity.this, "天亮了,请睁眼", 3000).show();
				
				mynative.devOff();
			}
		});
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		mynative.closeDev();
	}
	
}

led图形界面activity代码如下:

package com.example.keeprun;

import com.hq.lowlevel.LedNative;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class LedActivity extends Activity {
	Button btn_on;
	Button btn_off;
	LedNative mynative;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_led);
		initUI();
		mynative = new LedNative();
		//调用本地方法
		mynative.openDev();
	}

	private void initUI() {
		// TODO Auto-generated method stub
		btn_on = (Button) findViewById(R.id.btn_on);
		btn_off = (Button) findViewById(R.id.btn_off);
		btn_on.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i("LedActivity", "led on");
				Toast.makeText(LedActivity.this, "灯亮了", 1000).show();
				mynative.devOn();
			}
		});
		
		btn_off.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Log.i("LedActivit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值