简体   繁体   中英

Bluetooth GATT UUID

I'm trying to build an android app that uses the BluetoothLE. In tutorials they use a 128bit UUID but I only have the 16 bit UUID. I have to create a new 128 bit UUID using the service UUID and the Bluetooth Base.

Example :

  • Alert Notification Service UUID (16bit) => 0x1811
  • Bluetooth Base UUID (128bit) => 00000000-0000-1000-8000-00805F9B34FB

By combining those two UUIDs, we receive...

  • Alert Notification Service UUID (128bit) => 00001811-0000-1000-8000-00805F9B34FB

Is there a proper way to do this?

I use this:

public class BLEUtils {

    public static final long BT_UUID_LOWER_BITS = 0x800000805F9B34FBl;
    public static final long BT_UUID_UPPER_BITS = 0x1000l;
    public static final long BT_CCCD_SHORT_UUID = 0x2902l;
    public static final UUID BT_CCCD_UUID = get16BitBTUUID(BT_CCCD_SHORT_UUID);

    public static UUID get16BitBTUUID(long uuid) {
        return new UUID(BT_UUID_UPPER_BITS + (uuid << 32), BT_UUID_LOWER_BITS);
    }
}

Your example looks sane. Is it recognized properly by other devices?

Edit: The reverse operation requested in the comment would be:

public static long getShortUuid(UUID uuid) {
    long result = uuid.getMostSignificantBits();
    result = result - BT_UUID_UPPER_BITS;
    result = result >> 32;
    return result;
}

I didn't test it though.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM