问题描述
我正在开发一个在RaspBerry Pi 3b上运行的UWP项目,该项目将宣传Gatt服务器。我的程序基于Microsoft提供的Windows IoT示例中的第三种方案。我正在使用未配对的通讯。最初,我使用树莓派的板载BLE进行BSOD /重启。
我缩小了范围,怀疑是在以下情况下发生的:
-
客户端未正确断开连接,即android设备未正确断开连接
-
我尝试在所有设备上使用IAsyncoperation
NotifyValueAsync(IBuffer value)进行通知,即使在未正确断开连接的设备上也是如此。
我确实在Microsoft文档中发现它仅支持低带宽设备,因此我限制了mtu /数据包的大小,并增加了通知间隔。
为解决崩溃问题,我在向每个单独的订户发送通知之前添加了会话状态检查。这似乎解决了我的崩溃问题。在我最近的测试中,它再没有发生过。我正在使用10.0.17763.1397,所以也许他们也有一些解决办法。
foreach (var client in characteristic.SubscribedClients)
{
try{
if (client.Session.SessionStatus == GattSessionStatus.Active)
{
GattClientNotificationResult result = await characteristic.NotifyValueAsync(data.AsBuffer(),client);
}
}
catch(Exception ex)
{
//if client is not disconnected properly,like
// bluetooth in client is turned off or becomes out of
//range it throws and error that on client.Session.SessionStatus
}
}
我还每60秒重新启动GATT服务器,例如如果没有订阅/连接任何客户端,则停止广告并每60秒重新创建/重新启动一次。
现在,我的问题是,如果我尝试循环扫描-连接-读取,经过几次尝试(6-20次尝试)后,我的客户端将停止检测该设备。只有重新启动设备才能解决问题,因为我已经尝试从应用程序和Powershell(使用devcon)重新启动无线电。它没有解决问题。
因为我需要一个完美的稳定解决方案。我选择在外围设备模式下使用BLE加密狗。我确实从那里看到了建议的BLE加密狗(由于已被归档,我无法回复)。
但是我希望在购买它们之前能获得一些概念上的证明。 (我确实从Microsoft的硬件兼容性列表中购买了一堆CSR BLE软件狗,但是它们都不起作用)
如果有人已经测试过:
-
BLE-USB-CR(RoHS)
-
BT900-美国Laird
请让我知道您的想法以及它的工作方式。我还看到了Adafruit的Bluefruit LE Friend,但不确定它是否与Windows IOT兼容。
也欢迎提出我目前不完善的解决方案的建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)