Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44523493 authored by Wei Wang's avatar Wei Wang
Browse files

Split manu id and manu data.

b/16407380

Change-Id: I39f6ce0ab4cccadec809f0a4f518f5d2c77a90b7
parent 8679ce4a
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -234,6 +234,14 @@ public final class ScanFilter implements Parcelable {
        return mServiceDataMask;
    }

    /**
     * @hide
     */
    @Nullable
    public ParcelUuid getServiceDataUuid() {
        return mServiceDataUuid;
    }

    /**
     * Returns the manufacturer id. -1 if the manufacturer filter is not set.
     */
@@ -287,16 +295,22 @@ public final class ScanFilter implements Parcelable {
        }

        // Service data match
        if (mServiceData != null &&
                !matchesPartialData(mServiceData, mServiceDataMask, scanRecord.getServiceData())) {
        if (mServiceData != null) {
            if (!Objects.equals(mServiceDataUuid, scanRecord.getServiceDataUuid()) ||
                    !matchesPartialData(mServiceData, mServiceDataMask,
                            scanRecord.getServiceData())) {
                return false;
            }
        }

        // Manufacturer data match.
        if (mManufacturerData != null && !matchesPartialData(mManufacturerData,
        if (mManufacturerData != null) {
            if (mManufacturerId != scanRecord.getManufacturerId() ||
                    !matchesPartialData(mManufacturerData,
                            mManufacturerDataMask, scanRecord.getManufacturerSpecificData())) {
                return false;
            }
        }
        // All filters match.
        return true;
    }
@@ -353,7 +367,8 @@ public final class ScanFilter implements Parcelable {
    public String toString() {
        return "BluetoothLeScanFilter [mDeviceName=" + mDeviceName + ", mDeviceAddress="
                + mDeviceAddress
                + ", mUuid=" + mServiceUuid + ", mUuidMask=" + mServiceUuidMask + ", mServiceData="
                + ", mUuid=" + mServiceUuid + ", mUuidMask=" + mServiceUuidMask
                + ", mServiceDataUuid=" + Objects.toString(mServiceDataUuid) + ", mServiceData="
                + Arrays.toString(mServiceData) + ", mServiceDataMask="
                + Arrays.toString(mServiceDataMask) + ", mManufacturerId=" + mManufacturerId
                + ", mManufacturerData=" + Arrays.toString(mManufacturerData)
@@ -363,7 +378,7 @@ public final class ScanFilter implements Parcelable {
    @Override
    public int hashCode() {
        return Objects.hash(mDeviceName, mDeviceAddress, mManufacturerId, mManufacturerData,
                mManufacturerDataMask, mServiceData, mServiceDataMask,
                mManufacturerDataMask, mServiceDataUuid, mServiceData, mServiceDataMask,
                mServiceUuid, mServiceUuidMask);
    }

@@ -381,6 +396,7 @@ public final class ScanFilter implements Parcelable {
                        mManufacturerId == other.mManufacturerId &&
                Objects.deepEquals(mManufacturerData, other.mManufacturerData) &&
                Objects.deepEquals(mManufacturerDataMask, other.mManufacturerDataMask) &&
                Objects.deepEquals(mServiceDataUuid, other.mServiceDataUuid) &&
                Objects.deepEquals(mServiceData, other.mServiceData) &&
                Objects.deepEquals(mServiceDataMask, other.mServiceDataMask) &&
                Objects.equals(mServiceUuid, other.mServiceUuid) &&
@@ -498,6 +514,7 @@ public final class ScanFilter implements Parcelable {
                            "size mismatch for service data and service data mask");
                }
            }
            mServiceDataUuid = serviceDataUuid;
            mServiceData = serviceData;
            mServiceDataMask = serviceDataMask;
            return this;
+7 −6
Original line number Diff line number Diff line
@@ -225,20 +225,21 @@ public final class ScanRecord {
                        txPowerLevel = scanRecord[currentPos];
                        break;
                    case DATA_TYPE_SERVICE_DATA:
                        serviceData = extractBytes(scanRecord, currentPos, dataLength);
                        // The first two bytes of the service data are service data UUID.
                        // The first two bytes of the service data are service data UUID in little
                        // endian. The rest bytes are service data.
                        int serviceUuidLength = BluetoothUuid.UUID_BYTES_16_BIT;
                        byte[] serviceDataUuidBytes = extractBytes(scanRecord, currentPos,
                                serviceUuidLength);
                        serviceDataUuid = BluetoothUuid.parseUuidFrom(serviceDataUuidBytes);
                        serviceData = extractBytes(scanRecord, currentPos + 2, dataLength - 2);
                        break;
                    case DATA_TYPE_MANUFACTURER_SPECIFIC_DATA:
                        manufacturerSpecificData = extractBytes(scanRecord, currentPos,
                                dataLength);
                        // The first two bytes of the manufacturer specific data are
                        // manufacturer ids in little endian.
                        manufacturerId = ((manufacturerSpecificData[1] & 0xFF) << 8) +
                                (manufacturerSpecificData[0] & 0xFF);
                        manufacturerId = ((scanRecord[currentPos + 1] & 0xFF) << 8) +
                                (scanRecord[currentPos] & 0xFF);
                        manufacturerSpecificData = extractBytes(scanRecord, currentPos + 2,
                                dataLength - 2);
                        break;
                    default:
                        // Just ignore, we don't handle such data type.
+2 −2
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ public final class ScanResult implements Parcelable {
            dest.writeInt(0);
        }
        if (mScanRecord != null) {
            dest.writeInt(mScanRecord.getBytes().length);
            dest.writeInt(1);
            dest.writeByteArray(mScanRecord.getBytes());
        } else {
            dest.writeInt(0);
@@ -145,7 +145,7 @@ public final class ScanResult implements Parcelable {
    @Override
    public String toString() {
        return "ScanResult{" + "mDevice=" + mDevice + ", mScanRecord="
                + mScanRecord.toString() + ", mRssi=" + mRssi + ", mTimestampNanos="
                + Objects.toString(mScanRecord) + ", mRssi=" + mRssi + ", mTimestampNanos="
                + mTimestampNanos + '}';
    }

+4 −5
Original line number Diff line number Diff line
@@ -27,8 +27,7 @@ import java.util.Arrays;
/**
 * Unit test cases for {@link ScanRecord}.
 * <p>
 * To run this test, use adb shell am instrument -e class
 * 'android.bluetooth.ScanRecordTest' -w
 * To run this test, use adb shell am instrument -e class 'android.bluetooth.ScanRecordTest' -w
 * 'com.android.bluetooth.tests/android.bluetooth.BluetoothTestRunner'
 */
public class ScanRecordTest extends TestCase {
@@ -54,13 +53,13 @@ public class ScanRecordTest extends TestCase {
        assertEquals("Ped", data.getDeviceName());
        assertEquals(-20, data.getTxPowerLevel());

        assertEquals(224, data.getManufacturerId());
        assertEquals(0x00e0, data.getManufacturerId());
        assertArrayEquals(new byte[] {
                (byte) 0xe0, 0x00, 0x02, 0x15 }, data.getManufacturerSpecificData());
                0x02, 0x15 }, data.getManufacturerSpecificData());

        assertEquals(uuid2, data.getServiceDataUuid());
        assertArrayEquals(new byte[] {
                0x0b, 0x11, 0x50, 0x64 }, data.getServiceData());
                0x50, 0x64 }, data.getServiceData());
    }

    // Assert two byte arrays are equal.