2009-05-25 48 views
4

我需要通过在Windows中创建的虚拟COM端口连接到蓝牙设备。在手动配对过程中已经创建端口很容易。但我希望我的应用程序能够减轻用户手动配对设备的负担。我想介绍该范围内的所有设备,允许用户选择一个设备,然后创建与所选设备连接的虚拟COM端口。我并不是想避免配对程序本身,而是我想用我的应用程序来调用它。我开始熟悉Microsoft Bluetooth API。然后出现了一些疑问。我一直在想,如果一些用户使用不同的(比微软的)蓝牙堆栈会发生什么?微软的API是真正的蓝牙API,必须由其他蓝牙堆栈提供商来实施吗?或者说,每个供应商都有自己的API,而微软只是其中的一个?在Windows上访问蓝牙虚拟COM端口而无需手动配对

回答

2

谢谢大家的宝贵意见。我想总结一下我迄今为止发现的内容。 Microsoft Bluetooth API不是操作系统API。针对其撰写的申请将不会与任何其他Bluetooth stack正确配合。看起来,旨在与多个堆栈协作的应用程序需要提供一些堆栈抽象层,并为所有堆栈提供特定的代码。另一种解决方案是允许用户手动配对蓝牙设备,最终创建一些虚拟设备在操作系统中(例如,COM端口)。然后应用程序可以使用这种设备的标准接口。

+0

感谢您分享您的发现。 – TeamWild 2013-04-30 10:38:01

1

我不能说微软蓝牙API,但有multiple Bluetooth stacks可用于PC平台(甚至更多的移动设备)。

底层API由Bluetooth Core Spec定义,因此所有堆栈都应该能够进行交互,实际上它们是互操作的,或者它们不能使用蓝牙名称和徽标。

至于配对,如果他们有默认安全性(需要PIN码),您将很难获得设备配对。

由于蓝牙标准引入了一种新的安全模式secure simple pairing,它具有“正常工作”模式,无需PIN码,因此在未来(将来)可能会更简单。除了对抗中间人攻击的Man之外,这种情况仍然比目前的安全性更强。但是,在PC上看到具有此功能的芯片可能还有一段时间。

+0

感谢您的回答。 更具体地说,我没有试图避免配对。实际上,如果设备尚未配对,我想从我的应用程序开始配对程序。我想这样做,不管安装的堆栈如何(如果可能的话),这就是我问及Windows上可用的蓝牙API的原因。如果我可以使用API​​而不管底层堆栈如何,那就太棒了。如果所有堆栈都提供了自己的API,那么我需要针对它们中的每一个进行编程...... – 2009-05-26 08:37:55

1

如果您可以更改为使用.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上,我们支持来自Microsoft,Widcomm/Broadcom和BlueSoleil的堆栈。在Widcomm上还没有支持SetServiceState,并且他们的API不支持响应请求的配对。 BlueSoleil应该支持两者。

一个简单的用户指南在32feet.NET — User’s Guide,所有的类文件可在主站点http://32feet.net,Widcomm文件目前只在我们的code repository

+0

谢谢你的提示。不幸的是,我需要支持比图书馆管理的更多的堆栈...但是,无论如何,您间接地回答了我关于蓝牙API的问题,这些蓝牙堆栈由不同的蓝牙堆栈提供 - 它们不可互换,并且每个必须单独处理。 – 2009-05-26 12:42:35