设为首页 加入收藏

TOP

JNI对HAL的封装(一)
2013-04-24 12:13:39 】 浏览:1703
Tags:JNI HAL 封装

  文件位置:

  frameworks\base\services\jni

  动态注册文件:onload.cpp

  [cpp]

  #include "JNIHelp.h"

  #include "jni.h"

  #include "utils/Log.h"

  #include "utils/misc.h"

  namespace android {

  int register_android_server_AlarmManagerService(JNIEnv* env);

  int register_android_server_BatteryService(JNIEnv* env);

  int register_android_server_InputManager(JNIEnv* env);

  int register_android_server_LightsService(JNIEnv* env);

  int register_android_server_PowerManagerService(JNIEnv* env);

  int register_android_server_VibratorService(JNIEnv* env);

  int register_android_server_SystemServer(JNIEnv* env);

  int register_android_server_location_GpsLocationProvider(JNIEnv* env);

  };

  using namespace android;

  extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)

  {

  JNIEnv* env = NULL;

  jint result = -1;

  if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {

  LOGE("GetEnv failed!");

  return result;

  }

  LOG_ASSERT(env, "Could not retrieve the env!");

  register_android_server_PowerManagerService(env);

  register_android_server_InputManager(env);

  register_android_server_LightsService(env);

  register_android_server_AlarmManagerService(env);

  register_android_server_BatteryService(env);

  register_android_server_VibratorService(env);

  register_android_server_SystemServer(env);

  register_android_server_location_GpsLocationProvider(env);

  return JNI_VERSION_1_4;

  }

  注册文件主要做了两件事情:1在android空间声明注册函数2.在C空间注册jni中注册相关的服务

  将注册文件编译进内核

  [cpp]

  LOCAL_SRC_FILES:= \

  com_android_server_AlarmManagerService.cpp \

  com_android_server_BatteryService.cpp \

  com_android_server_InputManager.cpp \

  com_android_server_LightsService.cpp \

  com_android_server_PowerManagerService.cpp \

  com_android_server_SystemServer.cpp \

  com_android_server_UsbService.cpp \

  com_android_server_VibratorService.cpp \

  com_android_server_location_GpsLocationProvider.cpp \

  onload.cpp

  3.JNI实现(com_android_server_LightsService.cpp)

  [cpp]

  /*

  * Copyright (C) 2009 The Android Open Source Project

  *

  * Licensed under the Apache License, Version 2.0 (the "License");

  * you may not use this file except in compliance with the License.

  * You may obtain a copy of the License at

  *

  *      http://www.apache.org/licenses/LICENSE-2.0

  *

  * Unless required by applicable law or agreed to in writing, software

  * distributed under the License is distributed on an "AS IS" BASIS,

  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  * See the License for the specific language governing permissions and

  * limitations under the License.

  */

  #define LOG_TAG "LightsService"

  #include "jni.h"

  #include "JNIHelp.h"

  #include "android_runtime/AndroidRuntime.h"

  #include <utils/misc.h>

  #include <utils/Log.h>

  #include <hardware/hardware.h>

  #include <hardware/lights.h>

  #include <stdio.h>

  namespace android

  {

  // These values must correspond with the LIGHT_ID constants in

  // LightsService.java

  enum {

  LIGHT_INDEX_BACKLIGHT = 0,

  LIGHT_INDEX_KEYBOARD = 1,

  LIGHT_INDEX_BUTTONS = 2,

  LIGHT_INDEX_BATTERY = 3,

  LIGHT_INDEX_NOTIFICATIONS = 4,

  LIGHT_INDEX_ATTENTION = 5,

  LIGHT_INDEX_BLUETOOTH = 6,

  LIGHT_INDEX_WIFI = 7,

  LIGHT_COUNT

  };

     

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++ 验证微软数字签名 下一篇C++检查内存泄露

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目