我需要通过Windows中创建的虚拟COM端口连接到蓝牙设备。当在手动配对过程中已经创建了端口时,这很容易。但我希望我的应用程序能让用户从手动配对设备中解脱出来。我想要显示范围内的所有设备,允许用户选择一个,然后创建与所选设备连接的虚拟COM端口。我并不是试图避免配对过程本身,而是希望通过我的应用程序调用它。
我开始熟悉Microsoft Bluetooth API。然后出现了一些疑问。我一直在想,如果一些用户使用不同的(与微软的)蓝牙协议栈,会发生什么?微软的API是否是真正的蓝牙API,必须由任何其他蓝牙堆栈提供商实现?或者更确切地说,每个提供商都有自己的API,而微软的API只是众多API中的一个?
发布于 2009-06-04 06:58:56
感谢大家的宝贵意见。我想总结一下我到目前为止的发现。Microsoft Bluetooth API不是操作系统API。针对它编写的应用程序将无法与任何其他Bluetooth stack正确协作。似乎打算与多个堆栈协作的应用程序需要提供一些堆栈抽象层,以及用于所有them.The的堆栈特定代码。另一种解决方案是允许用户手动配对蓝牙设备,这最终在操作系统中创建一些虚拟设备(例如,COM端口)。则应用程序可以使用这样的设备的标准接口。
发布于 2009-05-26 07:29:33
我不能为Microsoft Bluetooth API说话,但有适用于PC平台的multiple Bluetooth stacks (甚至更多适用于移动设备)。
底层应用程序接口是由Bluetooth Core Spec定义的,因此所有堆栈都应该能够交互,事实上,它们必须进行互操作,否则它们不能使用蓝牙名称和徽标。
至于配对,如果设备有默认的安全性,那么你将很难让设备配对,这需要pin代码。
在不久的将来,事情可能会变得更简单,因为蓝牙标准已经引入了一种新的安全模型,secure simple pairing,它有一个不需要PIN码的“just works”模式。这仍然比当前的安全性更强,除了对中间人攻击的攻击。然而,你可能需要一段时间才能在PC上看到具有这一功能的芯片。
发布于 2009-05-26 10:25:42
如果您可以改为使用.NET :-/我可以推荐我们的库32feet.NET。对于显式配对,有BluetoothSecurity.PairDevice。我们也可以为您创建虚拟端口,例如:
BluetoothClient cli = new BluetoothClient();
BluetoothDeviceInfo[] list = cli.DiscoverDevices();
BluetoothDeviceInfo selected = GetUserToSelectOne(list);
BluetoothSecurity.PairDevice(selected, pin);
// Ask Win32 to create a virtual serial port
selected.SetServiceState(BluetoothService.SerialPort);
然而,我真的不喜欢虚拟串行端口,所以我总是建议人们使用我们的BluetoothClient类的普通套接字连接,如果需要,它将自动处理配对请求。
在Win32上,我们支持来自微软、Widcomm/Broadcom和BlueSoleil的堆栈。在Widcomm上还没有对SetServiceState的支持,他们的API也不支持对配对请求的响应。BlueSoleil应该同时支持这两者。
32feet.NET — User’s Guide上有一个简短的用户指南,所有的类文档都可以在主站点http://32feet.net上找到,而Widcomm文档目前只在我们的code repository中。
https://stackoverflow.com/questions/906454
复制相似问题