1/* //device/libs/android_runtime/android_os_Power.cpp 2** 3** Copyright 2006, The Android Open Source Project 4** 5** Licensed under the Apache License, Version 2.0 (the "License"); 6** you may not use this file except in compliance with the License. 7** You may obtain a copy of the License at 8** 9** http://www.apache.org/licenses/LICENSE-2.0 10** 11** Unless required by applicable law or agreed to in writing, software 12** distributed under the License is distributed on an "AS IS" BASIS, 13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14** See the License for the specific language governing permissions and 15** limitations under the License. 16*/ 17 18#include "JNIHelp.h" 19#include "jni.h" 20#include "android_runtime/AndroidRuntime.h" 21#include <utils/misc.h> 22#include <hardware_legacy/power.h> 23#include <sys/reboot.h> 24 25namespace android 26{ 27 28static void throw_NullPointerException(JNIEnv *env, const char* msg) 29{ 30 jclass clazz; 31 clazz = env->FindClass("java/lang/NullPointerException"); 32 env->ThrowNew(clazz, msg); 33} 34 35static void 36acquireWakeLock(JNIEnv *env, jobject clazz, jint lock, jstring idObj) 37{ 38 if (idObj == NULL) { 39 throw_NullPointerException(env, "id is null"); 40 return ; 41 } 42 43 const char *id = env->GetStringUTFChars(idObj, NULL); 44 45 acquire_wake_lock(lock, id); 46 47 env->ReleaseStringUTFChars(idObj, id); 48} 49 50static void 51releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj) 52{ 53 if (idObj == NULL) { 54 throw_NullPointerException(env, "id is null"); 55 return ; 56 } 57 58 const char *id = env->GetStringUTFChars(idObj, NULL); 59 60 release_wake_lock(id); 61 62 env->ReleaseStringUTFChars(idObj, id); 63 64} 65 66static int 67setLastUserActivityTimeout(JNIEnv *env, jobject clazz, jlong timeMS) 68{ 69 return set_last_user_activity_timeout(timeMS/1000); 70} 71 72static int 73setScreenState(JNIEnv *env, jobject clazz, jboolean on) 74{ 75 return set_screen_state(on); 76} 77 78static void android_os_Power_shutdown(JNIEnv *env, jobject clazz) 79{ 80 sync(); 81#ifdef HAVE_ANDROID_OS 82 reboot(RB_POWER_OFF); 83#endif 84} 85 86static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason) 87{ 88 sync(); 89#ifdef HAVE_ANDROID_OS 90 if (reason == NULL) { 91 reboot(RB_AUTOBOOT); 92 } else { 93 const char *chars = env->GetStringUTFChars(reason, NULL); 94 __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, 95 LINUX_REBOOT_CMD_RESTART2, (char*) chars); 96 env->ReleaseStringUTFChars(reason, chars); // In case it fails. 97 } 98 jniThrowIOException(env, errno); 99#endif 100} 101 102static JNINativeMethod method_table[] = { 103 { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock }, 104 { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock }, 105 { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout }, 106 { "setScreenState", "(Z)I", (void*)setScreenState }, 107 { "shutdown", "()V", (void*)android_os_Power_shutdown }, 108 { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot }, 109}; 110 111int register_android_os_Power(JNIEnv *env) 112{ 113 return AndroidRuntime::registerNativeMethods( 114 env, "android/os/Power", 115 method_table, NELEM(method_table)); 116} 117 118}; 119