Я пытаюсь реализовать приложение Android для получения данных от медицинского устройства, но Я не могу пройти процесс обнаружения и установить сопряжение или соединение телефона и устройства друг с другом. Устройство использует протокол обнаружения служб (SDP) и профиль последовательного порта (SPP). Он запускает процедуру запроса для обнаружения (до 10) окружающих точек доступа с совпадающими фильтром COD и именем службы. Затем он последовательно устанавливает соединение (с помощью процедуры страницы) с точкой доступа, проверяя PIN-код. После сопоставления PIN-кода данные загружаются. После загрузки данных устройство ожидает подтверждения. Решение является ведущим и инициирует связь.
Я не контролирую медицинское устройство. Все, что я могу сделать, это запустить его и дождаться описанной выше процедуры (после измерения).
Приложение для Android:
Я начал с Пример чата Bluetooth на страницах разработчиков. Пока что я заменил UUID на 00001101-0000-1000-8000-00805f9b34fb
, чтобы использовать SPP, и установил в качестве имени службы соответствующее имя. Я могу подтвердить, что это кажется правильным, проверив службу с компьютера. Поскольку медицинское устройство - это то, которое запрашивает и инициирует связь, моя служба использует метод BluetoothServerSocket
и метод accept ()
, чтобы начать его прослушивание.
На страницах разработчиков я читал, что UUID должен совпадать между приложениями, пытающимися обмениваться данными. Поскольку я не могу установить UUID для медицинского устройства, я Мне интересно, будет ли это проблемой или достаточно того, что медицинское устройство использует профиль SP?
Если имя службы и UUID верны, и медицинское устройство действительно попытается подключиться к моей службе Bluetooth, которая прослушивает соединения, будет ли система Android предлагать мне ввести ПИН-код вручную, чтобы иметь возможность сопрягать устройства (поскольку на медицинском устройстве установлен ПИН-код)?
Я ничего не нашел в 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 .
Можно ли реализовать использование идентификаторов классов обслуживания в формате, отличном от UUID, на Android?
Можно ли управлять записью службы, зарегистрированной в базе данных обнаружения служб?
Можно ли каким-то образом реализовать прямую реализацию в отношении BlueZ , используя нативную разработку c / c ++?
/ Фредрик