Подтвердить что ты не робот

Bluetooth в С#, какой стек, какой SDK?

У нас есть приложение, которое должно иметь возможность использовать bluetooth для следующих требований:

  • Прием файлов с устройств Bluetooth (до двух устройств одновременно)
  • Отобразить все устройства bluetooth в диапазоне
  • Отправка файлов на устройства Bluetooth.
  • Сканирование устройств Bluetooth и передача файлов в одно и то же время

Мы работаем в Windows XP.

Я немного огляделся и, кажется, было 3 основных стека:

BlueSoleil

На веб-сайте BlueSoleil в разделе SDK, по-видимому, упоминается только 1 соединение, что явно не подходит.

Окно

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

Widcomm

Дорогой и потенциально переборщик? Более сложный API? Мысли?

Что касается SDK для С#, то смотрел на Franson Bluetools, кто-нибудь использовал этот API?

Спасибо

4b9b3361

Ответ 1

Во-первых, отказ от ответственности, я сторонник библиотеки 32feet.NET.: -)

Я только что проверил, и на XP с стеком Microsoft (используя один ключ) я могу одновременно получать два OBEX PUT, а также обнаруживать устройства. Это использование класса 32feet.NET ObexListener и метода BluetoothClient.DiscoverDevices. Для отправки OBEX PUT можно использовать класс ObexWebRequest. Чтобы выполнить несколько параллельных соединений с ObexListener, у меня просто было несколько потоков, вызывающих его метод GetContext().

Так что, может быть, проще, чем мы думали...

Я также тестировал его с помощью Andy Hume OBEX Server, используя его библиотеку Brecham.Obex, и одновременный прием отлично работает там. Его доступный от http://32feet.net/files/folders/objectexchange/entry6511.aspx.

В нашей поддержке Widcomm. Надеюсь, он не кажется слишком "неполным" на стороне клиента... Запрос (обнаружение устройства) и соединения все работают. Однако серверная часть все еще нуждается в небольшой работе, и есть некоторые вещи, которые API-интерфейс Widcomm просто не поддерживает, например. (программная проверка подлинности).

В чем проблема с образцами? Время компиляции или время выполнения? В стеке MSFT или Widcomm? Следуйте за http://32feet.net/forums/37.aspx, если хотите.

Ответ 2

Время, чтобы точно объяснить, что мы закончили делать...

2 ключа, почему?

  • Если ключ выполняет сканирование, скорость передачи значительно замедляется.
  • Ключ может поддерживать только 7 одновременных передач, если вы выполняете сканирование, это снижается до 6. Если вы хотите одновременно отправлять, получать и сканировать все, все замедляется, плохо, и вы очень ограничены в каналах.

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

Библиотека, которую мы использовали

После долгих испытаний и размышлений мы решили выбрать WirelessCommunicationLibrary из платформы BT.

Он поддерживает Widcomm, Windows, BlueSoleil и стек Toshiba. Он поддерживает все необходимые серверные компоненты, это хорошо поддерживаемый коммерческий продукт, который отлично работает без ошибок.

Какой стек?

Ну, это сложный вопрос. NONE стеков поддерживает 2 ключа одновременно. Таким образом, единственный вариант - запустить один ключ на одном стеке, а другой - на другой. Именно здесь вам пригодится библиотека WCL!

Microsoft. Если во время сканирования возникает ошибка, общий для всего стека выдается из строя. Это не идеально! Вы должны закрыть и перезапустить радиоустройство, это требует времени и подвержено ошибкам. Но... стек Microsoft действительно отлично переносит передачи файлов.

Widcomm - стек Widcomm не подходит для передачи файлов. Есть досадные небольшие приложения, которые устанавливаются с помощью Widcomm, которые продолжают пытаться взять управление из вашего приложения. Вы можете убить bttray.exe, что помогает, но вы все равно получаете странное поведение из стека во время передач. Я уверен, что это может быть разрешено, но так как Windows плохо сканирует, имеет смысл использовать Widcomm для сканирования.

Итак... у нас есть один ключ для Widcomm для сканирования снова и снова, и один ключ, установленный в Microsoft, предназначен для обработки только передачи файлов (внутри и снаружи).

Получение 2 ключей для работы

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

Единственная проблема заключается в том, что это ключи widcomm, и нам нужен один ключ в стеке Windows. Windows не распознает их как ключи Windows, поэтому не будет регистрировать их для стека Windows. Итак... это взлом, который вы можете сделать в файле bt.inf, чтобы он распознал ключ для Windows. Затем вам нужно переключить драйверы на один из ключей для запуска на драйверах Windows, и все готово.

Резюме

Итак... у нас есть один ключ сканирования все время, одна обработка переводов, каждый по отдельным стекам, и все это работает хорошо. Это единственный способ, по которому я нашел 2 рабочих ключа, гладко работающих в Windows. Если у вас есть лучшее предложение, пожалуйста, опубликуйте его!

Ответ 3

Попробуйте следующее: 32feet.NET. Начиная с версии 2.4, они поддерживают стек Widcomm в дополнение к стеку Windows.

Кстати: Почему вам нужно работать с двумя ключами одновременно? Обычно один ключ может обрабатывать до 7 устройств, подключенных одновременно.