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

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

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

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам