Modos de funcionamiento

Modos de funcionamiento

En el apartado anterior quedó pendiente la exposición de los distintos modos de funcionamiento, elemento configurable en el segundo parámetro de cwiid_connect(&bdaddr, 0).

Las opciones posibles son las siguientes:

  • CWIID_FLAG_MESG_IFC, activa el interfaz basado en mensajes.
  • CWIID_FLAG_CONTINUOUS, activa el envío continuo de mensajes de estado.
  • CWIID_FLAG_REPEAT_BTN, envía un mensaje por cada botón actuado.
  • CWIID_NONBLOCK, convierte la función cwiid_get_mesg en no bloqueante.

Estos modos son combinables mediante operación lógica OR.

A continuación se explicarán dos formas de recibir mensajes: mediante callback, mediante espera en bucle y mediante polling.

 

Recepción mediante callback

Usando este método se disparará una función de callback cada vez que el Wiimote considere que hay información que transmitir.

La función cwiid_open deberá configurarse con CWIID_FLAG_MESG_IFC.

También habrá que establecer una función de callback que deberá coincidir con la siguiente declaración:

void cwiid_callback(cwiid_wiimote_t *wiimote, int mesg_count, union cwiid_mesg mesg[], struct timespec *timestamp);

Siendo:

  • wiimote el handler del Wiimote que ha disparado el evento.
  • mesg_count el número de mensajes recibidos.
  • mesg el array con los mensajes recibidos.
  • timestamp el instante de tiempo en que se recibió el evento.

 

Recepción mediante espera en bucle

En este caso deberá ser el propio cliente el que compruebe si el mando tiene algún mensaje pendiente que enviar.

La función cwiid_open deberá configurarse con CWIID_FLAG_MESG_IFC.

Una vez conectado el mando habrá que ejecutar en bucle cwiid_get_mesg. Por defecto su comportamiento es bloqueante, el programa se detendrá hasta recibir un nuevo mensaje, pero si se combina CWIID_FLAG_MESG_IFC con CWIID_FLAT_NONBLOCK dejará de serlo y generará un error cuando no encuentre mensaje en lugar de bloquearse.

Cada ejecución de cwiid_get_mesg obtendrá un mensaje de la lista de mensajes pendientes empezando por el más antiguo hasta el más reciente.

 

Recepción mediante polling

Con este método será el usuario el que solicite el estado del Wiimote.

No es necesario activar la opción CWIID_FLAG_MESG_IFC ya que no se usa la interfaz de mensajes.

Tras conectar el mando habrá que ejecutar la función cwiid_get_status para obtener el estado actual del Wiimote.

Reflexiona

¿Por qué hay que usar la operación OR lógica para combinar opciones como modos de funcionamiento o mensajes a recibir?

Obra publicada con Licencia Creative Commons Reconocimiento 3.0