Bluetooth SPP между Android и другим устройством, вопросы UUID и PIN - PullRequest
20 голосов
/ 10 марта 2011

Я пытаюсь внедрить приложение Android для получения данных с медицинского устройства, но Я не могу пройти процесс обнаружения и подключить телефон и устройство или соединить их друг с другом.

Описание медицинского устройства: Устройство использует протокол обнаружения служб (SDP) и профиль последовательного порта (SPP). Он запускает процедуру запроса для обнаружения (до 10) окружающих точек доступа с согласованным фильтром ХПК и названием услуги. Затем он последовательно устанавливает соединение (используя процедуру страницы) с точкой доступа, проверяя PIN-код. Как только ПИН-код сопоставлен, данные загружаются. После загрузки данных устройство ожидает подтверждения. Решение является хозяином и инициирует общение.

У меня нет контроля над медицинским устройством. Все, что я могу сделать, это запустить его и дождаться процедуры, описанной выше (после измерения).

Приложение для Android: Я начал с Пример чата Bluetooth на страницах разработчика. До сих пор я заменил UUID на 00001101-0000-1000-8000-00805f9b34fb, чтобы использовать SPP, и присвоил Service Name соответствующее имя. Я могу подтвердить, что это кажется правильным через проверку сервиса с компьютера. Поскольку именно медицинское устройство запрашивает и инициирует связь, моя служба использует метод BluetoothServerSocket и accept(), чтобы начать его прослушивание.

  1. На страницах разработчика, которые я читал, UUID должен совпадать между приложениями, пытающимися установить связь. Поскольку я не могу установить UUID для медицинского устройства, мне интересно, будет ли это проблемой или достаточно, чтобы медицинское устройство использовало профиль SP?

  2. Если имя службы и UUID указаны правильно и медицинское устройство фактически попытается подключиться к моей службе Bluetooth, которая прослушивает подключения, то система Android предложит мне ввести PIN-код вручную, чтобы иметь возможность сопряжения устройства (так как медицинское устройство имеет предварительно установленный PIN-код)?

  3. Я не нашел в Android SDK API ничего, что позволяло бы мне установить PIN-код для моей службы Bluetooth (в случае сбоя), возможно ли это?

Я читал, что в настоящее время система генерирует PIN-код, и единственное, что требуется, - это подтверждение пользователя. Я думаю, не в моей системе, так как устройство немного старше.

Буду признателен, если вы захотите поделиться некоторыми знаниями, намеками, догадками относительно всего, что я описал выше!

Заранее спасибо, Фредрик


EDIT:

Теперь у меня есть устройство в паре с коробкой bluegiga , и они общаются правильно. Сейчас я ищу критерии для устройства измерения артериального давления для подключения к моему телефону. Я могу проверить с компьютера Linux (sdptool search SP в терминале) службу Bluetooth, предоставляемую bluegiga , и сравнить ее со службой Bluetooth, которую я предоставляю на Android. Эти значения я и получаю:

~ $ sdptool search SP

Запрашивающий ...

Поиск SP на 8C: 71: F8: E5: XX: XX. , .

Наименование услуги: 1808130054

Service RecHandle: 0x10003

Список идентификаторов классов обслуживания:

UUID 128: 00001101-0000-1000-8000-00805f9b34fb

Список дескрипторов протокола:

"L2CAP" (0x0100)

"RFCOMM" (0x0003)

Канал: 13

Seaching for SP в 00: 07: 80: 88: XX: XX. , .

Наименование услуги: 1808130054

Описание услуги: 1808130054

Service RecHandle: 0x10005

Список идентификаторов классов обслуживания:

«Последовательный порт» (0x1101)

Список дескрипторов протокола:

"L2CAP" (0x0100)

"RFCOMM" (0x0003)

Канал: 12

Список базовых языков:

code_ISO639: 0x656e

в комплекте: 0x6a

base_offset: 0x100

Первое найденное устройство - это телефон (mac = 8C: 71 ... Google Nexus S), а второе (mac = 00: 07 ...) - bluegiga . Я заметил, что на устройстве Android нет описания службы. Я думаю, что самое важное отличие заключается в списке идентификаторов классов обслуживания. UUID 128 на Android, но совершенно другой формат, описывающий это на bluegiga .

  1. Можно ли реализовать использование идентификаторов классов обслуживания с другим форматом, отличным от UUID, на Android?

  2. Можно ли манипулировать служебной записью, зарегистрированной в БД обнаружения служб?

  3. Можно ли было бы как-то реализовать его непосредственно в BlueZ, используя нативную разработку c / c ++?

/ Fredrik

1 Ответ

6 голосов
/ 11 марта 2011

Если вы можете предоставить имя / ссылку на медицинское устройство (если оно является коммерческим устройством), это может помочь прочитать его руководство, чтобы уточнить, что может происходить.Вот несколько советов:

  1. В дополнение к UUID последовательного порта каждая служба через SPP может иметь пользовательский UUID - например, медицинское устройство может искать службу, с которой оносовместимо с использованием этого пользовательского UUID.
    Если медицинское устройство в настоящее время успешно подключается к ПК или другой точке доступа и передает данные, можно попробовать прочитать запись SDP этого устройства и определить, какой конкретный UUID в дополнение кSPP UUID используется, если таковой имеется, и также используется в вашем приложении.

  2. Если медицинское устройство не может найти ваш телефон / приложение, это может быть потому, что оно необнаруживаемый.Устройство Android по умолчанию не может быть обнаружено даже в том случае, если вы являетесь сервером, оно будет только подключаемым и не обнаруживаемым, вы можете попытаться сделать его доступным программно или с помощью настроек и посмотреть, сможет ли медицинское устройство найти ваше устройство.См. Здесь - Включение функции обнаружения в Android

  3. Для сопряжения с PIN-кодом устройство Android должно запустить процесс сопряжения, когда непарное устройство пытается подключиться к нему.попробуйте после ознакомления с рекомендациями (1) и (2), если для одного из устройств установлена ​​версия Bluetooth 2.1, используется сопряжение PIN-кодом. Даже для более новых устройств потребуется 6-значный пароль с некоторым вмешательством / подтверждением пользователя нателефон, чтобы разрешить сопряжение (это просто хорошая политика безопасности, чтобы не допустить, чтобы это происходило автоматически без вмешательства пользователя), надеюсь, сопряжение потребуется только при первом подключении, позже оно не потребует вмешательства пользователя дляпоследующие соединения.

...