Loading android/app/src/com/android/bluetooth/gatt/GattService.java +0 −52 Original line number Diff line number Diff line Loading @@ -1028,27 +1028,10 @@ public class GattService extends ProfileService { + Integer.toHexString(advertisingSid) + ", txPower=" + txPower + ", rssi=" + rssi + ", periodicAdvInt=0x" + Integer.toHexString(periodicAdvInt)); } List<UUID> remoteUuids = parseUuids(advData); byte[] legacyAdvData = Arrays.copyOfRange(advData, 0, 62); for (ScanClient client : mScanManager.getRegularScanQueue()) { if (client.uuids.length > 0) { int matches = 0; for (UUID search : client.uuids) { for (UUID remote : remoteUuids) { if (remote.equals(search)) { ++matches; break; // Only count 1st match in case of duplicates } } } if (matches < client.uuids.length) { continue; } } ScannerMap.App app = mScannerMap.getById(client.scannerId); if (app == null) { continue; Loading Loading @@ -3279,41 +3262,6 @@ public class GattService extends ProfileService { } } @VisibleForTesting List<UUID> parseUuids(byte[] advData) { List<UUID> uuids = new ArrayList<UUID>(); int offset = 0; while (offset < (advData.length - 2)) { int len = Byte.toUnsignedInt(advData[offset++]); if (len == 0) { break; } int type = advData[offset++]; switch (type) { case 0x02: // Partial list of 16-bit UUIDs case 0x03: // Complete list of 16-bit UUIDs while (len > 1) { int uuid16 = advData[offset++]; uuid16 += (advData[offset++] << 8); len -= 2; String uuid_prefix = Integer.toHexString(uuid16); // Pad zeroes to make uuid_prefix length exactly 8. uuids.add(UUID.fromString(UUID_ZERO_PAD.substring(uuid_prefix.length()) + uuid_prefix + UUID_SUFFIX)); } break; default: offset += (len - 1); break; } } return uuids; } void dumpRegisterId(StringBuilder sb) { sb.append(" Scanner:\n"); for (Integer appId : mScannerMap.getAllAppsIds()) { Loading android/app/src/com/android/bluetooth/gatt/ScanClient.java +2 −14 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import android.os.UserHandle; import java.util.List; import java.util.Objects; import java.util.UUID; /** * Helper class identifying a client that has requested LE scan results. Loading @@ -33,7 +32,6 @@ import java.util.UUID; */ /* package */class ScanClient { public int scannerId; public UUID[] uuids; public ScanSettings settings; public ScanSettings passiveSettings; public int appUid; Loading @@ -56,26 +54,16 @@ import java.util.UUID; new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); ScanClient(int scannerId) { this(scannerId, new UUID[0], DEFAULT_SCAN_SETTINGS, null, null); } ScanClient(int scannerId, UUID[] uuids) { this(scannerId, uuids, DEFAULT_SCAN_SETTINGS, null, null); this(scannerId, DEFAULT_SCAN_SETTINGS, null, null); } ScanClient(int scannerId, ScanSettings settings, List<ScanFilter> filters) { this(scannerId, new UUID[0], settings, filters, null); this(scannerId, settings, filters, null); } ScanClient(int scannerId, ScanSettings settings, List<ScanFilter> filters, List<List<ResultStorageDescriptor>> storages) { this(scannerId, new UUID[0], settings, filters, storages); } private ScanClient(int scannerId, UUID[] uuids, ScanSettings settings, List<ScanFilter> filters, List<List<ResultStorageDescriptor>> storages) { this.scannerId = scannerId; this.uuids = uuids; this.settings = settings; this.passiveSettings = null; this.filters = filters; Loading android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceTest.java +0 −23 Original line number Diff line number Diff line Loading @@ -23,9 +23,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.List; import java.util.UUID; /** * Test cases for {@link GattService}. */ Loading Loading @@ -92,24 +89,4 @@ public class GattServiceTest { }); Assert.assertEquals(99700000000L, timestampNanos); } @Test public void testParseUuids() { // Experimentally observed raw advertiser data. // It contains a partial list of service class UUIDs. String rawHexAdvData = "0201061BFF570102FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E060719405" + "D310094D6920536D6172742042616E6420350302E0FE"; String expected_uuid_str = "fffffde0-0000-1000-8000-00805f9b34fb"; // Convert to byte array and test. int len = rawHexAdvData.length(); byte[] advData = new byte[len / 2]; for (int i = 0; i < len; i += 2) { advData[i / 2] = (byte) ((Character.digit(rawHexAdvData.charAt(i), 16) << 4) + Character.digit(rawHexAdvData.charAt(i + 1), 16)); } List<UUID> uuids = mService.parseUuids(advData); Assert.assertEquals(1, uuids.size()); Assert.assertEquals(expected_uuid_str, uuids.get(0).toString()); } } Loading
android/app/src/com/android/bluetooth/gatt/GattService.java +0 −52 Original line number Diff line number Diff line Loading @@ -1028,27 +1028,10 @@ public class GattService extends ProfileService { + Integer.toHexString(advertisingSid) + ", txPower=" + txPower + ", rssi=" + rssi + ", periodicAdvInt=0x" + Integer.toHexString(periodicAdvInt)); } List<UUID> remoteUuids = parseUuids(advData); byte[] legacyAdvData = Arrays.copyOfRange(advData, 0, 62); for (ScanClient client : mScanManager.getRegularScanQueue()) { if (client.uuids.length > 0) { int matches = 0; for (UUID search : client.uuids) { for (UUID remote : remoteUuids) { if (remote.equals(search)) { ++matches; break; // Only count 1st match in case of duplicates } } } if (matches < client.uuids.length) { continue; } } ScannerMap.App app = mScannerMap.getById(client.scannerId); if (app == null) { continue; Loading Loading @@ -3279,41 +3262,6 @@ public class GattService extends ProfileService { } } @VisibleForTesting List<UUID> parseUuids(byte[] advData) { List<UUID> uuids = new ArrayList<UUID>(); int offset = 0; while (offset < (advData.length - 2)) { int len = Byte.toUnsignedInt(advData[offset++]); if (len == 0) { break; } int type = advData[offset++]; switch (type) { case 0x02: // Partial list of 16-bit UUIDs case 0x03: // Complete list of 16-bit UUIDs while (len > 1) { int uuid16 = advData[offset++]; uuid16 += (advData[offset++] << 8); len -= 2; String uuid_prefix = Integer.toHexString(uuid16); // Pad zeroes to make uuid_prefix length exactly 8. uuids.add(UUID.fromString(UUID_ZERO_PAD.substring(uuid_prefix.length()) + uuid_prefix + UUID_SUFFIX)); } break; default: offset += (len - 1); break; } } return uuids; } void dumpRegisterId(StringBuilder sb) { sb.append(" Scanner:\n"); for (Integer appId : mScannerMap.getAllAppsIds()) { Loading
android/app/src/com/android/bluetooth/gatt/ScanClient.java +2 −14 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import android.os.UserHandle; import java.util.List; import java.util.Objects; import java.util.UUID; /** * Helper class identifying a client that has requested LE scan results. Loading @@ -33,7 +32,6 @@ import java.util.UUID; */ /* package */class ScanClient { public int scannerId; public UUID[] uuids; public ScanSettings settings; public ScanSettings passiveSettings; public int appUid; Loading @@ -56,26 +54,16 @@ import java.util.UUID; new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); ScanClient(int scannerId) { this(scannerId, new UUID[0], DEFAULT_SCAN_SETTINGS, null, null); } ScanClient(int scannerId, UUID[] uuids) { this(scannerId, uuids, DEFAULT_SCAN_SETTINGS, null, null); this(scannerId, DEFAULT_SCAN_SETTINGS, null, null); } ScanClient(int scannerId, ScanSettings settings, List<ScanFilter> filters) { this(scannerId, new UUID[0], settings, filters, null); this(scannerId, settings, filters, null); } ScanClient(int scannerId, ScanSettings settings, List<ScanFilter> filters, List<List<ResultStorageDescriptor>> storages) { this(scannerId, new UUID[0], settings, filters, storages); } private ScanClient(int scannerId, UUID[] uuids, ScanSettings settings, List<ScanFilter> filters, List<List<ResultStorageDescriptor>> storages) { this.scannerId = scannerId; this.uuids = uuids; this.settings = settings; this.passiveSettings = null; this.filters = filters; Loading
android/app/tests/unit/src/com/android/bluetooth/gatt/GattServiceTest.java +0 −23 Original line number Diff line number Diff line Loading @@ -23,9 +23,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.List; import java.util.UUID; /** * Test cases for {@link GattService}. */ Loading Loading @@ -92,24 +89,4 @@ public class GattServiceTest { }); Assert.assertEquals(99700000000L, timestampNanos); } @Test public void testParseUuids() { // Experimentally observed raw advertiser data. // It contains a partial list of service class UUIDs. String rawHexAdvData = "0201061BFF570102FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E060719405" + "D310094D6920536D6172742042616E6420350302E0FE"; String expected_uuid_str = "fffffde0-0000-1000-8000-00805f9b34fb"; // Convert to byte array and test. int len = rawHexAdvData.length(); byte[] advData = new byte[len / 2]; for (int i = 0; i < len; i += 2) { advData[i / 2] = (byte) ((Character.digit(rawHexAdvData.charAt(i), 16) << 4) + Character.digit(rawHexAdvData.charAt(i + 1), 16)); } List<UUID> uuids = mService.parseUuids(advData); Assert.assertEquals(1, uuids.size()); Assert.assertEquals(expected_uuid_str, uuids.get(0).toString()); } }