非托管的c++ BT/LE在RP/Win和结对编程,可能的

Unmanaged C++ BT/LE on RP/Win and pairing programmatically, possible?

本文关键字:Win 编程 c++ BT LE RP      更新时间:2023-10-16

我有一个非托管的c++应用程序,我想移植到Windows树莓派。它最初是在嵌入式平台上开发的,但使用伪hal来隔离10-15%的平台特定代码是为了具有高度可移植性。所以它很容易移植到/运行在windows桌面以及零变化,常见的~85%。它目前是为了支持ANT+传感器而编写的,尽管我们希望添加(或可能用ANT取代)BT/LE支持。也就是说,从网上大量的文档和例子来看,不重写是否可行并不十分清楚。如果是这样的话,我们可能会选择linux。总之,三个问题-

(1)这有可能吗?

(2)如果是这样,最好的方法是什么(即我应该考虑哪些API,以及我应该如何包装它们以供非托管使用)?

(3)是否有一种方法可以编程地将RP与我们的目标传感器配对,即扫描可用的传感器并通过预定义的类型和可能的ID配对(如果是这样的话,我应该看什么API)?

我讨厌问这样开放式的问题,但从我在网上看到的例子来看,这并不清楚,因为所有东西都是面向UWP的,我对这些都不太熟悉。只是希望得到可行性的肯定/否定,如果是的话,找到正确的方向。谢谢你的建议,chris

我想我会为其他走同样道路的人跟进这一点…这是我最终发现的-

有可能……吗?是的,有可能。我能够让它工作,虽然由于缺乏文档/例子,我想出的可能不是最佳解决方案。从我所做的有限测试来看,它确实看起来很可靠。

2)如果是,最好的方法是……再一次,我不确定这是最好的方法,但简短的回答是,要使它工作,你需要通过COM使用WRL。扫描和配对所需的所有接口都在" Windows .devices.enumeration.h"中找到,您将需要使用以下命名空间- ABI::Windows::Foundation;微软:WRL;微软::WRL::包装;ABI::::设备::枚举。因为你需要的许多对象/接口根本就没有文档(例如:"IDeviceInformationStatics2"),您需要使用QueryInterface来查找可用的内容。

3)是否有一种方法来编程配对…是的,如上所述,这是可能的。我花了几个星期的时间来挑选它并使其工作,但在网上看到各种相关的例子并将其拼凑在一起似乎是可行的。我担心的一件事是在没有UI的情况下传递BLE pin码。这也可以工作,虽然没有真正记录(见"AcceptWithPin")....