2009-05-25 350 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