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

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

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


person oo_olo_oo    schedule 25.05.2009    source источник


Ответы (3)


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

person oo_olo_oo    schedule 04.06.2009
comment
Спасибо, что поделились своими выводами. - person TeamWild; 30.04.2013

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

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

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

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

person Simon Peverett    schedule 26.05.2009
comment
Спасибо за ответ. Чтобы быть более конкретным, я вообще не пытаюсь избежать спаривания. Собственно, я бы хотел начать процедуру сопряжения из своего приложения, если устройство еще не было сопряжено. Я хотел бы сделать это независимо от установленного стека (если возможно), и именно по этой причине я спросил о Bluetooth API, доступном в Windows. Было бы здорово, если бы я мог использовать API независимо от стека, лежащего в основе. Если бы весь стек предоставлял свои собственные API, мне нужно было бы программировать для каждого из них ... - person oo_olo_oo; 26.05.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 находится только в нашем репозитории кода на данный момент.

person alanjmcf    schedule 26.05.2009
comment
Спасибо за подсказки. К сожалению, мне нужно поддерживать больше стеков, чем два управляемых вашей библиотекой ... Но, в любом случае, вы косвенно ответили на мой вопрос о API Bluetooth, предоставляемых разными стеками Bluetooth - они не взаимозаменяемы, и каждый из них должен обрабатываться отдельно . - person oo_olo_oo; 26.05.2009