3

我正在尝试写入 GAP 服务 (0x180) 特征和 0x2A04

每当我尝试写入 0x2A04(连接参数)或 0x0200(设备名称)时,

    var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromShortId(0x1800));
    var service = await GattDeviceService.FromIdAsync(devices[0].Id);

    var gapData = service.GetCharacteristics(new Guid("00002A04-0000-1000-8000-00805f9b34fb"))[0];
    var raw = await gapData.ReadValueAsync();

    byte[] conParas = new byte[raw.Value.Length];
    DataReader.FromBuffer(raw.Value).ReadBytes(conParas);
    //I can breakpoint and verify that the read works fine

    var status = await gapData.WriteValueAsync(conParas.AsBuffer());

并调用 WriteValueAsync(),程序在该行中断,我的异常是

mscorlib.dll 中出现“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理

附加信息:访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

我不太确定参数被拒绝的堆栈级别 - 我什至不知道参数是否到达 BLE 设备。但是,由于我可以写入其他 GATT 服务并从 GAP 特征中读取,我相信它是设备。

任何人都可以看到一个万无一失的方法来发现这个问题来自哪里?

谢谢托马斯

4

1 回答 1

2

我以前遇到过这个问题。微软似乎不喜欢你写信给 GAP。

我建议您构建 Gatt.XML,使其仅包含 GAP 中的“名称”和“外观”服务(仅这两个服务),然后将其余特征放在自定义服务或标准服务下。

如果您尝试写入在自定义服务下启用写入的特征,它应该可以工作。

摘要:您不能在 GAP 下写入特征。

参考:重组我的设备的 Gatt.XML 为我解决了同样的问题。

其他详细信息:对于这些“拒绝访问”错误,您需要检查: 1) 您手动编辑了包清单功能以包含 Gatt.XML 具有的服务。您必须指定自定义服务和标准服务。2) 您的 Gatt.XML 结构正确。3)您尝试写入的特征存在/设备当前已配对。

干杯,托格皮

于 2014-07-01T18:18:36.403 回答