@@ -78,8 +78,8 @@ void onCreatePairedDeviceResult(DBusMessage *msg, void *user, void *nat);
7878void onDiscoverServicesResult (DBusMessage *msg, void *user, void *nat);
7979void onCreateDeviceResult (DBusMessage *msg, void *user, void *nat);
8080void onInputDeviceConnectionResult (DBusMessage *msg, void *user, void *nat);
81- void onConnectPanResult (DBusMessage *msg, void *user, void *n);
8281void onPanDeviceConnectionResult (DBusMessage *msg, void *user, void *nat);
82+ void onHealthDeviceConnectionResult (DBusMessage *msg, void *user, void *nat);
8383
8484
8585/* * Get native data stored in the opaque (Java code maintained) pointer mNativeData
@@ -1450,79 +1450,70 @@ static jboolean unregisterHealthApplicationNative(JNIEnv *env, jobject object,
14501450}
14511451
14521452static jboolean createChannelNative (JNIEnv *env, jobject object,
1453- jstring devicePath, jstring appPath, jstring config) {
1453+ jstring devicePath, jstring appPath, jstring config,
1454+ jint code) {
14541455 LOGV (" %s" , __FUNCTION__);
1455- jboolean result = JNI_FALSE;
14561456#ifdef HAVE_BLUETOOTH
14571457 native_data_t *nat = get_native_data (env, object);
1458+ jobject eventLoop = env->GetObjectField (object, field_mEventLoop);
1459+ struct event_loop_native_data_t *eventLoopNat =
1460+ get_EventLoop_native_data (env, eventLoop);
14581461
1459- if (nat) {
1460- DBusError err;
1461- dbus_error_init (&err);
1462-
1462+ if (nat && eventLoopNat) {
14631463 const char *c_device_path = env->GetStringUTFChars (devicePath, NULL );
14641464 const char *c_app_path = env->GetStringUTFChars (appPath, NULL );
14651465 const char *c_config = env->GetStringUTFChars (config, NULL );
1466-
1467- DBusMessage *reply = dbus_func_args (env, nat->conn ,
1468- c_device_path,
1469- DBUS_HEALTH_DEVICE_IFACE,
1470- " CreateChannel" ,
1471- DBUS_TYPE_OBJECT_PATH, &c_app_path,
1472- DBUS_TYPE_STRING, &c_config,
1473- DBUS_TYPE_INVALID);
1466+ int *data = (int *) malloc (sizeof (int ));
1467+ if (data == NULL ) return JNI_FALSE;
1468+
1469+ *data = code;
1470+ bool ret = dbus_func_args_async (env, nat->conn , -1 , onHealthDeviceConnectionResult,
1471+ data, eventLoopNat, c_device_path,
1472+ DBUS_HEALTH_DEVICE_IFACE, " CreateChannel" ,
1473+ DBUS_TYPE_OBJECT_PATH, &c_app_path,
1474+ DBUS_TYPE_STRING, &c_config,
1475+ DBUS_TYPE_INVALID);
14741476
14751477
14761478 env->ReleaseStringUTFChars (devicePath, c_device_path);
14771479 env->ReleaseStringUTFChars (appPath, c_app_path);
14781480 env->ReleaseStringUTFChars (config, c_config);
14791481
1480- if (!reply) {
1481- if (dbus_error_is_set (&err)) {
1482- LOG_AND_FREE_DBUS_ERROR (&err);
1483- }
1484- } else {
1485- result = JNI_TRUE;
1486- }
1482+ return ret ? JNI_TRUE : JNI_FALSE;
14871483 }
14881484#endif
1489- return result ;
1485+ return JNI_FALSE ;
14901486}
14911487
14921488static jboolean destroyChannelNative (JNIEnv *env, jobject object, jstring devicePath,
1493- jstring channelPath) {
1489+ jstring channelPath, jint code ) {
14941490 LOGE (" %s" , __FUNCTION__);
1495- jboolean result = JNI_FALSE;
14961491#ifdef HAVE_BLUETOOTH
14971492 native_data_t *nat = get_native_data (env, object);
1493+ jobject eventLoop = env->GetObjectField (object, field_mEventLoop);
1494+ struct event_loop_native_data_t *eventLoopNat =
1495+ get_EventLoop_native_data (env, eventLoop);
14981496
1499- if (nat) {
1500- DBusError err;
1501- dbus_error_init (&err);
1502-
1497+ if (nat && eventLoopNat) {
15031498 const char *c_device_path = env->GetStringUTFChars (devicePath, NULL );
15041499 const char *c_channel_path = env->GetStringUTFChars (channelPath, NULL );
1505-
1506- DBusMessage *reply = dbus_func_args (env, nat->conn ,
1507- c_device_path,
1508- DBUS_HEALTH_DEVICE_IFACE,
1509- " DestroyChannel" ,
1510- DBUS_TYPE_OBJECT_PATH, &c_channel_path,
1511- DBUS_TYPE_INVALID);
1500+ int *data = (int *) malloc (sizeof (int ));
1501+ if (data == NULL ) return JNI_FALSE;
1502+
1503+ *data = code;
1504+ bool ret = dbus_func_args_async (env, nat->conn , -1 , onHealthDeviceConnectionResult,
1505+ data, eventLoopNat, c_device_path,
1506+ DBUS_HEALTH_DEVICE_IFACE, " DestroyChannel" ,
1507+ DBUS_TYPE_OBJECT_PATH, &c_channel_path,
1508+ DBUS_TYPE_INVALID);
15121509
15131510 env->ReleaseStringUTFChars (devicePath, c_device_path);
15141511 env->ReleaseStringUTFChars (channelPath, c_channel_path);
15151512
1516- if (!reply) {
1517- if (dbus_error_is_set (&err)) {
1518- LOG_AND_FREE_DBUS_ERROR (&err);
1519- }
1520- } else {
1521- result = JNI_TRUE;
1522- }
1513+ return ret ? JNI_TRUE : JNI_FALSE;
15231514 }
15241515#endif
1525- return result ;
1516+ return JNI_FALSE ;
15261517}
15271518
15281519static jstring getMainChannelNative (JNIEnv *env, jobject object, jstring devicePath) {
@@ -1755,9 +1746,10 @@ static JNINativeMethod sMethods[] = {
17551746
17561747 {" unregisterHealthApplicationNative" , " (Ljava/lang/String;)Z" ,
17571748 (void *)unregisterHealthApplicationNative},
1758- {" createChannelNative" , " (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" ,
1749+ {" createChannelNative" , " (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I )Z" ,
17591750 (void *)createChannelNative},
1760- {" destroyChannelNative" , " (Ljava/lang/String;Ljava/lang/String;)Z" , (void *)destroyChannelNative},
1751+ {" destroyChannelNative" , " (Ljava/lang/String;Ljava/lang/String;I)Z" ,
1752+ (void *)destroyChannelNative},
17611753 {" getMainChannelNative" , " (Ljava/lang/String;)Ljava/lang/String;" , (void *)getMainChannelNative},
17621754 {" getChannelApplicationNative" , " (Ljava/lang/String;)Ljava/lang/String;" ,
17631755 (void *)getChannelApplicationNative},
0 commit comments