diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2011-09-07 14:16:52 -0700 |
---|---|---|
committer | Jaikumar Ganesh <jaikumar@google.com> | 2011-09-08 15:26:53 -0700 |
commit | b5d2d4526cd2c0117b7a33b1297ac683c37ac5c7 (patch) | |
tree | 389a9d4a754b77cfa3f0494446711f57d8203c3b /core/jni/android_server_BluetoothService.cpp | |
parent | 8ee53da5615ff69c7920d111f87730c9ae0a5d23 (diff) | |
download | frameworks_base-b5d2d4526cd2c0117b7a33b1297ac683c37ac5c7.zip frameworks_base-b5d2d4526cd2c0117b7a33b1297ac683c37ac5c7.tar.gz frameworks_base-b5d2d4526cd2c0117b7a33b1297ac683c37ac5c7.tar.bz2 |
Add error codes for channel disconnection / connection.
Channel connection / disconnection was handled as boolean,
doesn't capture all the values. Also make it asynchronous
instead of the dbus call being synchronous.
Change-Id: If30177b9f93b7c83f162fbbc1233edf3e46dbfea
Diffstat (limited to 'core/jni/android_server_BluetoothService.cpp')
-rw-r--r-- | core/jni/android_server_BluetoothService.cpp | 84 |
1 files changed, 38 insertions, 46 deletions
diff --git a/core/jni/android_server_BluetoothService.cpp b/core/jni/android_server_BluetoothService.cpp index 292047b..a49c918 100644 --- a/core/jni/android_server_BluetoothService.cpp +++ b/core/jni/android_server_BluetoothService.cpp @@ -78,8 +78,8 @@ 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); -void onConnectPanResult(DBusMessage *msg, void *user, void *n); void onPanDeviceConnectionResult(DBusMessage *msg, void *user, void *nat); +void onHealthDeviceConnectionResult(DBusMessage *msg, void *user, void *nat); /** Get native data stored in the opaque (Java code maintained) pointer mNativeData @@ -1450,79 +1450,70 @@ static jboolean unregisterHealthApplicationNative(JNIEnv *env, jobject object, } static jboolean createChannelNative(JNIEnv *env, jobject object, - jstring devicePath, jstring appPath, jstring config) { + jstring devicePath, jstring appPath, jstring config, + jint code) { LOGV("%s", __FUNCTION__); - jboolean result = JNI_FALSE; #ifdef HAVE_BLUETOOTH native_data_t *nat = get_native_data(env, object); + jobject eventLoop = env->GetObjectField(object, field_mEventLoop); + struct event_loop_native_data_t *eventLoopNat = + get_EventLoop_native_data(env, eventLoop); - if (nat) { - DBusError err; - dbus_error_init(&err); - + if (nat && eventLoopNat) { const char *c_device_path = env->GetStringUTFChars(devicePath, NULL); const char *c_app_path = env->GetStringUTFChars(appPath, NULL); const char *c_config = env->GetStringUTFChars(config, NULL); - - DBusMessage *reply = dbus_func_args(env, nat->conn, - c_device_path, - DBUS_HEALTH_DEVICE_IFACE, - "CreateChannel", - DBUS_TYPE_OBJECT_PATH, &c_app_path, - DBUS_TYPE_STRING, &c_config, - DBUS_TYPE_INVALID); + int *data = (int *) malloc(sizeof(int)); + if (data == NULL) return JNI_FALSE; + + *data = code; + bool ret = dbus_func_args_async(env, nat->conn, -1, onHealthDeviceConnectionResult, + data, eventLoopNat, c_device_path, + DBUS_HEALTH_DEVICE_IFACE, "CreateChannel", + DBUS_TYPE_OBJECT_PATH, &c_app_path, + DBUS_TYPE_STRING, &c_config, + DBUS_TYPE_INVALID); env->ReleaseStringUTFChars(devicePath, c_device_path); env->ReleaseStringUTFChars(appPath, c_app_path); env->ReleaseStringUTFChars(config, c_config); - if (!reply) { - if (dbus_error_is_set(&err)) { - LOG_AND_FREE_DBUS_ERROR(&err); - } - } else { - result = JNI_TRUE; - } + return ret ? JNI_TRUE : JNI_FALSE; } #endif - return result; + return JNI_FALSE; } static jboolean destroyChannelNative(JNIEnv *env, jobject object, jstring devicePath, - jstring channelPath) { + jstring channelPath, jint code) { LOGE("%s", __FUNCTION__); - jboolean result = JNI_FALSE; #ifdef HAVE_BLUETOOTH native_data_t *nat = get_native_data(env, object); + jobject eventLoop = env->GetObjectField(object, field_mEventLoop); + struct event_loop_native_data_t *eventLoopNat = + get_EventLoop_native_data(env, eventLoop); - if (nat) { - DBusError err; - dbus_error_init(&err); - + if (nat && eventLoopNat) { const char *c_device_path = env->GetStringUTFChars(devicePath, NULL); const char *c_channel_path = env->GetStringUTFChars(channelPath, NULL); - - DBusMessage *reply = dbus_func_args(env, nat->conn, - c_device_path, - DBUS_HEALTH_DEVICE_IFACE, - "DestroyChannel", - DBUS_TYPE_OBJECT_PATH, &c_channel_path, - DBUS_TYPE_INVALID); + int *data = (int *) malloc(sizeof(int)); + if (data == NULL) return JNI_FALSE; + + *data = code; + bool ret = dbus_func_args_async(env, nat->conn, -1, onHealthDeviceConnectionResult, + data, eventLoopNat, c_device_path, + DBUS_HEALTH_DEVICE_IFACE, "DestroyChannel", + DBUS_TYPE_OBJECT_PATH, &c_channel_path, + DBUS_TYPE_INVALID); env->ReleaseStringUTFChars(devicePath, c_device_path); env->ReleaseStringUTFChars(channelPath, c_channel_path); - if (!reply) { - if (dbus_error_is_set(&err)) { - LOG_AND_FREE_DBUS_ERROR(&err); - } - } else { - result = JNI_TRUE; - } + return ret ? JNI_TRUE : JNI_FALSE; } #endif - return result; + return JNI_FALSE; } static jstring getMainChannelNative(JNIEnv *env, jobject object, jstring devicePath) { @@ -1755,9 +1746,10 @@ static JNINativeMethod sMethods[] = { {"unregisterHealthApplicationNative", "(Ljava/lang/String;)Z", (void *)unregisterHealthApplicationNative}, - {"createChannelNative", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", + {"createChannelNative", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z", (void *)createChannelNative}, - {"destroyChannelNative", "(Ljava/lang/String;Ljava/lang/String;)Z", (void *)destroyChannelNative}, + {"destroyChannelNative", "(Ljava/lang/String;Ljava/lang/String;I)Z", + (void *)destroyChannelNative}, {"getMainChannelNative", "(Ljava/lang/String;)Ljava/lang/String;", (void *)getMainChannelNative}, {"getChannelApplicationNative", "(Ljava/lang/String;)Ljava/lang/String;", (void *)getChannelApplicationNative}, |