JNI
目录:
frameworks/base/services/jni/com_android_server_FMService.cpp
因为要调用hardware
中的函数,因此需要添加头文件:
#include <hardware/hw_tea5767.h>
注册JNI
方法
int register_android_server_FMService(JNIEnv *env) {
return jniRegisterNativeMethods(env, "com/android/server/FMService", method_table, NELEM(method_table));
}
JNI
方法表
/*JNI方法表*/
static const JNINativeMethod method_table[] = {
{"init_native", "()Z", (void*)tea5767_init},
{"getADC_native", "()I", (void*)tea5767_getADC},
{"getFreq_native", "()I", (void*)tea5767_getFreq},
{"setFreq_native", "(I)V", (void*)tea5767_setFreq},
{"searchNextorPreFreq_native", "(I)V", (void*)tea5767_searchNextorPreFreq},
{"setNextorPreFreq_native", "(I)V", (void*)tea5767_setNextorPreFreq},
{"enableMute_native", "(I)V", (void*)tea5767_enableMute},
{"getIsMute_native", "()I", (void*)tea5767_getIsMute},
{"startAutoSearch_native", "()V", (void*)tea5767_autoSearch},
};
剩下一步是访问硬件的接口实现:
/在硬件抽象层中定义的硬件访问结构体,参考<hardware/tea5767.h>
/
struct tea5767_device_t* tea5767_device = NULL;
static void tea5767_setFreq(JNIEnv* env, jobject clazz, jint freq){
if(!tea5767_device){
LOGE("FM jni is not open..");
return ;
}
tea5767_device->setFreq(tea5767_device,freq);
LOGI("set fm freq = %d",freq);
return ;
}
frameworks/base/services/jni/onload.cpp
中
LOCAL_SRC_FILES:= \
下添加
com_android_server_FMService.cpp \
frameworks/base/services/jni/Android.mk
namespace android
中添加
int register_android_server_FMService(JNIEnv *env);
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
下添加
register_android_server_FMService(env);