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

StackOverflow https://stackoverflow.com/questions/906454

  •  05-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Если вы можете перейти на использование .NET :-/ могу порекомендовать нашу библиотеку. 32фута.НЕТ.Для явного сопряжения существует 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 находится только в нашем репозиторий кода в данный момент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top