es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo recibir un evento de solicitud de emparejamiento a través de dbus, glib?

Actualmente estoy desarrollando una aplicación Bluetooth con BlueZ.

Necesito recibir una solicitud de emparejamiento.
Utilizando la API de BlueZ DBus, he configurado mi agente en modo SinEntradaSalida, y he logrado hacer el primer emparejamiento con mi teléfono.

Sin embargo, si borro el dispositivo Linux (que utiliza mi aplicación de Bluetooth en desarrollo) de mi teléfono e intento volver a conectarlo, no puedo emparejarlos de nuevo.

He buscado ejemplos de código en Python que…
Desde la API de DBus de BlueZ, llaman al método RequestAuthorization para emparejar y tienen éxito, luego borran el dispositivo y vuelven a emparejarlo sin problemas.

Pero en el caso de una solicitud de emparejamiento del teléfono inteligente, creo que debo llamar al método RequestAuthorization CUANDO SE RECIBA ALGÚN EVENTO(S). Y no tengo idea de cómo hacer eso.

Conclusión: ¿Cómo puedo recibir un evento de solicitud de emparejamiento utilizando dbus y el bucle glib?

Ya he revisado
https://stackoverflow.com/questions/51403176/bluez-pairing-before-exchange

Aparentemente, gdbus es una combinación de dbus y glib.
Sin embargo, estoy utilizando dbus y glib por separado ya que puedo eliminar algunos códigos que no necesito.
Además, ahora creo que no tiene ninguna relación con borrar dispositivos de la lista.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en c, bluetooth, glib, bluez y emparejamiento, puedes obtener un evento de solicitud de emparejamiento utilizando dbus y el bucle de glib siguiendo estos pasos:

    1. Registra un controlador de señales para la señal “RequestConfirmation” en tu Agente de BlueZ. Esta señal se emite cuando se recibe una solicitud de emparejamiento desde el dispositivo remoto.
    2. En la función del controlador de señales, llama al método “RequestConfirmation” de tu Agente de BlueZ con el código de emparejamiento como parámetro. Puedes generar un número aleatorio de 6 dígitos como código de emparejamiento.

    3. Después de que el método “RequestConfirmation” regrese, verifica si el emparejamiento fue exitoso revisando el parámetro “confirmed” de la tupla devuelta.

    4. Si el emparejamiento fue exitoso, guarda la información del dispositivo emparejado en tu lista de dispositivos.

    5. Si el emparejamiento no fue exitoso, maneja el error adecuadamente.

    6. En el bucle principal de tu aplicación, utiliza la función “g_dbus_connection_add_filter” para agregar un filtro que escuche cambios en la interfaz “org.bluez.Device1” y en la propiedad “Connected”. Esto permitirá que tu aplicación detecte cuando un dispositivo se desconecta.

    7. Cuando un dispositivo se desconecte, elimina la información del dispositivo de tu lista de dispositivos.

    Siguiendo estos pasos, tu aplicación debería ser capaz de manejar solicitudes de emparejamiento y volver a conectar dispositivos previamente emparejados.

Comments are closed.