ios - GetDescriptor() 空值/128 位 UUID 描述符?

标签 ios xamarin bluetooth-lowenergy uuid

我正在使用 Xamarin 编写代码。我正在开发我的 IOS 应用程序,它允许我读取 BLE 设备、服务、特征值和通知激活。

我的 BLE 信标有一个包含两个自定义特征的自定义服务,并且都使用 CCCD 实现了通知。

我的 ble 设备工作正常 我用 BLE 扫描仪应用程序测试它,它工作正常,没有任何问题。 我可以读取值并且可以激活这两个特征的通知。 See picture here .

我使用 xamarin 编写的应用程序可以正常工作(读取服务、特征值......)唯一没有工作的问题是通知的激活。这是代码的一部分:

public UUID Charac_UUID0 = UUID.FromString("0000beef-1212-efde-1523-785fef13d123");
public UUID Charac_UUID = UUID.FromString("0000b1e0-1212-efde-1523-785fef13d123") ;
public UUID Descr_UUID =  UUID.FromString("00002902-1212-efde-1523-785fef13d123");
protected BluetoothGattCharacteristic _charac;
....
....
this._charac = App.Current.State.SelectedService.GetCharacteristic(Charac_UUID0);
BluetoothLEManager.Current.ConnectedDevices[App.Current.State.SelectedDevice].SetCharacteristicNotification(_charac, true);
BluetoothGattDescriptor descriptor = _charac.GetDescriptor(Descr_UUID0);
descriptor.SetValue(BluetoothGattDescriptor.EnableNotificationValue.ToArray());
BluetoothLEManager.Current.ConnectedDevices[App.Current.State.SelectedDevice].WriteDescriptor(descriptor);

代码总是在 descriptor.SetValue 给我一个错误,它告诉我描述符是 NULL,这意味着 _charac.GetDescriptor 没有返回任何值。

我怀疑描述符 UUID 值 (Descr_UUID) 不正确。我不知道如何确定 Descr_UUID,但我在互联网上看到很多例子,人们将特性的自定义 UUID 替换为 2902,在我的例子中,128 个描述符 UUID 等于 00002902-1212- efde-1523-785fef13d123.

但是这里有个问题。两个特征的描述符 UUID 将相同,因为两个特征的基本 UUID 相同?

有什么解决办法吗?

最佳答案

3 年后,我相信您已经明白了,但是,2902 是客户端特征配置的 16 位值 Descriptor ,而且我相信它也应该使用“BASE UUID”来膨胀,而不仅仅是使用您的特征描述符。看到这个:answer

这将使用 BASE UUID 将您的 16(或 32)位 uuid 转换为完整的 128 位 uuid:

    public static UUID ConvertUuid(uint uuid)
    {
        const long msbMask = 0x0000000000001000;
        const ulong lsb = 0x800000805f9b34fb;
        var msb = msbMask | ((ulong)(uuid & uint.MaxValue) << 32);
        return new UUID((long)msb, unchecked((long)lsb));
    }

关于ios - GetDescriptor() 空值/128 位 UUID 描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39907507/

相关文章:

ios - 无法更改翻转的 UIImage 图像 Swift 2 iOS 的 tintColor

ios - 从 Xamarin.iOS 中的导航堆栈弹出后,ViewController 未被释放

c# - Xamarin 解析 Html

Android,如何将 BLE 设备制作成配对设备(绑定(bind))

IOS:WebView中VoiceOver改成英文

ios - 如何在 iOS 中转换 curl Action

Android (Xamarin) linearlayout 布局 :weight not working as intended

android - 如何解决错误 onClientConnectionState() - status=22 clientIf=7 in BLE

java - Java 中的低功耗蓝牙 API

ios - 更改 UIView 在 captureOutput 中的位置