Bluetooth SPP entre Android y otras preguntas de dispositivos, UUID y PIN

Estoy tratando de implementar una aplicación de Android para recibir datos de un dispositivo médico, pero no puedo obtener a través del proceso de descubrimiento y obtener el teléfono y el dispositivo emparejado o conectado entre sí.

Describir el dispositivo médico: El dispositivo utiliza Service Discovery Protocol (SDP) y Serial Port Profile (SPP). Comienza un procedimiento de búsqueda para descubrir (hasta 10) puntos de acceso circundantes con el Filtro COD y el Nombre del Servicio correspondientes. A continuación, establece secuencialmente una conexión (mediante Procedimiento de página) con el punto de acceso comprobando el PIN. Una vez coincidido el PIN, se cargan los datos. Al cargar datos, el dispositivo espera un reconocimiento. El decice es el maestro y inicia la comunicación.

No tengo control sobre el dispositivo médico. Todo lo que puedo hacer es iniciarlo y esperar el procedimiento descrito anteriormente (después de una medición).

La aplicación de Android: Comencé desde el ejemplo de chat de Bluetooth en las páginas de desarrollador. Hasta ahora he reemplazado el UUID con 00001101-0000-1000-8000-00805f9b34fb para usar SPP y establecer el nombre del servicio con el nombre apropiado. Puedo confirmar esto parece correcto a través de la inspección del servicio desde una computadora. Dado que el dispositivo médico es el que inquirye e inicia la comunicación, mi servicio utiliza un método BluetoothServerSocket y el método accept() para comenzar a escucharlo.

  1. En las páginas de desarrollador he leído que UUID debe coincidir entre las aplicaciones que intentan comunicarse. Puesto que no puedo fijar cualquier UUID para el dispositivo médico me pregunto si esto va a ser un problema o si es bastante que el dispositivo médico está utilizando el perfil del SP?

  2. Si el nombre del servicio y el UUID son correctos y el dispositivo médico realmente intenta conectarse a mi servicio Bluetooth que está escuchando conexiones, ¿el sistema Android me pediría que introdujera el PIN manualmente para poder emparejar los dispositivos (ya que el dispositivo médico Tiene un PIN predefinido)?

  3. No he encontrado nada en la API de SDK de Android que me permite establecer un PIN para mi servicio Bluetooth (en caso de que sea allí donde falla), ¿es posible?

He leído que normalmente el PIN es generado por el sistema hoy en día y una confirmación de usuario es la única cosa necesaria. Supongo que no en mi sistema, ya que el dispositivo es un poco mayor.

Me gustaría mucho si te gustaría compartir algunos conocimientos, sugerencias, conjeturas de cualquier cosa relacionada con lo que he descrito anteriormente!

Gracias de antemano, Fredrik


EDITAR:

Ahora tengo el dispositivo emparejado con una caja de bluegiga y se comunican correctamente. Ahora estoy buscando los criterios para cumplir con el dispositivo de presión arterial para conectar a mi teléfono. Puedo inspeccionar, desde un ordenador Linux ( sdptool search SP en un terminal), el servicio Bluetooth proporcionado por el bluegiga y compararlo con el servicio Bluetooth que presento en el Android. Estos valores son lo que obtengo:

~ $ Sdptool búsqueda SP

Preguntando

Buscando SP en 8C: 71: F8: E5: XX: XX. . .

Nombre del Servicio: 1808130054

Service RecHandle: 0x10003

Lista de ID de la clase de servicio:

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

Lista de descriptor de protocolo:

"L2CAP" (0x0100)

"RFCOMM" (0x0003)

Canal: 13

'

Seaching para SP el 00: 07: 80: 88: XX: XX. . .

Nombre del Servicio: 1808130054

Descripción del servicio: 1808130054

Service RecHandle: 0x10005

Lista de ID de la clase de servicio:

"Puerto serie" (0x1101)

Lista de descriptor de protocolo:

"L2CAP" (0x0100)

"RFCOMM" (0x0003)

Canal: 12

Idioma Base Attr Lista:

Code_ISO639: 0x656e

Enconding: 0x6a

Base_offset: 0x100

El primer dispositivo encontrado es el teléfono (mac = 8C: 71 … Google Nexus S) y el segundo (mac = 00: 07 …) es el bluegiga . Observo que no hay descripción del servicio en el dispositivo Android. Creo que la diferencia más importante está en la Lista de ID de la clase de servicio. UUID 128 en el Android pero un formato totalmente diferente que describe esto en el bluegiga .

  1. ¿Es posible implementar el uso de identificadores de clase de servicio con otro formato que UUID en Android?

  2. ¿Se puede manipular el registro de servicio registrado en el DB de descubrimiento de servicio?

  3. ¿Sería posible implementar de alguna manera hacia el BlueZ directamente, usando el desarrollo nativo c / c ++?

Fredrik

Si puede proporcionar el nombre / enlace al dispositivo médico (si es un dispositivo comercial) podría ayudar a leer su guía para adivinar más sobre lo que podría estar pasando. Aqui hay algunas sugerencias :

  1. Además del UUID de Puerto Serial, cada servicio a través del SPP puede tener un UUID específico personalizado, por ejemplo el dispositivo médico podría buscar el servicio con el cual es compatible usando este UUID específico de la costumbre.
    Si el dispositivo médico se conecta actualmente a un PC o algún otro punto de acceso con éxito y transfiere datos, podría intentar leer el registro SDP de ese dispositivo y determinar qué UUID específico además del SPU UUID está en uso, si lo hay, y usar el Mismo en su aplicación también.

  2. Si el dispositivo médico no puede encontrar su teléfono / aplicación, podría ser porque no es detectable. El dispositivo Android por defecto no es detectable aunque sea un servidor, solo será conectable y no detectable, puede intentar hacerlo detectable programáticamente o por medio de la configuración y ver si el dispositivo médico puede encontrar su dispositivo. Vea aquí – Habilitación de Discoverability en Android

  3. Para el emparejamiento de PIN, el dispositivo android debe iniciar el proceso de emparejamiento cuando un dispositivo no emparejado intenta conectarse a él, puede intentarlo después de pasar por las recomendaciones (1) y (2), el emparejamiento de PIN se utiliza si uno de los dispositivos está Antes de la versión Bluetooth 2.1, incluso con los dispositivos más nuevos una contraseña de 6 dígitos con alguna intervención del usuario / confirmación será requerido en el teléfono para permitir el emparejamiento (su es apenas una buena política de la seguridad para no permitir que esto suceda automáticamente sin usuario Intervención), es de esperar que el emparejamiento sólo será necesario la primera vez que una conexión sucede, más tarde no requerirá ninguna intervención del usuario para las conexiones posteriores.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.