【问题标题】:Bluetooth GATT UUID蓝牙 GATT UUID
【发布时间】:2016-04-20 08:58:49
【问题描述】:

我正在尝试构建一个使用 BluetoothLE 的 android 应用程序。在教程中,他们使用 128 位 UUID,但我只有 16 位 UUID。 我必须使用服务 UUID 和蓝牙基础创建一个新的 128 位 UUID。

例子:

  • 警报通知服务 UUID(16 位)=> 0x1811
  • 蓝牙基础 UUID(128 位)=> 00000000-0000-1000-8000-00805F9B34FB

通过组合这两个 UUID,我们收到...

  • 警报通知服务 UUID(128 位)=> 00001811-0000-1000-8000-00805F9B34FB

有没有合适的方法来做到这一点?

【问题讨论】:

    标签: java android bluetooth gatt


    【解决方案1】:

    我用这个:

    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);
        }
    }
    

    你的例子看起来很理智。是否被其他设备正确识别?

    编辑: 评论中要求的反向操作是:

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

    虽然我没有测试它。

    【讨论】:

    • 您好,感谢您的回复!但是,如果我想从“BT_CCCD_UUID”中提取“BT_CCCD_SHORT_UUID”,我该如何实现呢?
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2015-06-22
    • 2022-06-13
    • 2015-02-17
    • 2012-12-07
    相关资源
    最近更新 更多