diff options
| -rw-r--r-- | core/java/android/bluetooth/BluetoothUuid.java | 42 | 
1 files changed, 42 insertions, 0 deletions
diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java index 2ded4c8fea32..243579a31ce0 100644 --- a/core/java/android/bluetooth/BluetoothUuid.java +++ b/core/java/android/bluetooth/BluetoothUuid.java @@ -275,6 +275,48 @@ public final class BluetoothUuid {      }      /** +     * Parse UUID to bytes. The returned value is shortest representation, a 16-bit, 32-bit or 128-bit UUID, +     * Note returned value is little endian (Bluetooth). +     * +     * @param uuid uuid to parse. +     * @return shortest representation of {@code uuid} as bytes. +     * @throws IllegalArgumentException If the {@code uuid} is null. +     */ +    public static byte[] uuidToBytes(ParcelUuid uuid) { +        if (uuid == null) { +            throw new IllegalArgumentException("uuid cannot be null"); +        } + +        if (is16BitUuid(uuid)) { +            byte[] uuidBytes = new byte[UUID_BYTES_16_BIT]; +            int uuidVal = getServiceIdentifierFromParcelUuid(uuid); +            uuidBytes[0] = (byte)(uuidVal & 0xFF); +            uuidBytes[1] = (byte)((uuidVal & 0xFF00) >> 8); +            return uuidBytes; +        } + +        if (is32BitUuid(uuid)) { +            byte[] uuidBytes = new byte[UUID_BYTES_32_BIT]; +            int uuidVal = getServiceIdentifierFromParcelUuid(uuid); +            uuidBytes[0] = (byte)(uuidVal & 0xFF); +            uuidBytes[1] = (byte)((uuidVal & 0xFF00) >> 8); +            uuidBytes[2] = (byte)((uuidVal & 0xFF0000) >> 16); +            uuidBytes[3] = (byte)((uuidVal & 0xFF000000) >> 24); +            return uuidBytes; +        } + +        // Construct a 128 bit UUID. +        long msb = uuid.getUuid().getMostSignificantBits(); +        long lsb = uuid.getUuid().getLeastSignificantBits(); + +        byte[] uuidBytes = new byte[UUID_BYTES_128_BIT]; +        ByteBuffer buf = ByteBuffer.wrap(uuidBytes).order(ByteOrder.LITTLE_ENDIAN); +        buf.putLong(8, msb); +        buf.putLong(0, lsb); +        return uuidBytes; +    } + +    /**       * Check whether the given parcelUuid can be converted to 16 bit bluetooth uuid.       *       * @param parcelUuid  |