Loading jni/com_android_bluetooth_btservice_AdapterService.cpp +21 −3 Original line number Diff line number Diff line Loading @@ -1115,7 +1115,8 @@ static int readEnergyInfo() return result; } static void dumpNative(JNIEnv *env, jobject obj, jobject fdObj) static void dumpNative(JNIEnv *env, jobject obj, jobject fdObj, jobjectArray argArray) { ALOGV("%s()", __FUNCTION__); if (!sBluetoothInterface) return; Loading @@ -1123,7 +1124,24 @@ static void dumpNative(JNIEnv *env, jobject obj, jobject fdObj) int fd = jniGetFDFromFileDescriptor(env, fdObj); if (fd < 0) return; sBluetoothInterface->dump(fd); int numArgs = env->GetArrayLength(argArray); jstring *argObjs = new jstring[numArgs]; const char **args = new const char*[numArgs]; for (int i = 0; i < numArgs; i++) { argObjs[i] = (jstring) env->GetObjectArrayElement(argArray, i); args[i] = env->GetStringUTFChars(argObjs[i], NULL); } sBluetoothInterface->dump(fd, args); for (int i = 0; i < numArgs; i++) { env->ReleaseStringUTFChars(argObjs[i], args[i]); } delete[] args; delete[] argObjs; } static jboolean factoryResetNative(JNIEnv *env, jobject obj) { Loading Loading @@ -1160,7 +1178,7 @@ static JNINativeMethod sMethods[] = { {"configHciSnoopLogNative", "(Z)Z", (void*) configHciSnoopLogNative}, {"alarmFiredNative", "()V", (void *) alarmFiredNative}, {"readEnergyInfo", "()I", (void*) readEnergyInfo}, {"dumpNative", "(Ljava/io/FileDescriptor;)V", (void*) dumpNative}, {"dumpNative", "(Ljava/io/FileDescriptor;[Ljava/lang/String;)V", (void*) dumpNative}, {"factoryResetNative", "()Z", (void*)factoryResetNative} }; Loading src/com/android/bluetooth/btservice/AdapterService.java +37 −26 Original line number Diff line number Diff line Loading @@ -68,8 +68,10 @@ import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.RemoteDevices.DeviceProperties; import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; Loading Loading @@ -126,6 +128,13 @@ public class AdapterService extends Service { private static final int ADAPTER_SERVICE_TYPE=Service.START_STICKY; private static final String[] DEVICE_TYPE_NAMES = new String[] { "???", "BR/EDR", "LE", "DUAL" }; static { classInitNative(); } Loading Loading @@ -1287,12 +1296,6 @@ public class AdapterService extends Service { return service.reportActivityInfo(); } public void dump(ParcelFileDescriptor fd) { AdapterService service = getService(); if (service == null) return; service.dump(fd.getFileDescriptor()); } public void onLeServiceUp(){ AdapterService service = getService(); if (service == null) return; Loading @@ -1304,6 +1307,12 @@ public class AdapterService extends Service { if (service == null) return; service.onBrEdrDown(); } public void dump(FileDescriptor fd, String[] args) { PrintWriter writer = new PrintWriter(new FileOutputStream(fd)); AdapterService service = getService(); service.dump(fd, writer, args); } }; // ----API Methods-------- Loading Loading @@ -2063,8 +2072,24 @@ public class AdapterService extends Service { return getResources().getInteger(R.integer.config_bluetooth_operating_voltage_mv) / 1000.0; } private void dump(FileDescriptor fd) { // Collect profile information @Override protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG); writer.println("Bluetooth Status"); writer.println(" enabled: " + isEnabled()); writer.println(" state: " + getState()); writer.println(" address: " + getAddress()); writer.println(" name: " + getName() + "\n"); writer.println("Bonded devices:"); for (BluetoothDevice device : getBondedDevices()) { writer.println(" " + device.getAddress() + " [" + DEVICE_TYPE_NAMES[device.getType()] + "] " + device.getName()); } // Dump profile information StringBuilder sb = new StringBuilder(); synchronized (mProfiles) { for (ProfileService profile : mProfiles) { Loading @@ -2072,25 +2097,11 @@ public class AdapterService extends Service { } } // Dump Java based profiles first FileWriter fw = null; try { fw = new FileWriter(fd); fw.write(sb.toString()); } catch (IOException ex) { errorLog("IOException writing profile status!"); } finally { if (fw != null) { try { fw.close(); } catch (IOException ex) { debugLog("IOException closing a file after writing the profile status"); } } } writer.write(sb.toString()); writer.flush(); // Add native logs dumpNative(fd); dumpNative(fd, args); } private void debugLog(String msg) { Loading Loading @@ -2152,7 +2163,7 @@ public class AdapterService extends Service { /*package*/ native boolean factoryResetNative(); private native void alarmFiredNative(); private native void dumpNative(FileDescriptor fd); private native void dumpNative(FileDescriptor fd, String[] arguments); protected void finalize() { cleanup(); Loading Loading
jni/com_android_bluetooth_btservice_AdapterService.cpp +21 −3 Original line number Diff line number Diff line Loading @@ -1115,7 +1115,8 @@ static int readEnergyInfo() return result; } static void dumpNative(JNIEnv *env, jobject obj, jobject fdObj) static void dumpNative(JNIEnv *env, jobject obj, jobject fdObj, jobjectArray argArray) { ALOGV("%s()", __FUNCTION__); if (!sBluetoothInterface) return; Loading @@ -1123,7 +1124,24 @@ static void dumpNative(JNIEnv *env, jobject obj, jobject fdObj) int fd = jniGetFDFromFileDescriptor(env, fdObj); if (fd < 0) return; sBluetoothInterface->dump(fd); int numArgs = env->GetArrayLength(argArray); jstring *argObjs = new jstring[numArgs]; const char **args = new const char*[numArgs]; for (int i = 0; i < numArgs; i++) { argObjs[i] = (jstring) env->GetObjectArrayElement(argArray, i); args[i] = env->GetStringUTFChars(argObjs[i], NULL); } sBluetoothInterface->dump(fd, args); for (int i = 0; i < numArgs; i++) { env->ReleaseStringUTFChars(argObjs[i], args[i]); } delete[] args; delete[] argObjs; } static jboolean factoryResetNative(JNIEnv *env, jobject obj) { Loading Loading @@ -1160,7 +1178,7 @@ static JNINativeMethod sMethods[] = { {"configHciSnoopLogNative", "(Z)Z", (void*) configHciSnoopLogNative}, {"alarmFiredNative", "()V", (void *) alarmFiredNative}, {"readEnergyInfo", "()I", (void*) readEnergyInfo}, {"dumpNative", "(Ljava/io/FileDescriptor;)V", (void*) dumpNative}, {"dumpNative", "(Ljava/io/FileDescriptor;[Ljava/lang/String;)V", (void*) dumpNative}, {"factoryResetNative", "()Z", (void*)factoryResetNative} }; Loading
src/com/android/bluetooth/btservice/AdapterService.java +37 −26 Original line number Diff line number Diff line Loading @@ -68,8 +68,10 @@ import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.RemoteDevices.DeviceProperties; import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; Loading Loading @@ -126,6 +128,13 @@ public class AdapterService extends Service { private static final int ADAPTER_SERVICE_TYPE=Service.START_STICKY; private static final String[] DEVICE_TYPE_NAMES = new String[] { "???", "BR/EDR", "LE", "DUAL" }; static { classInitNative(); } Loading Loading @@ -1287,12 +1296,6 @@ public class AdapterService extends Service { return service.reportActivityInfo(); } public void dump(ParcelFileDescriptor fd) { AdapterService service = getService(); if (service == null) return; service.dump(fd.getFileDescriptor()); } public void onLeServiceUp(){ AdapterService service = getService(); if (service == null) return; Loading @@ -1304,6 +1307,12 @@ public class AdapterService extends Service { if (service == null) return; service.onBrEdrDown(); } public void dump(FileDescriptor fd, String[] args) { PrintWriter writer = new PrintWriter(new FileOutputStream(fd)); AdapterService service = getService(); service.dump(fd, writer, args); } }; // ----API Methods-------- Loading Loading @@ -2063,8 +2072,24 @@ public class AdapterService extends Service { return getResources().getInteger(R.integer.config_bluetooth_operating_voltage_mv) / 1000.0; } private void dump(FileDescriptor fd) { // Collect profile information @Override protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG); writer.println("Bluetooth Status"); writer.println(" enabled: " + isEnabled()); writer.println(" state: " + getState()); writer.println(" address: " + getAddress()); writer.println(" name: " + getName() + "\n"); writer.println("Bonded devices:"); for (BluetoothDevice device : getBondedDevices()) { writer.println(" " + device.getAddress() + " [" + DEVICE_TYPE_NAMES[device.getType()] + "] " + device.getName()); } // Dump profile information StringBuilder sb = new StringBuilder(); synchronized (mProfiles) { for (ProfileService profile : mProfiles) { Loading @@ -2072,25 +2097,11 @@ public class AdapterService extends Service { } } // Dump Java based profiles first FileWriter fw = null; try { fw = new FileWriter(fd); fw.write(sb.toString()); } catch (IOException ex) { errorLog("IOException writing profile status!"); } finally { if (fw != null) { try { fw.close(); } catch (IOException ex) { debugLog("IOException closing a file after writing the profile status"); } } } writer.write(sb.toString()); writer.flush(); // Add native logs dumpNative(fd); dumpNative(fd, args); } private void debugLog(String msg) { Loading Loading @@ -2152,7 +2163,7 @@ public class AdapterService extends Service { /*package*/ native boolean factoryResetNative(); private native void alarmFiredNative(); private native void dumpNative(FileDescriptor fd); private native void dumpNative(FileDescriptor fd, String[] arguments); protected void finalize() { cleanup(); Loading