Доступ к виртуальному COM-порту Bluetooth в Windows без ручного сопряжения
-
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 находится только в нашем репозиторий кода в данный момент.