基于DHT11温湿度传感器的Android硬件访问服务的简单实现(三)

本文详细介绍了如何通过JNI层和HAL层实现对DHT11温湿度传感器的硬件访问服务。在JNI层,通过C语言函数与Java本地方法对应,实现调用硬件操作。在HAL层,实现了hw_module_t结构体和hw_device_t结构体,用于设备的打开、关闭和数据获取。同时,讨论了HAL层作为JNI层与驱动层之间的桥梁,以及其保密作用。
摘要由CSDN通过智能技术生成


本文主要实现JNI层和HAL层,通过这两部分的实现来完成具体的硬件的调用过程。


一、JNI层的实现

JNI层的作用主要就是实现上层Java编写的服务层和下层C/C++编写的硬件访问层的相互调用。为了实现Java层和C/C++层之间的调用,需要实现一个C语言的函数和上文实现的Dht11Service.java这个文件当中的本地方法相对应映射,这个映射的实现具体如下:

static const JNINativeMethod methods[] = {
		{"native_dht11GetDatas", "()[B", (void *)dht11GetDatas},
		{"native_dht11Open", "()I", (void *)dht11Open},
		{"native_dht11Close", "()V", (void *)dht11Close},
	};

通过这个数组可以看出,每一个java实现的本地方法,都有一个相应的C语言实现的函数与其相对应,这样调用Java的本地方法就调用了相应的本地函数继而可以实现对硬件的访问操作,关于JNI是如何实现这一过程不是本文的重点,感兴趣的读者可以自己去查阅相关的数据和文章。

JNI层实现的这个文件的名为:com_android_server_Dht11Service.cpp,它的具体内容如下:

#define LOG_TAG "Dht11Service"

#include "jni.h"
#include "JNIHelp.h"
#include "android_runtime/AndroidRuntime.h"

#include <utils/misc.h>
#include <utils/Log.h>

#include <stdio.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <sys/ioctl.h>

#include <hardware/dht11_hal.h>


struct dht11_device_t* dht11_device;


namespace android
{
	JNIEXPORT jbyteArray JNICALL dht11GetDatas(JNIEnv *, jclass);
	JNIEXPORT jint JNICALL dht11Open(JNIEnv *, jclass);
	JNIEXPORT void JNICALL dht11Close(JNIEnv *, jclass);

	/* Define a array to implement a map for Java methods and C functions */
	static const JNINativeMethod methods[] = {
		{"native_dht11
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值