summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaikumar Ganesh <jaikumar@google.com>2010-08-31 19:55:10 -0700
committerJaikumar Ganesh <jaikumar@google.com>2010-09-02 11:36:58 -0700
commitc1520ecb41600cd364f03c4c100f927a98924e6a (patch)
tree3ccdb7ad1e1c4ab0fc1b5545b745df26298ef4e6
parent1c2717a0f4a23b7845a0f26fe760ce99ec96acb8 (diff)
downloadframeworks_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
-rw-r--r--core/java/android/server/BluetoothEventLoop.java10
-rw-r--r--core/jni/android_server_BluetoothEventLoop.cpp69
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);