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