4

我需要通过在 Windows 中创建的虚拟 COM 端口连接到蓝牙设备。如果在手动配对过程中已经创建了端口,这很容易。但我希望我的应用程序可以让用户免于手动配对设备。我想展示范围内的所有设备,允许用户选择一个,然后创建与所选设备连接的虚拟 COM 端口。我并不是想避免配对过程本身,而是我想通过我的应用程序调用它。

我开始熟悉Microsoft Bluetooth API。然后出现了一些疑问。我一直想知道如果某些用户使用不同的(与微软的)蓝牙堆栈会发生什么?微软的 API 是真正的蓝牙 API,必须由任何其他蓝牙堆栈提供商实现吗?或者更确切地说,每个提供商都有自己的 API,而微软只是众多其他 API 中的一个?

4

3 回答 3

2

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

于 2009-06-04T06:58:55.527 回答
1

我不能代表 Microsoft 蓝牙 API,但有多个可用于 PC 平台的蓝牙堆栈(更适用于移动设备)。

底层 API 由蓝牙核心规范定义,因此所有堆栈都应该能够交互,事实上它们互操作是强制性的,否则它们不能使用蓝牙名称和徽标。

至于配对,如果设备具有默认安全性,您将很难配对设备,这需要密码。

在(不久的)将来,事情可能会更简单,因为蓝牙标准引入了一种新的安全模型,即安全简单配对,它具有不需要 Pin 码的“正常工作”模式。这仍然比当前的安全性更强,除了针对中间人的攻击。但是,您可能需要一段时间才能在 PC 中看到具有此功能的芯片。

于 2009-05-26T07:29:33.263 回答
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 — 用户指南,所有的类文档都可以在主站点http://32feet.net上找到,Widcomm 文档目前只在我们的代码库中。

于 2009-05-26T10:25:42.457 回答