diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2010-08-31 19:55:10 -0700 |
---|---|---|
committer | Jaikumar Ganesh <jaikumar@google.com> | 2010-09-02 11:36:58 -0700 |
commit | c1520ecb41600cd364f03c4c100f927a98924e6a (patch) | |
tree | 3ccdb7ad1e1c4ab0fc1b5545b745df26298ef4e6 /core | |
parent | 1c2717a0f4a23b7845a0f26fe760ce99ec96acb8 (diff) | |
download | frameworks_base-c1520ecb41600cd364f03c4c100f927a98924e6a.zip frameworks_base-c1520ecb41600cd364f03c4c100f927a98924e6a.tar.gz frameworks_base-c1520ecb41600cd364f03c4c100f927a98924e6a.tar.bz2 |
Use the new signals sent by Bluez for PAN.
Change-Id: I092b5d6b23bacb37a5bc2ca6d8c47bc6a99467ec
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/server/BluetoothEventLoop.java | 10 | ||||
-rw-r--r-- | core/jni/android_server_BluetoothEventLoop.cpp | 69 |
2 files changed, 76 insertions, 3 deletions
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java index 3861ef5..9436fec 100644 --- a/core/java/android/server/BluetoothEventLoop.java +++ b/core/java/android/server/BluetoothEventLoop.java @@ -760,6 +760,16 @@ class BluetoothEventLoop { } } + private void onNetworkDeviceDisconnected(String address) { + BluetoothDevice device = mAdapter.getRemoteDevice(address); + mBluetoothService.handlePanDeviceStateChange(device, BluetoothPan.STATE_DISCONNECTED); + } + + private void onNetworkDeviceConnected(String address, int destUuid) { + BluetoothDevice device = mAdapter.getRemoteDevice(address); + mBluetoothService.handlePanDeviceStateChange(device, BluetoothPan.STATE_CONNECTED); + } + private void onRestartRequired() { if (mBluetoothService.isEnabled()) { Log.e(TAG, "*** A serious error occured (did bluetoothd crash?) - " + diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp index 6ef154e..1307ec3 100644 --- a/core/jni/android_server_BluetoothEventLoop.cpp +++ b/core/jni/android_server_BluetoothEventLoop.cpp @@ -50,6 +50,8 @@ static jmethodID method_onDeviceDisappeared; static jmethodID method_onDeviceCreated; static jmethodID method_onDeviceRemoved; static jmethodID method_onDeviceDisconnectRequested; +static jmethodID method_onNetworkDeviceDisconnected; +static jmethodID method_onNetworkDeviceConnected; static jmethodID method_onCreatePairedDeviceResult; static jmethodID method_onCreateDeviceResult; @@ -100,6 +102,10 @@ static void classInitNative(JNIEnv* env, jclass clazz) { method_onDeviceRemoved = env->GetMethodID(clazz, "onDeviceRemoved", "(Ljava/lang/String;)V"); method_onDeviceDisconnectRequested = env->GetMethodID(clazz, "onDeviceDisconnectRequested", "(Ljava/lang/String;)V"); + method_onNetworkDeviceConnected = env->GetMethodID(clazz, "onNetworkDeviceConnected", + "(Ljava/lang/String;I)V"); + method_onNetworkDeviceDisconnected = env->GetMethodID(clazz, "onNetworkDeviceDisconnected", + "(Ljava/lang/String;)V"); method_onCreatePairedDeviceResult = env->GetMethodID(clazz, "onCreatePairedDeviceResult", "(Ljava/lang/String;I)V"); @@ -253,6 +259,13 @@ static jboolean setUpEventLoop(native_data_t *nat) { return JNI_FALSE; } dbus_bus_add_match(nat->conn, + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".NetworkServer'", + &err); + if (dbus_error_is_set(&err)) { + LOG_AND_FREE_DBUS_ERROR(&err); + return JNI_FALSE; + } + dbus_bus_add_match(nat->conn, "type='signal',interface='org.bluez.AudioSink'", &err); if (dbus_error_is_set(&err)) { @@ -409,13 +422,31 @@ static void tearDownEventLoop(native_data_t *nat) { dbus_connection_unregister_object_path(nat->conn, agent_path); dbus_bus_remove_match(nat->conn, - "type='signal',interface='org.bluez.AudioSink'", + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".AudioSink'", + &err); + if (dbus_error_is_set(&err)) { + LOG_AND_FREE_DBUS_ERROR(&err); + } + dbus_bus_remove_match(nat->conn, + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Device'", &err); if (dbus_error_is_set(&err)) { LOG_AND_FREE_DBUS_ERROR(&err); } dbus_bus_remove_match(nat->conn, - "type='signal',interface='org.bluez.audio.Device'", + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Input'", + &err); + if (dbus_error_is_set(&err)) { + LOG_AND_FREE_DBUS_ERROR(&err); + } + dbus_bus_remove_match(nat->conn, + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Network'", + &err); + if (dbus_error_is_set(&err)) { + LOG_AND_FREE_DBUS_ERROR(&err); + } + dbus_bus_remove_match(nat->conn, + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".NetworkServer'", &err); if (dbus_error_is_set(&err)) { LOG_AND_FREE_DBUS_ERROR(&err); @@ -912,7 +943,39 @@ static DBusHandlerResult event_filter(DBusConnection *conn, DBusMessage *msg, LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, msg); } goto success; - } + } else if (dbus_message_is_signal(msg, + "org.bluez.NetworkServer", + "DeviceDisconnected")) { + char *c_address; + if (dbus_message_get_args(msg, &err, + DBUS_TYPE_STRING, &c_address, + DBUS_TYPE_INVALID)) { + env->CallVoidMethod(nat->me, + method_onNetworkDeviceDisconnected, + env->NewStringUTF(c_address)); + } else { + LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, msg); + } + goto success; + } else if (dbus_message_is_signal(msg, + "org.bluez.NetworkServer", + "DeviceConnected")) { + char *c_address; + uint16_t uuid; + + if (dbus_message_get_args(msg, &err, + DBUS_TYPE_STRING, &c_address, + DBUS_TYPE_UINT16, &uuid, + DBUS_TYPE_INVALID)) { + env->CallVoidMethod(nat->me, + method_onNetworkDeviceConnected, + env->NewStringUTF(c_address), + uuid); + } else { + LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, msg); + } + goto success; + } ret = a2dp_event_filter(msg, env); env->PopLocalFrame(NULL); |