summaryrefslogtreecommitdiffstats
path: root/core/jni/android_server_BluetoothService.cpp
diff options
context:
space:
mode:
authorJaikumar Ganesh <jaikumar@google.com>2010-07-19 16:28:27 -0700
committerJaikumar Ganesh <jaikumar@google.com>2010-07-21 10:43:02 -0700
commitde07503a382e81ba82f4cd4dee81ff2fbf3295bc (patch)
treefc3d73fe306195e9c4080901d74e635323bd3db0 /core/jni/android_server_BluetoothService.cpp
parentc3ee99d9eb7e8b4b20c2b8f1c548373e1017e0d3 (diff)
downloadframeworks_base-de07503a382e81ba82f4cd4dee81ff2fbf3295bc.zip
frameworks_base-de07503a382e81ba82f4cd4dee81ff2fbf3295bc.tar.gz
frameworks_base-de07503a382e81ba82f4cd4dee81ff2fbf3295bc.tar.bz2
Add HID to the state machine and add native call backs.
Change-Id: Ib9f3e476d4176bc04e23e7674dc54aa5a6417308
Diffstat (limited to 'core/jni/android_server_BluetoothService.cpp')
-rw-r--r--core/jni/android_server_BluetoothService.cpp35
1 files changed, 27 insertions, 8 deletions
diff --git a/core/jni/android_server_BluetoothService.cpp b/core/jni/android_server_BluetoothService.cpp
index a52a74c..69a8003 100644
--- a/core/jni/android_server_BluetoothService.cpp
+++ b/core/jni/android_server_BluetoothService.cpp
@@ -70,6 +70,7 @@ extern DBusHandlerResult agent_event_filter(DBusConnection *conn,
void onCreatePairedDeviceResult(DBusMessage *msg, void *user, void *nat);
void onDiscoverServicesResult(DBusMessage *msg, void *user, void *nat);
void onCreateDeviceResult(DBusMessage *msg, void *user, void *nat);
+void onInputDeviceConnectionResult(DBusMessage *msg, void *user, void *nat);
/** Get native data stored in the opaque (Java code maintained) pointer mNativeData
@@ -887,12 +888,21 @@ static jboolean connectInputDeviceNative(JNIEnv *env, jobject object, jstring pa
LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
native_data_t *nat = get_native_data(env, object);
- if (nat) {
+ jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
+ struct event_loop_native_data_t *eventLoopNat =
+ get_EventLoop_native_data(env, eventLoop);
+
+ if (nat && eventLoopNat) {
const char *c_path = env->GetStringUTFChars(path, NULL);
- bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,
- c_path, DBUS_INPUT_IFACE, "Connect",
- DBUS_TYPE_INVALID);
+ int len = env->GetStringLength(path) + 1;
+ char *context_path = (char *)calloc(len, sizeof(char));
+ strlcpy(context_path, c_path, len); // for callback
+
+ bool ret = dbus_func_args_async(env, nat->conn, -1, onInputDeviceConnectionResult,
+ context_path, eventLoopNat, c_path, DBUS_INPUT_IFACE,
+ "Connect",
+ DBUS_TYPE_INVALID);
env->ReleaseStringUTFChars(path, c_path);
return ret ? JNI_TRUE : JNI_FALSE;
@@ -906,12 +916,21 @@ static jboolean disconnectInputDeviceNative(JNIEnv *env, jobject object,
LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
native_data_t *nat = get_native_data(env, object);
- if (nat) {
+ jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
+ struct event_loop_native_data_t *eventLoopNat =
+ get_EventLoop_native_data(env, eventLoop);
+
+ if (nat && eventLoopNat) {
const char *c_path = env->GetStringUTFChars(path, NULL);
- bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,
- c_path, DBUS_INPUT_IFACE, "Disconnect",
- DBUS_TYPE_INVALID);
+ int len = env->GetStringLength(path) + 1;
+ char *context_path = (char *)calloc(len, sizeof(char));
+ strlcpy(context_path, c_path, len); // for callback
+
+ bool ret = dbus_func_args_async(env, nat->conn, -1, onInputDeviceConnectionResult,
+ context_path, eventLoopNat, c_path, DBUS_INPUT_IFACE,
+ "Disconnect",
+ DBUS_TYPE_INVALID);
env->ReleaseStringUTFChars(path, c_path);
return ret ? JNI_TRUE : JNI_FALSE;