/* //device/libs/android_runtime/android_os_Power.cpp ** ** Copyright 2006, The Android Open Source Project ** Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. ** ** 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. */ #include "JNIHelp.h" #include "jni.h" #include "android_runtime/AndroidRuntime.h" #include #include #include namespace android { static void throw_NullPointerException(JNIEnv *env, const char* msg) { jclass clazz; clazz = env->FindClass("java/lang/NullPointerException"); env->ThrowNew(clazz, msg); } static void acquireWakeLock(JNIEnv *env, jobject clazz, jint lock, jstring idObj) { if (idObj == NULL) { throw_NullPointerException(env, "id is null"); return ; } const char *id = env->GetStringUTFChars(idObj, NULL); acquire_wake_lock(lock, id); env->ReleaseStringUTFChars(idObj, id); } static void releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj) { if (idObj == NULL) { throw_NullPointerException(env, "id is null"); return ; } const char *id = env->GetStringUTFChars(idObj, NULL); release_wake_lock(id); env->ReleaseStringUTFChars(idObj, id); } static void acquireCpuWakeLock(JNIEnv *env, jobject clazz) { acquire_cpu_max_lock(); } static void releaseCpuWakeLock(JNIEnv *env, jobject clazz) { release_cpu_max_lock(); } static int setLastUserActivityTimeout(JNIEnv *env, jobject clazz, jlong timeMS) { return set_last_user_activity_timeout(timeMS/1000); } static int setScreenState(JNIEnv *env, jobject clazz, jboolean on) { return set_screen_state(on); } static void android_os_Power_shutdown(JNIEnv *env, jobject clazz) { sync(); #ifdef HAVE_ANDROID_OS reboot(RB_POWER_OFF); #endif } static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason) { sync(); #ifdef HAVE_ANDROID_OS if (reason == NULL) { reboot(RB_AUTOBOOT); } else { const char *chars = env->GetStringUTFChars(reason, NULL); __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (char*) chars); env->ReleaseStringUTFChars(reason, chars); // In case it fails. } jniThrowIOException(env, errno); #endif } static int SetUnstableMemoryState(JNIEnv *env, jobject clazz, jboolean on) { return set_unstable_memory_state(on); } static JNINativeMethod method_table[] = { { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock }, { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock }, { "acquireCpuWakeLock", "()V", (void*)acquireCpuWakeLock }, { "releaseCpuWakeLock", "()V", (void*)releaseCpuWakeLock }, { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout }, { "setScreenState", "(Z)I", (void*)setScreenState }, { "shutdown", "()V", (void*)android_os_Power_shutdown }, { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot }, { "SetUnstableMemoryState", "(Z)I", (void*)SetUnstableMemoryState}, }; int register_android_os_Power(JNIEnv *env) { return AndroidRuntime::registerNativeMethods( env, "android/os/Power", method_table, NELEM(method_table)); } };