Bluetooth SPP между Android и другим устройством, вопросы UUID и PIN

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

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

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

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

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

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

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

Буду признателен, если вы поделитесь некоторыми знаниями, подсказками, Фредрик


РЕДАКТИРОВАТЬ:

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

~ $ sdptool search SP

Inquiring ...

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

Имя службы: 1808130054

RecHandle службы: 0x10003

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

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

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

"L2CAP "(0x0100)

" RFCOMM "(0x0003)

Канал: 13

´

Поиск SP в 00: 07: 80: 88: XX: XX. . .

Имя службы: 1808130054

Описание службы: 1808130054

RecHandle службы: 0x10005

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

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

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

«L2CAP» (0x0100)

«RFCOMM» (0x0003)

Канал: 12

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

code_ISO639: 0x656e

enconding: 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 ++?

/ Фредрик

20
задан Fredricus 16 March 2011 в 12:12
поделиться