Доступ к виртуальному COM-порту Bluetooth в Windows без сопряжения вручную - PullRequest
4 голосов
/ 25 мая 2009

Мне нужно подключиться к устройству Bluetooth через виртуальный COM-порт, созданный в Windows. Это легко, когда порт уже был создан во время процедуры сопряжения вручную. Но я бы хотел, чтобы мое приложение освободило пользователя от ручного сопряжения устройства. Я хотел бы представить все устройства в диапазоне, позволить пользователю выбрать одно, а затем создать виртуальный COM-порт, связанный с выбранным устройством. Я не пытаюсь избежать самой процедуры сопряжения, а скорее хотел бы вызвать ее из своего приложения.

Я начал знакомиться с Microsoft Bluetooth API . И тогда возникли некоторые сомнения. Мне было интересно, что произойдет, если какой-то пользователь будет использовать другой (чем Microsoft) стек Bluetooth? Является ли API-интерфейс Microsoft настоящим API-интерфейсом Bluetooth, который должен быть реализован любым другим поставщиком стеков Bluetooth? Или, скорее, у каждого провайдера есть собственный API, а у Microsoft - только один из многих других?

Ответы [ 3 ]

2 голосов
/ 04 июня 2009

Спасибо всем за ценный вклад. Я хотел бы обобщить то, что я нашел до сих пор. Microsoft Bluetooth API не является операционной системой API. Приложение, написанное против него, не будет правильно взаимодействовать с любым другим стеком . Кажется, что приложения, которые предназначены для взаимодействия с несколькими стеками, должны обеспечить некоторый уровень абстракции стека и специфичный для стека код для всех них. Другое решение состоит в том, чтобы позволить пользователю вручную связывать устройство Bluetooth, что в конечном итоге создает некоторое виртуальное устройство в операционной системе (например, COM-порт). Тогда приложение может использовать стандартный интерфейс такого устройства.

1 голос
/ 26 мая 2009

Если вы можете перейти на использование .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 есть только в нашем коде хранилище на данный момент.

1 голос
/ 26 мая 2009

Я не могу говорить за Microsoft Bluetooth API, но есть несколько стеков Bluetooth для платформы ПК (даже больше для мобильных устройств).

Базовый API-интерфейс определяется Базовой спецификацией Bluetooth , поэтому все стеки должны иметь возможность взаимодействовать, фактически они обязательно взаимодействуют или не могут использовать имя и логотип Bluetooth.

Что касается сопряжения, то вам будет сложно заставить устройства сопрягаться, если они имеют безопасность по умолчанию, для которой требуется пин-код.

В ближайшем будущем все может быть проще, поскольку стандарт Bluetooth представил новую модель безопасности, безопасное простое сопряжение , которая имеет режим «просто работает», не требующий пин-кода. Это все еще сильнее, чем нынешняя безопасность, за исключением противников в середине атак. Однако может пройти некоторое время, прежде чем вы увидите микросхемы с этой функцией на ПК.

...