
project external/bluez/
diff --git a/utils/tools/hciattach_ti.c b/utils/tools/hciattach_ti.c
index 7c1d58f..4c7e691 100755
--- a/utils/tools/hciattach_ti.c
+++ b/utils/tools/hciattach_ti.c
@@ -42,7 +42,8 @@
 #include <bluetooth/bluetooth.h>
 #include <bluetooth/hci.h>
 #include <bluetooth/hci_lib.h>
-
+//added HCIATTACH_DEBUG by pavan
+#define HCIATTACH_DEBUG 
 #ifdef HCIATTACH_DEBUG
 #define DPRINTF(x...)	printf(x)
 #else
@@ -395,7 +396,10 @@ static int brf_do_script(int fd, struct termios *ti, const char *bts_file)
 		if (!brf_script_file) {
 			fprintf(stderr, "Warning: cannot find BTS file: %s\n",
 					bts_file);
-			return 0;
+//pavan changed
+//			return 0;
+			printf("changed here...returning -1\n");
+			return -1;
 		}
 
 		fprintf( stderr, "Loaded BTS script version %u\n", vers );
@@ -409,6 +413,8 @@ static int brf_do_script(int fd, struct termios *ti, const char *bts_file)
 	}
 	else {
 		DPRINTF("Sending script to bluetooth socket\n");
+		DPRINTF("Sleeping for 7 seconds...\n");
+		sleep(7);
 	}
 
 	/* execute current action and continue to parse brf script file */

project frameworks/base/
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java
index 4f63f98..254db5e 100644
--- a/core/java/android/server/BluetoothEventLoop.java
+++ b/core/java/android/server/BluetoothEventLoop.java
@@ -27,7 +27,7 @@ import android.os.RemoteException;
 import android.util.Log;
 
 import java.util.HashMap;
-
+import android.os.SystemService;
 /**
  * TODO: Move this to
  * java/services/com/android/server/BluetoothEventLoop.java
@@ -304,6 +304,16 @@ class BluetoothEventLoop {
         }
     }
 
+
+
+    private void onBluetoothUnexpectedOff() {
+	    Log.e(TAG, "****************onBluetoothUnexpectedOff called***********\n");
+//        SystemService.start("hciattach");
+        SystemService.stop("hcid");
+    }
+
+
+
     private static void log(String msg) {
         Log.d(TAG, msg);
     }
diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index 3468265..53b8f7d 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -63,6 +63,7 @@ static jmethodID method_onPasskeyAgentCancel;
 
 typedef event_loop_native_data_t native_data_t;
 
+static jmethodID method_onBluetoothUnexpectedOff;
 // Only valid during waitForAndDispatchEventNative()
 native_data_t *event_loop_nat;
 
@@ -99,6 +100,7 @@ static void classInitNative(JNIEnv* env, jclass clazz) {
     method_onGetRemoteServiceChannelResult = env->GetMethodID(clazz, "onGetRemoteServiceChannelResult", "(Ljava/lang/String;I)V");
 
     field_mNativeData = env->GetFieldID(clazz, "mNativeData", "I");
+    method_onBluetoothUnexpectedOff = env->GetMethodID(clazz, "onBluetoothUnexpectedOff", "()V");
 #endif
 }
 
@@ -162,6 +164,7 @@ static jboolean setUpEventLoopNative(JNIEnv *env, jobject object) {
             return JNI_FALSE;
         }
 
+	LOGE("***************************added filter *********************\n");
         // Set which messages will be processed by this dbus connection
         dbus_bus_add_match(nat->conn,
                 "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Adapter'",
@@ -170,6 +173,17 @@ static jboolean setUpEventLoopNative(JNIEnv *env, jobject object) {
             LOG_AND_FREE_DBUS_ERROR(&err);
             return JNI_FALSE;
         }
+	LOGE("*********************adding match for org.bluez.Manager*********\n");
+//changed pavan added code
+        dbus_bus_add_match(nat->conn,
+			"type='signal',interface='org.bluez.Manager'",&err);
+        if (dbus_error_is_set(&err)) 
+	{
+		LOG_AND_FREE_DBUS_ERROR(&err);
+		return JNI_FALSE;
+	}
+	LOGE("*********************added match for org.bluez.Manager*********\n");
+//end of added code pavan
         dbus_bus_add_match(nat->conn,
                 "type='signal',interface='org.bluez.audio.Manager'",
                 &err);
@@ -513,6 +527,18 @@ static DBusHandlerResult event_filter(DBusConnection *conn, DBusMessage *msg,
         } else LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, msg);
         return DBUS_HANDLER_RESULT_HANDLED;
     }
+    LOGE("***************Some Signal Recieved*****************\n");
+    if (dbus_message_is_signal(msg,"org.bluez.Manager","AdapterRemoved"))
+    {
+	    LOGE("*********Adapter Removed***********\n");
+        char *c_name;
+        if (dbus_message_get_args(msg, &err,DBUS_TYPE_STRING, &c_name,DBUS_TYPE_INVALID)) 
+	{
+		LOGE("***************removed path is <%s>***********\n", c_name);
+		env->CallVoidMethod(nat->me, method_onBluetoothUnexpectedOff);
+	}
+
+    }
 
     return a2dp_event_filter(msg, env);
 }

project kernel/
diff --git a/drivers/bluetooth/hci_ll.c b/drivers/bluetooth/hci_ll.c
index 2d2f66e..cb4c64a 100644
--- a/drivers/bluetooth/hci_ll.c
+++ b/drivers/bluetooth/hci_ll.c
@@ -461,6 +461,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count)
 		case HCILL_GO_TO_SLEEP_IND:
 			BT_DBG("HCILL_GO_TO_SLEEP_IND packet");
 			ll_device_want_to_sleep(hu);
+			printk("\nHCILL_GO_TO_SLEEP_IND\n");
 			ptr++; count--;
 			continue;
 
@@ -473,6 +474,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count)
 		case HCILL_WAKE_UP_IND:
 			BT_DBG("HCILL_WAKE_UP_IND packet");
 			ll_device_want_to_wakeup(hu);
+			printk("\nHCILL_WAKE_UP_IND\n");
 			ptr++; count--;
 			continue;
 
