基本信息
源码名称:hal调用底层示例代码
源码大小:2.10KB
文件格式:.cpp
开发语言:C/C++
更新时间:2015-06-11
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


#include <utils/Log.h>

#include "../HAL/minicom.h"

#include "jni.h"

static int fd;

//定义两个指针
struct usb_hw_module_t *pModule;
struct usb_hw_device_t *pDevice;


jint open_led(JNIEnv *env, jobject thiz)
{
	LOGD("------%s-----\n", __FUNCTION__);
	jint ret;
	ret = hw_get_module(MINICOM_ID, (const struct hw_module_t * *) &pModule);
	if(ret == 0)
	{
		LOGD("get hal module ok\n");
		//调用module对象的open方法,实际上是调用usb_module_open方法
		pModule->common.methods->open(&pModule->common, NULL, (struct hw_device_t * *)&pDevice);
		if(pDevice != NULL)
		{
			//调用pDevice中的方法
			pDevice->open();
		}
	}
	else{
		LOGD("get hal module failed \n");
		return -1;
	}
	return 0;
}

jint led_on(JNIEnv *env, jobject thiz, jint a)
{
	LOGD("------%s-----\n", __FUNCTION__);
	if(pDevice != NULL)
	{
		pDevice->control_dev(1);
	}
	return 0;
}

jint led_off(JNIEnv *env, jobject thiz, jint a)
{
	LOGD("------%s-----\n", __FUNCTION__);
	if(pDevice != NULL)
	{
		pDevice->control_dev(0);
	}
	return 0;
}

jint close_led(JNIEnv *env, jobject thiz)
{
	LOGD("------%s-----\n", __FUNCTION__);
	if(pDevice != NULL)
	{
		pDevice->common.close((struct hw_device_t*)pDevice);
	}
	return 0;
}

static JNINativeMethod myMethods[] = {
		{"openDev", "()I", (void *)open_led},
		{"onLed", "()I", (void *)led_on},
		{"offLed", "()I", (void *)led_off},
		{"closeDev", "()I", (void *)close_led},
};

jint JNI_OnLoad(JavaVM * vm, void * reserved)
{
	LOGD("------%s-----\n", __FUNCTION__);
	JNIEnv *env = NULL;
	jint ret;

	//通过vm获取到环境变量对象,提供操作java代码的方法

	ret = vm->GetEnv((void **)&env, JNI_VERSION_1_4);
	if(ret != JNI_OK)
	{
		LOGE("vm->GetEnv error \n");
		return -1;
	}

	//注册映射表
	jclass cls = env->FindClass("com/caiii/minicom/MainActivity");
	if(cls == NULL)
	{
		LOGE("env->FindClass error \n");
		return -1;
	}
	ret = env->RegisterNatives(cls, myMethods, sizeof(myMethods)/sizeof(myMethods[0]));
	if(ret < 0)
	{	
		LOGE("env->RegisterNatives error\n");
		return -1;
	}

	return JNI_VERSION_1_4;
}