【发布时间】:2016-07-08 13:06:14
【问题描述】:
我尝试使用典型方法订阅 BLE 特征通知:
stCharacteristic = stService.GetCharacteristics(stCharacteristicGUID)[0];
await stCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
stCharacteristic.ValueChanged += stData_ValueChanged;
回调函数也有标准形式:
async void stData_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
var values = (await sender.ReadValueAsync()).Value.ToArray();
}
问题在于,当 BLE 设备更改特征值时,并不总是调用回调。当我向特征写入内容并且设备响应写入内容时,将调用回调。但是,如果设备仅自己写入特征,则不会调用回调。有趣的是数据没有丢失。当我再次写一些东西时,我收到了几次回调,其中包含 BLE 设备同时发送的所有数据。换句话说,它看起来像 Windows 或 .NET Framework 会缓存后续传入的数据,直到进行写入。仅写入第一个特征更改后会触发回调。
- 传入数据 - 无回调
- 发送数据
- 传入数据 - 两个回调!
- 发送数据
- 传入数据 - 一个回调
- 传入数据
- 传入数据
- 传入数据
- 发送数据 - 三个回调!
Windows 10、VS2015
【问题讨论】:
标签: c# bluetooth notifications bluetooth-lowenergy gatt