Loading services/core/java/com/android/server/VibratorService.java +2 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ public class VibratorService extends IVibratorService.Stub private SettingsObserver mSettingObserver; native static boolean vibratorExists(); native static void vibratorInit(); native static void vibratorOn(long milliseconds); native static void vibratorOff(); Loading Loading @@ -195,6 +196,7 @@ public class VibratorService extends IVibratorService.Stub } VibratorService(Context context) { vibratorInit(); // Reset the hardware to a default state, in case this is a runtime // restart instead of a fresh boot. vibratorOff(); Loading services/core/jni/com_android_server_VibratorService.cpp +43 −6 Original line number Diff line number Diff line Loading @@ -22,32 +22,69 @@ #include <utils/misc.h> #include <utils/Log.h> #include <hardware_legacy/vibrator.h> #include <hardware/vibrator.h> #include <stdio.h> namespace android { static hw_module_t *gVibraModule = NULL; static vibrator_device_t *gVibraDevice = NULL; static void vibratorInit(JNIEnv /* env */, jobject /* clazz */) { if (gVibraModule != NULL) { return; } int err = hw_get_module(VIBRATOR_HARDWARE_MODULE_ID, (hw_module_t const**)&gVibraModule); if (err) { ALOGE("Couldn't load %s module (%s)", VIBRATOR_HARDWARE_MODULE_ID, strerror(-err)); } else { if (gVibraModule) { vibrator_open(gVibraModule, &gVibraDevice); } } } static jboolean vibratorExists(JNIEnv* /* env */, jobject /* clazz */) { return vibrator_exists() > 0 ? JNI_TRUE : JNI_FALSE; if (gVibraModule && gVibraDevice) { return JNI_TRUE; } else { return JNI_FALSE; } } static void vibratorOn(JNIEnv* /* env */, jobject /* clazz */, jlong timeout_ms) { // ALOGI("vibratorOn\n"); vibrator_on(timeout_ms); if (gVibraDevice) { int err = gVibraDevice->vibrator_on(gVibraDevice, timeout_ms); if (err != 0) { ALOGE("The hw module failed in vibrator_on: %s", strerror(-err)); } } else { ALOGW("Tried to vibrate but there is no vibrator device."); } } static void vibratorOff(JNIEnv* /* env */, jobject /* clazz */) { // ALOGI("vibratorOff\n"); vibrator_off(); if (gVibraDevice) { int err = gVibraDevice->vibrator_off(gVibraDevice); if (err != 0) { ALOGE("The hw module failed in vibrator_off(): %s", strerror(-err)); } } else { ALOGW("Tried to stop vibrating but there is no vibrator device."); } } static const JNINativeMethod method_table[] = { { "vibratorExists", "()Z", (void*)vibratorExists }, { "vibratorInit", "()V", (void*)vibratorInit }, { "vibratorOn", "(J)V", (void*)vibratorOn }, { "vibratorOff", "()V", (void*)vibratorOff } }; Loading Loading
services/core/java/com/android/server/VibratorService.java +2 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ public class VibratorService extends IVibratorService.Stub private SettingsObserver mSettingObserver; native static boolean vibratorExists(); native static void vibratorInit(); native static void vibratorOn(long milliseconds); native static void vibratorOff(); Loading Loading @@ -195,6 +196,7 @@ public class VibratorService extends IVibratorService.Stub } VibratorService(Context context) { vibratorInit(); // Reset the hardware to a default state, in case this is a runtime // restart instead of a fresh boot. vibratorOff(); Loading
services/core/jni/com_android_server_VibratorService.cpp +43 −6 Original line number Diff line number Diff line Loading @@ -22,32 +22,69 @@ #include <utils/misc.h> #include <utils/Log.h> #include <hardware_legacy/vibrator.h> #include <hardware/vibrator.h> #include <stdio.h> namespace android { static hw_module_t *gVibraModule = NULL; static vibrator_device_t *gVibraDevice = NULL; static void vibratorInit(JNIEnv /* env */, jobject /* clazz */) { if (gVibraModule != NULL) { return; } int err = hw_get_module(VIBRATOR_HARDWARE_MODULE_ID, (hw_module_t const**)&gVibraModule); if (err) { ALOGE("Couldn't load %s module (%s)", VIBRATOR_HARDWARE_MODULE_ID, strerror(-err)); } else { if (gVibraModule) { vibrator_open(gVibraModule, &gVibraDevice); } } } static jboolean vibratorExists(JNIEnv* /* env */, jobject /* clazz */) { return vibrator_exists() > 0 ? JNI_TRUE : JNI_FALSE; if (gVibraModule && gVibraDevice) { return JNI_TRUE; } else { return JNI_FALSE; } } static void vibratorOn(JNIEnv* /* env */, jobject /* clazz */, jlong timeout_ms) { // ALOGI("vibratorOn\n"); vibrator_on(timeout_ms); if (gVibraDevice) { int err = gVibraDevice->vibrator_on(gVibraDevice, timeout_ms); if (err != 0) { ALOGE("The hw module failed in vibrator_on: %s", strerror(-err)); } } else { ALOGW("Tried to vibrate but there is no vibrator device."); } } static void vibratorOff(JNIEnv* /* env */, jobject /* clazz */) { // ALOGI("vibratorOff\n"); vibrator_off(); if (gVibraDevice) { int err = gVibraDevice->vibrator_off(gVibraDevice); if (err != 0) { ALOGE("The hw module failed in vibrator_off(): %s", strerror(-err)); } } else { ALOGW("Tried to stop vibrating but there is no vibrator device."); } } static const JNINativeMethod method_table[] = { { "vibratorExists", "()Z", (void*)vibratorExists }, { "vibratorInit", "()V", (void*)vibratorInit }, { "vibratorOn", "(J)V", (void*)vibratorOn }, { "vibratorOff", "()V", (void*)vibratorOff } }; Loading