GetDescriptor()null值/ 128位UUID描述符?

时间:2016-10-07 00:15:50

标签: ios xamarin bluetooth-lowenergy uuid

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

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

我的设备正常工作我使用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没有返回任何值。

我怀疑Descriptor UUID值(Descr_UUID)不正确。我不知道如何确定Descr_UUID,但是我在互联网上看到了很多例子,用2902替换了caracteristic的自定义UUID,这给了我一个128描述符UUID等于00002902-1212-efde-1523-785fef13d123。 / p>

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

任何解决方案?

1 个答案:

答案 0 :(得分:0)

3年后,我确定您已经弄清楚了,但是2902是客户端特征配置Descriptor的16位值,我相信也应该使用“ 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));
    }