Loading core/java/android/server/BluetoothEventLoop.java +5 −0 Original line number Diff line number Diff line Loading @@ -374,6 +374,11 @@ class BluetoothEventLoop { Intent intent = null; if (propValues[1].equals("true")) { intent = new Intent(BluetoothDevice.ACTION_ACL_CONNECTED); // Set the link timeout to 8000 slots (5 sec timeout) // for bluetooth docks. if (mBluetoothService.isBluetoothDock(address)) { mBluetoothService.setLinkTimeout(address, 8000); } } else { intent = new Intent(BluetoothDevice.ACTION_ACL_DISCONNECTED); } Loading core/java/android/server/BluetoothService.java +8 −0 Original line number Diff line number Diff line Loading @@ -1910,6 +1910,13 @@ public class BluetoothService extends IBluetooth.Stub { return path; } /*package */ void setLinkTimeout(String address, int num_slots) { String path = getObjectPathFromAddress(address); boolean result = setLinkTimeoutNative(path, num_slots); if (!result) log("Set Link Timeout to:" + num_slots + " slots failed"); } private static void log(String msg) { Log.d(TAG, msg); } Loading Loading @@ -1953,4 +1960,5 @@ public class BluetoothService extends IBluetooth.Stub { private native int addRfcommServiceRecordNative(String name, long uuidMsb, long uuidLsb, short channel); private native boolean removeServiceRecordNative(int handle); private native boolean setLinkTimeoutNative(String path, int num_slots); } core/jni/android_server_BluetoothService.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -861,6 +861,26 @@ static jboolean removeServiceRecordNative(JNIEnv *env, jobject object, jint hand return JNI_FALSE; } static jboolean setLinkTimeoutNative(JNIEnv *env, jobject object, jstring object_path, jint num_slots) { LOGV(__FUNCTION__); #ifdef HAVE_BLUETOOTH native_data_t *nat = get_native_data(env, object); if (nat) { const char *c_object_path = env->GetStringUTFChars(object_path, NULL); DBusMessage *reply = dbus_func_args(env, nat->conn, get_adapter_path(env, object), DBUS_ADAPTER_IFACE, "SetLinkTimeout", DBUS_TYPE_OBJECT_PATH, &c_object_path, DBUS_TYPE_UINT32, &num_slots, DBUS_TYPE_INVALID); env->ReleaseStringUTFChars(object_path, c_object_path); return reply ? JNI_TRUE : JNI_FALSE; } #endif return JNI_FALSE; } static JNINativeMethod sMethods[] = { /* name, signature, funcPtr */ {"classInitNative", "()V", (void*)classInitNative}, Loading Loading @@ -905,6 +925,7 @@ static JNINativeMethod sMethods[] = { {"discoverServicesNative", "(Ljava/lang/String;Ljava/lang/String;)Z", (void *)discoverServicesNative}, {"addRfcommServiceRecordNative", "(Ljava/lang/String;JJS)I", (void *)addRfcommServiceRecordNative}, {"removeServiceRecordNative", "(I)Z", (void *)removeServiceRecordNative}, {"setLinkTimeoutNative", "(Ljava/lang/String;I)Z", (void *)setLinkTimeoutNative}, }; int register_android_server_BluetoothService(JNIEnv *env) { Loading Loading
core/java/android/server/BluetoothEventLoop.java +5 −0 Original line number Diff line number Diff line Loading @@ -374,6 +374,11 @@ class BluetoothEventLoop { Intent intent = null; if (propValues[1].equals("true")) { intent = new Intent(BluetoothDevice.ACTION_ACL_CONNECTED); // Set the link timeout to 8000 slots (5 sec timeout) // for bluetooth docks. if (mBluetoothService.isBluetoothDock(address)) { mBluetoothService.setLinkTimeout(address, 8000); } } else { intent = new Intent(BluetoothDevice.ACTION_ACL_DISCONNECTED); } Loading
core/java/android/server/BluetoothService.java +8 −0 Original line number Diff line number Diff line Loading @@ -1910,6 +1910,13 @@ public class BluetoothService extends IBluetooth.Stub { return path; } /*package */ void setLinkTimeout(String address, int num_slots) { String path = getObjectPathFromAddress(address); boolean result = setLinkTimeoutNative(path, num_slots); if (!result) log("Set Link Timeout to:" + num_slots + " slots failed"); } private static void log(String msg) { Log.d(TAG, msg); } Loading Loading @@ -1953,4 +1960,5 @@ public class BluetoothService extends IBluetooth.Stub { private native int addRfcommServiceRecordNative(String name, long uuidMsb, long uuidLsb, short channel); private native boolean removeServiceRecordNative(int handle); private native boolean setLinkTimeoutNative(String path, int num_slots); }
core/jni/android_server_BluetoothService.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -861,6 +861,26 @@ static jboolean removeServiceRecordNative(JNIEnv *env, jobject object, jint hand return JNI_FALSE; } static jboolean setLinkTimeoutNative(JNIEnv *env, jobject object, jstring object_path, jint num_slots) { LOGV(__FUNCTION__); #ifdef HAVE_BLUETOOTH native_data_t *nat = get_native_data(env, object); if (nat) { const char *c_object_path = env->GetStringUTFChars(object_path, NULL); DBusMessage *reply = dbus_func_args(env, nat->conn, get_adapter_path(env, object), DBUS_ADAPTER_IFACE, "SetLinkTimeout", DBUS_TYPE_OBJECT_PATH, &c_object_path, DBUS_TYPE_UINT32, &num_slots, DBUS_TYPE_INVALID); env->ReleaseStringUTFChars(object_path, c_object_path); return reply ? JNI_TRUE : JNI_FALSE; } #endif return JNI_FALSE; } static JNINativeMethod sMethods[] = { /* name, signature, funcPtr */ {"classInitNative", "()V", (void*)classInitNative}, Loading Loading @@ -905,6 +925,7 @@ static JNINativeMethod sMethods[] = { {"discoverServicesNative", "(Ljava/lang/String;Ljava/lang/String;)Z", (void *)discoverServicesNative}, {"addRfcommServiceRecordNative", "(Ljava/lang/String;JJS)I", (void *)addRfcommServiceRecordNative}, {"removeServiceRecordNative", "(I)Z", (void *)removeServiceRecordNative}, {"setLinkTimeoutNative", "(Ljava/lang/String;I)Z", (void *)setLinkTimeoutNative}, }; int register_android_server_BluetoothService(JNIEnv *env) { Loading