无需堆栈的C/C++蓝牙API?

8
我想知道是否有适用于Windows(XP、Vista、7、x86和x64)的与堆栈无关的C/C++蓝牙API,我的目标是通过蓝牙创建连接并发送/接收一些时间关键的数据。经过我的研究,我得出了以下选项及其缺点:
- Windows Sockets for Bluetooth:只能与Microsoft蓝牙堆栈配合使用。 - 使用COM端口(CreateFile/ReadFile/...):比套接字选项慢,用户必须先连接到设备。 - 使用堆栈相关API:这将需要检测所使用的堆栈,并为每个堆栈创建读/写函数。非常耗时,而且我不知道是否可能支持所有堆栈。 - 编写KMDF驱动程序:我考虑编写一个功能驱动程序,直接与蓝牙HCI驱动程序交互,这应该是与堆栈无关的。这将非常耗时,因为我必须阅读整个蓝牙规范,或者是否有HCI命令的API?
我知道btframework.com还提供商业SDK,支持大多数(或全部)蓝牙堆栈,但我需要免费的选项。请告诉我是否有其他选项可供选择。如果没有其他选项,您会选择哪些选项以及原因?可以使用Windows Sockets并忽略其他蓝牙堆栈吗?谢谢您的帮助 :)

1
只是顺便提一下,除非你绝对必须使用蓝牙传输关键时间数据,否则不应使用它。 - Dhaivat Pandya
Dhaivat,为什么不呢?假设FEC和哈希良好,很少会出现任何损坏的情况。 - Nick ODell
1
这个页面链接到一篇学术论文,指出蓝牙不适用于时间关键型应用:http://nettoyeur.noisepages.com/2011/01/midi-over-bluetooth-part-ii-latency-and-jitter/ - John Zwinck
谢谢你提供的信息。我的项目需要蓝牙,所以我别无选择 :) - lolo
“除非你必须这样做”,让我笑了 :) 此外,我的所谓的HIFI Voiis A2DP接收器让我想起了旧黑胶唱片机:哇音和慢速抖动!在某些音乐中,这是相当难以忍受的,并且当有物理干扰(如Wifi流量)时会发生这种情况。 - sehe
2个回答

4
我猜一种选项是使用C++/CLI与我的托管蓝牙库32feet.NET进行接口交互,在Windows上支持大多数堆栈。 http://32feet.codeplex.com/

谢谢:D我已经在其他stackoverflow问题中阅读了关于32feet.NET库(以及Java的bluecove)的信息。不幸的是,我忽略了它,因为它不适用于C/C ++。我从未想过会有像C++/CLI这样的东西。:D我目前必须编写一个概念验证(使用套接字选项),但我会尽快尝试您的解决方案,再次感谢:) - lolo
好的。如果你尝试C++/CLI这条路,请告诉我它的进展如何。 :-) - alanjmcf

3
我一直在成功地使用这个叫做WCL的库(链接),它不是免费的,但可以让你通过SPP连接而无需创建虚拟COM端口。
尽管他们的文档不是很好,但他们提供了一些不错的演示代码,你可能想试试。
它支持Microsoft、Toshiba、Widcomm和Bluesoleil堆栈,并且有本地C++实现和.NET实现。

1
不,我和那些人没有关系。我只是花了很多时间搜索这样一个库,我认为分享这些信息是有帮助的。如果我的帖子成为你的困扰,我可以删除它们。 - Jet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接