Bluetooth в C #, какой стек, какой SDK? - PullRequest
17 голосов
/ 29 июня 2009

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

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

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

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

BlueSoleil

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

Windows

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

Widcomm

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

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

Спасибо

Ответы [ 3 ]

18 голосов
/ 03 июля 2009

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

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

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

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

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

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

5 голосов
/ 26 ноября 2009

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

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

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

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

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

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

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

Какой стек?

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

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

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

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

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

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

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

Резюме

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

4 голосов
/ 29 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...