diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2009-09-18 11:32:54 -0700 |
---|---|---|
committer | Jaikumar Ganesh <jaikumar@google.com> | 2009-09-19 11:29:24 -0700 |
commit | 1caa6d111eff6814760ec156b14adc29aa3aae6c (patch) | |
tree | 387141a3a427623b218b43318640185c885339f8 /core/jni/android_server_BluetoothService.cpp | |
parent | 074c11c1649a097ba1beae719069f8d4a2dd43e3 (diff) | |
download | frameworks_base-1caa6d111eff6814760ec156b14adc29aa3aae6c.zip frameworks_base-1caa6d111eff6814760ec156b14adc29aa3aae6c.tar.gz frameworks_base-1caa6d111eff6814760ec156b14adc29aa3aae6c.tar.bz2 |
Add new API for fetching UUIDs using SDP.
Add new API which clients can use to force an SDP query.
The result is broadcast using an intent having the UUIDs.
The intent is broadcast after a timeout, in case of an error.
This timeout is greater than the page timeout.
Change-Id: I61e6db4c05b34c42f679a66987e37e2063a793b6
Diffstat (limited to 'core/jni/android_server_BluetoothService.cpp')
-rw-r--r-- | core/jni/android_server_BluetoothService.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/core/jni/android_server_BluetoothService.cpp b/core/jni/android_server_BluetoothService.cpp index 0b71acb..c432ed9 100644 --- a/core/jni/android_server_BluetoothService.cpp +++ b/core/jni/android_server_BluetoothService.cpp @@ -66,6 +66,8 @@ extern DBusHandlerResult agent_event_filter(DBusConnection *conn, DBusMessage *msg, void *data); void onCreatePairedDeviceResult(DBusMessage *msg, void *user, void *nat); +void onDiscoverServicesResult(DBusMessage *msg, void *user, void *nat); +void onCreateDeviceResult(DBusMessage *msg, void *user, void *nat); /** Get native data stored in the opaque (Java code maintained) pointer mNativeData @@ -757,6 +759,75 @@ static jboolean setDevicePropertyBooleanNative(JNIEnv *env, jobject object, #endif } + +static jboolean createDeviceNative(JNIEnv *env, jobject object, + jstring address) { + LOGV(__FUNCTION__); +#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 && eventLoopNat) { + const char *c_address = env->GetStringUTFChars(address, NULL); + LOGV("... address = %s", c_address); + char *context_address = (char *)calloc(BTADDR_SIZE, sizeof(char)); + strlcpy(context_address, c_address, BTADDR_SIZE); // for callback + + bool ret = dbus_func_args_async(env, nat->conn, -1, + onCreateDeviceResult, + context_address, + eventLoopNat, + get_adapter_path(env, object), + DBUS_ADAPTER_IFACE, + "CreateDevice", + DBUS_TYPE_STRING, &c_address, + DBUS_TYPE_INVALID); + env->ReleaseStringUTFChars(address, c_address); + return ret ? JNI_TRUE : JNI_FALSE; + } +#endif + return JNI_FALSE; +} + +static jboolean discoverServicesNative(JNIEnv *env, jobject object, + jstring path, jstring pattern) { + LOGV(__FUNCTION__); +#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 && eventLoopNat) { + const char *c_path = env->GetStringUTFChars(path, NULL); + const char *c_pattern = env->GetStringUTFChars(pattern, NULL); + int len = env->GetStringLength(path) + 1; + char *context_path = (char *)calloc(len, sizeof(char)); + strlcpy(context_path, c_path, len); // for callback + + LOGV("... Object Path = %s", c_path); + LOGV("... Pattern = %s, strlen = %d", c_pattern, strlen(c_pattern)); + + bool ret = dbus_func_args_async(env, nat->conn, -1, + onDiscoverServicesResult, + context_path, + eventLoopNat, + c_path, + DBUS_DEVICE_IFACE, + "DiscoverServices", + DBUS_TYPE_STRING, &c_pattern, + DBUS_TYPE_INVALID); + env->ReleaseStringUTFChars(path, c_path); + env->ReleaseStringUTFChars(pattern, c_pattern); + return ret ? JNI_TRUE : JNI_FALSE; + } +#endif + return JNI_FALSE; +} + + static JNINativeMethod sMethods[] = { /* name, signature, funcPtr */ {"classInitNative", "()V", (void*)classInitNative}, @@ -797,6 +868,8 @@ static JNINativeMethod sMethods[] = { (void *)cancelPairingUserInputNative}, {"setDevicePropertyBooleanNative", "(Ljava/lang/String;Ljava/lang/String;I)Z", (void *)setDevicePropertyBooleanNative}, + {"createDeviceNative", "(Ljava/lang/String;)Z", (void *)createDeviceNative}, + {"discoverServicesNative", "(Ljava/lang/String;Ljava/lang/String;)Z", (void *)discoverServicesNative}, }; int register_android_server_BluetoothService(JNIEnv *env) { |