使用Raspberry Pi寻找适用于Windows IoT核心的BLE外围设备加密狗

问题描述

我正在开发一个在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加密狗(由于已被归档,我无法回复)。

https://social.msdn.microsoft.com/Forums/SECURITY/en-US/344fc709-7e13-499a-94ee-3c935ad503bb/ble-gatt-server?forum=WindowsIoT

但是我希望在购买它们之前能获得一些概念上的证明。 (我确实从Microsoft的硬件兼容性列表中购买了一堆CSR BLE软件狗,但是它们都不起作用)

如果有人已经测试过:

  • BLE-USB-CR(RoHS)

  • BT900-美国Laird

请让我知道您的想法以及它的工作方式。我还看到了Adafruit的Bluefruit LE Friend,但不确定它是否与Windows IOT兼容。

也欢迎提出我目前不完善的解决方案的建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...