Está en la página 1de 28

Aplicaciones de controlador Bluetooth en Robtica.

CAPTULO 3: EL WII REMOTE


3.1. INTRODUCCIN
En este captulo desarrollaremos los entresijos del elemento central de este trabajo.

Figura 3.1: El Wiimote(Fte.: Nintendo)

El Wii Remote, informalmente conocido como Wiimote, es el principal dispositivo de entrada de la consola Wii de Nintendo. Es un dispositivo sin cables, que usa la tecnologa estndar Bluetooth para comunicarse con la Wii. El Wiimote parte de una concepcin radicalmente distinta a los dispositivos que hemos venido explicando en el apartado anterior. Con forma de mando de television, el Wiimote incorpora acelermetros que pueden medir el movimiento que est produciendo el jugador en l. Tambin puede interaccionar con una barra de infrarrojos que aade la funcionalidad de puntero. Podemos conectarle otros dispositivos al mando, que le aaden versatilidad, para jugar a juegos que no requieran la capacidad de sentir el movimiento: un nunchuk y un controlador clsico. Por ltimo, incorpora como no, multitud de botones, y el dispositivo que marc un antes y un despus en la evolucin de los videojuegos, el D-Pad. 1

Aplicaciones de controlador Bluetooth en Robtica.

3.2. OBJETIVO: WIIMOTE


Todo indica que el desarrollo del Wii Remote comenz en torno al 2001, coincidiendo con el desarrollo de la nueva consola Wii. En este ao, Nintendo solicit la licencia de algunas patentes basadas en sensores de movimientos a Gyration Inc.[24], una compaa que produce ratones de PC inalmbricos con sensores de movimiento. As mismo, Nintendo insta a la compaa a crear un controlador para una sola mano para ellos, que eventualmente desarrollara el Gyropod' concept, un gamepad ms tradicional que permita control de movimiento. Llegados a este punto, Gyration Inc. trabaja junto a la firma Bridge Design para trasladar a Nintendo sus ideas. Como requerimiento tenan que preservar la consola Game Cube de Nintendo que todava se encontraba en el mercado. Se experiment con distintos modelos, esquemas, e incluso con encuestas a jugadores[1]. A finales de 2004 Nintendo alcanz lo que pretenda, un controlador menos tradicional, con la forma habitual de un mando de televisiny diseado junto con otro dispositivo, el Nunchuk. El mando tena sensores de movimiento, puntero infrarrojo,... A finales de 2005 todos estaba preparado para la produccin masiva del controlador[2]. Durante el desarrollo del Wii Remote, el diseador de videojuegos, Shigeru Miyamoto acudi a telfonos mviles y controladores de navegacin automtica para inspirarse[6]. Otro prototipo reuna las caractersticas de un stick analgico y un pantalla tctil, pero la idea fue desechada debido a la inminente salida de su consola portable, que tendra la misma filosofa[5]. Algunas fuentes aseguran que el Wiimote fue originalmente desarrollado para la Nintendo GameCube. Sin embargo, parece que el controlador quera ver la luz junto a un nuevo sistema, de forma que se creara una Revolucin en el mundo de los videojuegos.

3.3. DISEO
El Wiimote es un diseo de control remoto de una sola mano, algo novedoso con respecto a los controladores tradicionales de las consolas previas. De esta forma, la sensibilidad de movimiento se hace ms intuitiva, como control remoto encaja perfectamente. Con este novedoso diseo se ayuda a uno de los objetivos de Nintendo con la salida de la Wii: acercar el mundo de los videojuegos a un perfil que no responde al clsico jugador. 2

Aplicaciones de controlador Bluetooth en Robtica.

El controlador mide 148 mm de largo, 36.2 mm de ancho y 30.8 mm de alto[3]:

Figura 3.2: Wiimote(Fte.: Nintendo)

El Wii Remote tiene un nombre de modelo genrico, usado por Nintendo, RVL-003, una referencia al nombre en clave del proyecto Wii: Revolution. El mando se comunica con la consola sin usar cables mediante una interfaz radio Bluetooth de corto alcance, de forma que es posible operar con hasta 4 controladores a una distancia de hasta 10 metros de la consola. Puede usarse ponindolo de forma horizontal y usarlo como un controlador ms clsico. Es posible incluso jugar con un mando en cada mano por ejemplo para juegos de disparo. A raz de la E3 2006 (congreso mundial de videojuegos) se realizaron algunos cambios en el Wiimote sobre el diseo previo presentado. El controlador se hizo ms alargado y se aadi un altavoz, en la parte central. Tambin se cambi la nomenclatura de la botonera y se redise el puerto de expansin.

3.4. DENTRO DEL WIIMOTE


El dispositivo se construye en torno al System-on-a-chip bluetooth Broadcom BCM2042[25], que adems de gestionar la comunicacin, contiene mltiples perifricos que proporcionan los datos, as como un puerto de expansin para aadir elementos. El Wiimote usa el protocolo estndar de bluetooth HID para comunicarse con el sistema final, el cual se basa directamente en el estndar HID de USB. De esta forma, de cara a cualquier sistema final Bluetooth, el Wiimote se comportar como un dispositivo de 3

Aplicaciones de controlador Bluetooth en Robtica.

entrada estndar. Sin embargo el mando no hace uso de los tipos de datos y descriptores HID estndar, y slo describe el formato y longitud. En realidad, el Wiimote usa un conjunto de operaciones bastante complejo, transmitidos a travs de los reports HID de salida (HID Output reports). De la misma forma, devuelve diferentes paquetes de datos a travs de reports de entrada (Input Reports), que contienen datos de sus perifricos. Recordemos que nos encontramos ante un problema de ingeniera inversa: no tenemos que disear algo, sino que tenemos algo ya diseado que puede sernos de utilidad, pero del que hay que conocer sus entresijos.

3.4.1. Comunicacin bluetooth con el Wiimote


Como hemos comentado, el Wii Remote es un dispositivo Bluetooth. Aunque posteriormente haremos un desarrollo de los aspectos que ms nos interesan de esta tecnologa, a continuacin se introducen los conceptos bsicos relacionados con ella. Para iniciar la comunicacin hemos de pulsar simultaneamente los botones 1 y 2, o bien pulsar el botn SYNC situado en la parte trasera del mando, junto a las baterias.

Figura 3.3: Acceso al botn de sincronizacin del Wiimote

En este momento empiezan a parpadear las luces frontales y, siempre que haya un host en el alcance, conectado, mediante el protocolo Bluetooth SDP (Service Discovery Protocol), el Wiimote 4

Aplicaciones de controlador Bluetooth en Robtica.

devuelve gran cantidad de informacin que lo identifica respecto a otros dispositivos Bluetooth que pudieran estar conectados al host. Por ejemplo reporta la siguiente informacin:

Nombre dispositivo Nintendo RVL-CNT-01

Vendor ID 0x057e

Product ID 0x0306

Tabla I: Parmetros del controlador

El Wiimote no parece requerir ninguna de las caractersticas de autentificacin y encriptacin propias del estndar Bluetooth.

3.4.2. Interfaz HID en el Wiimote


HID es un protocolo para dispositivos de interfaz humana (Human Interface Device). Define protocolos, procedimientos y caractersticas para ser usadas por dispositivos Bluetooth tales como teclados, punteros, dispositivos de juego. El perfil HID de Bluetooth usa la definicin de dispositivo HID de USB (Universal Serial Bus) para apoyarse en los drivers existentes para ellos. El perfil HID describe como usar el protocolo HID de USB para descubrir las caractersticas de los dispositivos HID y cmo Bluetooth puede soportar los servicios HID apoyndose en la capa L2CAP (control de enlace lgico) de Bluetooth. Aunque posteriormente se desarrollarn algunos aspectos clave de forma ms exhaustiva, a continuacin explicamos algunos conceptos necesarios para entender el funcionamiento del Wiimote que ahora nos ocupa. El estndar HID permite a los dispositivos ser autodescritos, usando un bloque descriptor HID. Este bloque incluye una enumeracin de reports que el dispositivo entiende. Un nmero de report puede ser visto como un nmero de puerto asignado a un servicio particular. los Sin embargo los reports son unidireccionales, de forma que descriptores HID listan la direccin de puerto, si es de 5

Aplicaciones de controlador Bluetooth en Robtica.

entrada o salida, y el tamao de la carga til para cada puerto. Como todos los dispositivos bluetooth HID, el Wiimote reporta su bloque descriptor HID cuando sea solicitado a travs del protocolo SDP. Hay que tener en cuenta que un InputReport se enva en direccin Wiimote-host, de forma que los OutputReports se envan desde el host al Wiimote. Veamos un ejemplo de report y as definir la notacin que usaremos en este apartado: (a1) 30 00 00 Representaremos entre parntesis el nmero de identificacin del report, y la carga til tal y como se describe en la secciones 7.3 y 7.4 de las especificaciones HID de BT[26]. Cada byte se escribe en hexadecimal, sin el prefijo 0x y separado por espacios. As en el ejemplo anterior (0xa1) se refiere al report ID, en este caso un paquete de datos de entrada, referido al canal 0x30, con una carga til, 0x00 0x00. En apartados siguientes se desarrollarn los perifricos que componen el mando y sus correspondiente reports asociados, aunque en los anexos se puede encontrar una lista completa de comandos. En general, podemos observar como desde el host se envan comandos de control y de peticin de informacin. El mando responde con comandos donde enva la informacin asociada al elemento solicitado.

3.4.2.1 Informacin comn de los Output Reports


El primer byte significado comn: de la mayora de estos comandos tiene un

-El bit 0 del primer byte (0x01) controla la vibracin del mando. -El bit 2 del mismo (0x04) es la bandera que activa o desactiva la caracterstica especfica asociada al Output Report, es decir, si nos referimos al altavoz del mando, si lo activamos en el Output Report asociado, activaremos el altavoz. Veamos un ejemplo para aclarar este concepto: si enviamos el siguiente report: (52) 19 04 6

Aplicaciones de controlador Bluetooth en Robtica.

Silenciaremos (con 0x04) el altavoz (al que se refiere el Report 0x19). Lo que sigue lo desilenciar: (52) 19 00 Todos los comportamiento: Output Reports siguientes tienen el mismo

(0x12), modo de envo de datos, (0x13), habilitacin del sensor de infrarrojos, (0x14), habilitacin del altavoz, (0x19), silenciar el altavoz. Pasemos ahora a estudiar cuales son los elementos y capacidades del mando a los que nos referimos y que lo hacen tan atractivo para un desarrollador de aplicaciones.

3.4.3. El chip Broadcom BCM2042


El verdadero cerebro del Wiimote.

Fig. 3.4: El Chip Broadcom 2042(Fte.: Broadcom)

El BCM2042 es un dispositivo que, en un simple chip, integra el perfil completo, aplicaciones y la torre de protocos Bluetooth, de forma que cumple completamente con las especificaciones para dispositivos de interfaz humana del BT SIG (Special Interest Group de Bluetooth), siendo compatible con la versin 2.0, incluyendo las mejoras en el salto de frecuencia de forma adaptativa y conexin rpida, esenciales para aplicaciones con teclado y ratn en Pcs. En los anexos se incluye el DataSheet de este dispositivo, aunque las caractersticas principales que resumen lo anterior son: -Un dispositivo single-chip Bluetooth con el perfil completo de Human Interface Device y la pila de protocolos Bluetooth. -Un procesador 8051 y memorias RAM/ROM on-board. -Una solucin de coste ptimo para ratones y teclados que logra el menor coste a travs de la integracin de componentes externos. 7

Aplicaciones de controlador Bluetooth en Robtica.

A continuacin se muestra el diagrama de bloques que integran el chip:

Fig. 3.5: Diagrama de bloques del BCM2042(Fte.: Broadcom)

3.4.4. Recepcin de datos


El Wiimote tiene distintos modos de reporte de datos. Cada una de ellos combina el envo del estado ciertas caractersticas del mando, junto con datos de perifricos. Se envan al host en la forma de distintos reports, cada uno de ellos identificado con su report ID. Los datos y el modo son empaquetados por los propios perifricos, lo que hace el controlador del Wiimote es agrupar todos los bytes y mandarlos al host. Desde el host se puede reporte, de la siguinte forma: (52) 12 TT MM 0x12 se refiere al report asociado al cambio de modo de envo de datos. En el siguiente byte, 0xTT, el bit 2 especifica si se desea envo continuo. Esto es, si este byte los ponemos a 0x04, el envo de dichos datos se producir independientemente de si ha habido cambio en los perifricos o no. De otra forma, el mando nos enviar output reports slo cuando los datos hayan cambiado. solicitar el cambio de modo de

Aplicaciones de controlador Bluetooth en Robtica.

El byte MM especifica el modo propiamente dicho. El modo se especifica por el identificador del output report a travs del cual se recibir. Veamos un ejemplo que aclare todo esto: (52) 12 00 33 Vemos que 0x12 es identificador de report de cambio de modo de envo de datos. Por otro lado, solicitamos un envo continuo 0x00. El byte que nos falta se ha ajustado a 0x33, de esta forma los datos llegarn a travs del Report de entrada 0x33. Tras el encendido, los datos nos llegan por defecto por el report 0x30. Por otro lado, despus de una conexin o desconexin en el puerto de expansin, se deshabilita el reporte de datos y el modo debe resetearse antes de que nuevos datos lleguen. Veamos todos los tipos de reports de entrada que transmiten datos del mando, aunque despus analizaremos significan estos datos segn el perifrico a que se refieran: nos qu

-0x30, Botones: Este modo devuelve los datos de la botonera del Wiimote, de la siguiente forma: (a1) 30 BB BB donde 30 es el ID de report, y BB son bits de la botonera. -0x31, Botones y acelermetros: Este valores de botonera y los acelermetros: (a1) 31 BB BB AA AA AA donde BB son los datos de botones y AA de los acelermetros. -0x32, Botones con 8 bytes de extensin: Junto a los datos de botones, se reciben datos del controlador del puerto de expansin conectado: (a1) 32 BB BB EE EE EE EE EE EE EE EE donde BB son los datos de botones y EE datos del controlador de extensin conectado actualmente al puerto de expansin. -0x33, Botones, acelermetros y 12 bytes de Infrarrojos: A los datos de botonera y acelermetros, se aaden 12 bytes de la cmara de IR: 9 modo devuelve los

Aplicaciones de controlador Bluetooth en Robtica.

10

(a1) 33 BB BB AA AA AA II II II II II II II II II II II II BB son los datos de botones, AA de los acelermetros e II son bytes de la cmara IR situada en el Wiimote. -0x34, Botones y 19 bytes de extensin: Similar al modo 0x32, pero con ms informacin destinada al controlador situado en el puerto de expansin: (a1) 34 BB BB EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE -0x35, Botones, acelermetros y 16 bytes de expansin: De la siguiente forma: (a1) 35 BB BB AA AA AA EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE con el mismo significado que los anteriores. -0x36, Botones con 10 bytes de IR y 9 de controlador externo: Este modo devuelve datos de los botones, junto con datos de la cmara de infrarrojos y 9 bytes del controlador conectado al puerto de expansin del Wiimote: (a1) 36 BB BB II II II II II II II II II II EE EE EE EE EE EE EE EE EE -0x37, Botones, acelermetros con 10 bytes de IR y 6 bytes de extensin: Similar al anterior pero quitamos carga de controlador externo para poder transmitir datos de acelermetros: (a1) 37 BB BB AA AA AA II II II II II II II II II II EE EE EE EE EE EE BB, botonera, AA, acelermetros, II, infrarrojos, EE, puerto de expansin. -0x3d, 21 bytes de extensin: Este modo devuelve slo datos del dispositivo conectado al puerto de expansin del Wiimo, de la siguiente forma: (a1) 37 EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE -0x3e/0x3f, Datos de botones, acelermetros y 36 bytes de IR entremezclados: Estos dos reports son equivalentes y devuelven alternativamente datos. Los datos se entremezclan, de forma que 10

Aplicaciones de controlador Bluetooth en Robtica.

11

la velocidad es la mitad que la de otros modos (son necesarios 2 reports). Sin embargo se devuelve mucha ms informacin: (a1) 3e BB BB AA II II II II II II II II II II II II II II II II II II (a1) 3f BB BB AA II II II II II II II II II II II II II II II II II II BB son los datos de botones, que se especificarn en el apartado sobre la botonera. AA son los datos de acelermetros, en el formato especfico que se describe en el apartado sobre acelermetros. Finalmente se reciben 36 bytes de la cmara IR.

3.4.5. Memoria y registros


El Wiimote incluye una memoria EEPROM, parte de la cual es accesible al usuario para almacenar datos en ella. En esta parte accesible se guardan datos de calibracin, as como los datos de Mii[9]. Adicionalmente, muchos perifricos del mando tienen registros que son accesibles a travs de una porcin del espacio de memoria. Para acceder a ambos, memoria y registros, se usan los mismos reports, en los que una bandera sirve para discernir entre ellos.

3.4.5.1. Leyendo
Para leer datos de memoria y registros, debemos solicitarlo enviando el siguiente Output Report: (52) 17 MM FF FF FF SS SS El espacio lectura de los leer. report que se usa es el 0x17. El bit 2 de MM selecciona el de direcciones, sto es, si se borra este bit se har una de la EEPROM, mientras que activndolo hacemos una lectura registros. FF y SS son el offset y el tamao en bytes a hemos mencionado, como en otros reports, se directo de la bandera de vibracin, de forma al estado actual de vibracin, para que no se envo del comando.

Aunque no lo incluye el control que se debe ajustar vea afectado por el

Los datos leidos se devuelven a travs del Input Report 0x21 de la siguiente forma: (a1) 21 BB BB SE FF FF DD DD DD DD DD DD DD DD DD DD DD DD DD 11

Aplicaciones de controlador Bluetooth en Robtica.

12

DD DD DD BB es el estado de los botones, tal y como veremos. El motivo para recibir aqu el estado de los botones es el siguiente: mientras se realiza la lectura de memoria, el envo de otros datos se suspende temporalmente, salvo lo relacionado con la botonera que se hace de esta forma. FF es el offset del primer byte de datos devueltos. E es una bandera de error, donde algunos valores conocidos son 0 para no error, 7 cuando se intenta escribir en un registro de solo lectura y 8 cuando se pretende leer a una memoria que no existe. S es el tamao en bytes (menos uno) del paquete de datos. El valor habitual es 0xf (16 bytes), menos en el ltimo, que ser inferior si el tamao de datos solicitado no es mltiplo de 16. Los bytes DD son los datos propiamente dichos, rellenados con cero si es necesario. Si se requieren ms de 16 bytes, se recibirn mltiples paquetes.

3.4.5.2. Escribiendo
Para escribir datos, los comandos se envan al Output Report 0x16, de la siguiente forma: (52) 16 MM FF FF FF SS DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD El significado es el mismo, salvo que en este caso, el tamao mximo ser de 16 bytes.

3.4.5.3. Memoria EEPROM


Hay un chip de memoria EEPROM de 128kbit en el Wiimote[5]. Parte del contenido de esta memoria incluye cdigo para el microcotrolador, as como una seccin genrica que puede ser leida y escrita por el sistema final. Esta seccin tiene 1700bytes y parte es usada para almacenar datos Mii[6]. La memoria puede ser accedida desde las direcciones 0x0000-0x16FF en el espacio virtual de memoria del Wiimote, aunque la posicin real en la EEPROM es 0x0070-0x176F. El microcontrolador BCM2042 tambin tiene una memoria ROM de 108kbits para almacenar firmware. De esta forma, en la EEPROM la nica informacin asociada al micro que podemos encontrar, son actualizaciones para el firmware. De hecho en la web de Broadcom encontramos: el diseo basado en ROM elimina la necesidad de 12

Aplicaciones de controlador Bluetooth en Robtica.

13

memorias externas de tipo flash, aunque se ofrece la posibilidad de aadirlas para soportar nuevas caractersticas de cara a desarrolladores. En un Wiimote virgen, que no ha se ha comunicado nunca con un sistema final, la mayor parte de la memoria la encontraremos vaca, aunque los primeros bytes contienen lo que sigue:
0000: A1 AA 8B 99 AE 9E 78 30 A7 74 D3 000B: A1 AA 8B 99 AE 9E 78 30 A7 74 D3 0016: 82 82 82 15 9C 9C 9E 38 40 3E 0020: 82 82 82 15 9C 9C 9E 38 40 3E

Aunque no est del todo claro por qu se repiten las secuencias, se sabe que el ltimo bloque se refiere a datos de calibracin, mientras que el otro tiene propsitos de back-up en el caso de que hagamos actualizaciones de firmware. En concreto, los bytes que empiezan en 0x0016 y 0x0020 guardan los valores zero de los acelermetros. Hay que decir que muchos de los valores anteriores son distintos de un Wiimote a otro[1]. Los rangos conocidos en la memoria son: Comienzo 0x0000 0x002A 0x0FCA 0x12BA 0x15AA 0x16D0 Fin 0x0029 0x0FC9 0x12B9 0x15A9 0x16CF 0x16FF Longitud 0x002A 0x0FA0 0x02F0 0x02F0 0x0126 0x0030 Uso Valores de calibracin Datos de usuario Datos Mii (bloque 1) Datos Mii (bloque 2) Desconocido/sin uso Desconocido/sin uso

Tabla II: Rangos de direcciones de la memoria EEPROM

3.4.5.4. Registros de control

13

Aplicaciones de controlador Bluetooth en Robtica.

14

El Wiimote tiene varios espacios de memoria para registros que estn asociados a distintos perifricos, incluidos el altavoz, controladores de puerto de expansin y cmara de IR. En general, el primer byte de direccin especifica el perifrico que ser accedido y los 16 bits de orden menor especifican el registro concreto de dicho perifrico. Debido de nuevo al problema de ingeniera inversa en el que nos encontramos, el resto de bits tienen significado desconocido[1]. La lista siguiente: del espacio de memoria de los registros es el

Comienzo 0xA20000 0xA40000 0xB00000

Fin 0xA20009 0xA400FF 0xB00033

Uso Ajustes del altavoz Ajustes control externo Ajustes sensor IR

Tabla III: Espacio de memoria de los registros

3.4.6. Perifricos de entrada del mando


El Wiimote tiene 2 caractersticas principales de entrada, que son controladas directamente a travs del chip Broadcom: un acelermetro de 3 ejes y 11 botones en total. Adicionalmente, tambin tiene una cmara sensora de IR con un procesador de tracking, as como un puerto de expansin que permite que dispositivos externos puedan conectarse, el Nunchuk y el controlador clsico. Desarrollemos todos ellos a continuacin.

3.4.6.1. Botones
En el Wiimote existen en total 12 botones, 11 de ellos en la parte frontal y un gatillo en la trasera. Cuatro de ellos corresponden a una cruceta de direccin y el resto con funciones adicionales. El botn de encendido es especial ya que es tratado de forma distinta por el Wiimote. El resto de botones son accesibles de forma independiente a travs de una mscara que es transmitida en primer lugar en la mayora de Reports de entrada. De esta forma, 14

Aplicaciones de controlador Bluetooth en Robtica.

15

si un botn es pulsado, el bit asociado est activo o si no a 0. Por defecto, el estado de la botonera lo recibiremos a travs del modo de reporte de datos dado por 0x30, y lo haremos slo cuando el estado de alguno de los botones cambie. Por ejemplo, si se pulsa el botn A, se recibe el siguiente paquete HID: (a1) 30 00 08: en este caso 30h se refiere al HID Report asociado al envo de paquete con slo estado de botones, los otros 2 Bytes no son ms que dicho estado. En este caso vemos que se ha pulsado un botn, ya que aparece el bit tercero a '1'. Los botones normales son: A, B (gatillo), cruceta de direccin con 4 botones, +, -, Home, 1 y 2. Su estado entonces lo podemos leer con una mscara de bits de 2 bytes, de la siguiente forma: Bit 0 1 2 3 4 5 6 7 Mscara 0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80 Primer byte Izquierda (D-Pad) Derecha (D-Pad) Abajo (D-Pad) Arriba (D-Pad) + Otros usos Otros usos Desconocido Segundo byte 2 1 B A Otros usos Otros usos Home

Tabla IV: Posicin del estado de botones

En cuanto al botn Power, cuando el Wiimote est apagado, si se pulsa el mismo, se intenta despertar la Wii que se ha sincronizado con l. De momento este mecanismo es desconocido. Si el Wiimote est encendido y conectado al sistema final, si se mantiene pulsado el botn de encendido durante unos segundos el Wiimote se apaga y solicita desconexin al sistema final, que usa este evento para apagarse.

15

Aplicaciones de controlador Bluetooth en Robtica.

16

3.4.6.2. Sensores de movimiento


Este es el detalle ms novedoso e controles del Wiimote. El anlisis gracias a un acelermetro lineal de botn A (terico centro de gravedad del innovador respecto a otros de movimiento se realiza 3 ejes, situados cerca del mando).

Fig. 3.6: Sistema de referencia asociado al Wiimote

El circuito que incorpora los acelermetros es el ADXL330 de Analog Devices[7]. Los acelermetros miden la aceleracin en un rango de -3g a 3g, donde g es el valor de la gravedad, con una sensibilidad del 10%. Para efectuar la medida, en el mando hay una estructura como la que se ilustra en la siguiente figura:

Fig. 3.7: Funcionamiento de los acelermetros

16

Aplicaciones de controlador Bluetooth en Robtica.

17

Vemos que tenemos un trozo de silicio, sujeto a un extremo y colocado entre el campo elctrico ejercido por dos capacidades. El movimiento se transmite cuando se desplaza el mando, ya que la barra de silicio queda ms cerca de alguno de los capacitores, lo que hace que el campo elctrico cambie, el cul es detectado. ste es convertido a voltage. Si el mando est en cada libre, nos mandar un report con aceleracin cero. En el resto de casos, nos mandar una aceleracin positiva. As por ejemplo, si lo colocamos horizontalmente sobre una mesa, recibiremos una aceleracin en Z igual al valor de la gravedad (9,8 m/s2). Estos valores de aceleracin nos permiten hallar la inclinacin, posicin,... Es importante considerar el estado inicial de los acelermetros, esto es, medida inicial que dan en estado de reposo y sobre la que se ajustan el resto de valores. Para ello es importante calibrar el mando antes de comenzar a usarlo. Bsicamente hay que seguir los siguientes pasos: -Poner el mando horizontalmente con el batn A arriba. Se obtienen los siguientes valores: ( x1 , y1 , z1 ) (1) hacia

-Mando vertical, con el sensor IR hacia abajo. Se obtienen:

( x2 , y2 , z2 )

(2)

-De lado, de forma que el lateral izquierdo mira hacia arriba:

( x3 , y3 , z3 )

(3)

Con cada paso lo que se consigue es medir el valor g en un eje, y el valor de equilibrio en los otros dos. La posicin cero se obtiene en cada eje segn (4),(5)y(6).

x0 =

x1 + x2 2

(4)

y0 =

y1 + y3 2

(5)

z0 =
Por tanto, sea

z 2 + z3 2

(6)

r r = { x, y , z}

el vector de datos en bruto que 17

Aplicaciones de controlador Bluetooth en Robtica.

18

r recibimos del mando, r = { x0 , y0 , z0 } el vector de datos que se corresponden con una fuerza nula en cada eje. Los factores de escala necesarios vienen dados por (7),(8)y(9).

kx =

1 x3 x0
1 y 2 y0

(7)

ky =

(8)

kz =

1 z1 z0

(9)

Una vez aplicado el factor de escala al eje correpondiente, r r r deberamos obtener respectivamente k , j e i , como vectores normalizados de aceleraciones en las posiciones de calibracin anteriormente definidas, dado que, tras el escalado, un valor unitario se corresponder con una fuerza g ejercida en esa direccin. El mando puede enviar la informacin asociada a los acelermetros, de distintas formas (junto a la informacin de distintos perifricos): --Reporte de acelermetro normal: En casi todos los modos que incluyen datos de acelermetro, los datos se reciben en 3 bytes de la siguiente forma: (a1) RR BB BB XX YY ZZ donde XX, YY y ZZ son los datos sin signo de la aceleracin en cada uno de los ejes, donde un valor de aceleracin cero equivale a 0x80. Un ejemplo podra ser: (a1) 31 40 20 86 8a a5: como se puede observar en los anexos, 31h se refiere al HID Report asociado al envo de paquete con estado de botones ms informacin de acelermetros. En concreto, los bytes 0x86 se refieren a la medida en el eje X, 0x8a en el eje Y, y 0xa5 para el eje Z. Los primeros bytes (0x40 y 0x20) del paquete se refieren al estado de los botones.

18

Aplicaciones de controlador Bluetooth en Robtica.

19

--Datos de acelermetro entremezclados: El modo de envo 0x3e/0x3f ya vimos que era distinto, ya que los datos se reciben en los 2 reports, de la siguiente forma: (a1) 3e BB BB XX (a1) 3f BB BB YY Como vemos los datos de eje X e Y se reciben en 1 byte simple, pero los datos del eje Z se codifican en los bits no usados de los bytes asociados a los botones, BB, de la siguiente forma: Bit Report ID 0x3e 0x3e 0x3f 0x3f Byte 0 1 0 1 7 6 5 4 3 2 1 0

Z(5:4) Z(7:6) Z(1:0) Z(3:2)

Tabla V: Codificacin de bits componente Z en modo entremezclado

Toda esta informacin se resume en los anexos.

3.4.6.3. Sensor de infrarrojos


Mientras en Nintendo estaban en fase de desarrollo de su nueva consola, se dieron cuenta de que los sensores de movimiento no eran demasiado tiles para manejar cursores: el mando es muy intuitivo cuando jugamos a un juego de lucha o manejamos una espada, pero no lo es tanto cuando tenemos que manejar mens y movernos a travs de ellos. Para corregirlo, lo que hicieron fue incluirle al Wiimote un sensor IR... Lo que encontramos en el Wiimote es una cmara 1024x768, con un filtro en la banda IR delante. La incluye un procesador, capaz de hacer tracking con hasta que se desplazan (los datos de pxeles en bruto disponibles para el sistema final). monocromo cmara IR 4 objetos no estn

Por otro lado, junto a la Wii, tenemos una barra sensora, consistente en 2 clusters de LED's IR que son usados por el 19

Aplicaciones de controlador Bluetooth en Robtica.

20

Wiimote para situar informacin de dnde se apunta. De esta forma, tenemos 2 fuentes de luz infrarroja, que actan como baliza, y un dispositivo que capta las seales y puede usar dicha informacin para localizar su posicin. Si se eliminara el filtro, se podra localizar cualquier objeto brillante (cualquier zona del espectro). -Inicializacin: Para iniciar seguir el siguiente proceso: la cmara IR se tiene que

-Habilitar la cmara IR del Wiimote: Activar el segundo bit en el Report 13. -Habilitar la cmara IR 2: Se procede de la misma forma con el Report nmero 1a. -Escribir 0x08 en el registro b00030. -Escribir b00000. -Escribir b00030. el el Bloque Bloque 1 2 de de sensibilidad sensibilidad en en el el registro registro

-Escribir el nmero de modo en el registro b00033. -Ajustes de Sensibilidad: La sensibilidad se controla por medio de 2 bloques de configuracin, a los que nos referimos antes. Respectivamente tienen 9 bytes y 2 bytes de longitud. Debido al problema de ingeniera inversa en el que nos encontramos, se ha encontrado [4] que las siguientes configuraciones funcionan de forma correcta: Bloque 1 00 00 00 00 00 00 90 00 C0 02 00 00 71 01 00 aa 00 64 Bloque 2 40 00 63 03

Tabla VI: Bloques de ajuste del sensor IR

El ltimo byte de ambos bloques determina la sensibilidad intensidad, de forma que al aumentar dicho valor se reduce sensibilidad. El mando devolver datos de la mayor cantidad objetos posible cuando el ltimo byte del bloque 1 se pone con valor 41 y el segundo byte del bloque 2 a 00.

en la de el

20

Aplicaciones de controlador Bluetooth en Robtica.

21

-Formato de datos: La cmara IR devuelve diferentes conjuntos de datos describiendo los objetos que est apuntando. Cuando la cmara IR identifica un objeto, le asigna el primer slot disponible. Si el objeto se sale del campo de visin del Wiimote, su slot se marca como vaco (devuelve 0xFF), pero otros objetos conservan sus slot. Por ejemplo, si la cmara IR est siguiendo 2 objetos y el primero se sale del campo de visin, entonces se transmitiran los siguientes conjuntos de datos [vaco, segundo_objeto, vaco, vaco]. Con ms de 4 objetos visibles, la cmara conmuta rpidamente entre ellos, de forma que se permite la percepcin de ms de 4 objetos en un tiempo de respuesta relativamente rpido. Dependiendo de la cantidad de informacin relativa al sensor IR que nos manda el Wiimote tenemos los siguientes modos de funcionamiento, que como hemos visto se escogen en la inicializacin. Modo Bsico Extendido Completo Nmero de modo 1 3 5

Tabla VI: Bloques de ajuste del sensor IR

Veamos cmo es la informacin que se manda en cada uno de los modos: -Modo bsico: En este caso se devuelve un total de 10 bytes de datos, que corresponden a la localizacin en los ejes X e Y de hasta cuatro puntos. Cada localizacin se codifica en 10 bits, con un rango en X que vara entre 0 y 1023, y de 0 a 767 para la coordenada Y. Cada par de puntos se empaqueta en 5 bytes, de forma que se transmiten 2 de estos paquetes asociados a los 4 puntos. Vemoslo de forma ms grfica como es uno de estos paquetes (codificacin de 2 objetos) en la tabla VII. -Modo extendido: En este modo, la Wiimote enva los mismos datos que se hacen en el caso anterior, adems de un valor aproximado del tamao para cada objeto. Los datos se envan en 12 bytes, 3 bytes por objeto. El tamao tiene un rango de 0 a 15 (4 bits). 21

Aplicaciones de controlador Bluetooth en Robtica.

22

Para cada objeto, el formato de los datos se representa en la tabla VIII. Bit Byte 0 1 2 3 4 Y1(9:8) X1(9:8) X2(7:0) Y2(7:0)
Tabla VII: Formato de datos IR en modo bsico

3 X1(7:0) Y1(7:0)

Y2(9:8)

X2(9:8)

Bit Byte 0 1 2 Y(9:8) X(9:8) 7 6 5 4 3 X(7:0) Y(7:0) S(3:0) 2 1 0

Tabla VIII: Formato de datos IR en modo extendido

-Modo completo: En el modo completo, la cmara IR devuelve incluso ms informacin: 9 bytes por objeto, que hacen un total de 36 bytes para los 4 puntos. Estos bits son repartidos entre 2 reports de entrada, 18 bytes cada uno (ver los modos de reporte de datos 0x3e/0x3f). Este modo de funcionamiento no ha sido todava desarrollado como problema de ingeniera inversa.

3.4.7. Caractersticas de realimentacin al jugador


El mando juega con 3 caractersticas de salida para aportar sensaciones al jugador: LEDs, vibracin y altavoz.

3.4.7.1. LEDs de jugador


En el mando se han incorporado 4 LEDs azules. La utilidad es mostrar que nmero jugador tenemos de forma tan sencilla como mirar el mando mientras jugamos. 22

Aplicaciones de controlador Bluetooth en Robtica.

23

Por otro lado, los LEDs desempean otras funciones: mientras se est reconociendo el mando (sincronizacin), estos empiezan a parpadear; mientras parpadean, se iluminarn una cantidad de LEDs proporcional a la batera que le queda al mando. Es interesante de cara a nuestro programa el hecho de que el funcionamiento de los LEDs est totalmente a nuestro control: se pueden mostrar los patrones que deseemos, se puede controlar la luminosidad de los mismos,... Esto ltimo tiene un coste de ancho de banda demasiado elevado, aunque nos da una idea de la versatilidad del dispositivo. Los LEDs se controlan enviando: (52) 11 LL donde 11 se refiere, como se puede ver en los anexos al HID Report de los LEDs, y LL son bits que controlan el comportamiento de los LEDs, de la siguiente forma:

Bits LL 0x10 0x20 0x40 0x80

LEDs

Tabla IX: Control de los LEDs

3.4.7.1. Vibracin
El mando incorpora caractersticas de vibracin, todo gracias a un pequeo motor conectado a una aleta, de forma que empieza a vibrar cuando se activa. La vibracin puede activarse o apagarse con cualquier Output Report, de forma que si se activa el LSB del primer byte de cualquiera de ellos se activa. En otro caso se desactiva. Ya que acabamos de estudiar los LEDs, si usamos su report podemos tambin ajustar la vibracin. As si enviamos lo que sigue 23

Aplicaciones de controlador Bluetooth en Robtica.

24

encenderemos el motor de vibracin: (52) 11 01 Este detalle tiene un problema si se mira desde la siguiente perspectiva: como no hay ningn report de salida que slo afecte a la vibracin, y todos los reports afectan a la vibracin, es necesario ajustar la bandera de vibracin de forma adecuada en cada report, de forma que se eviten vibraciones accidentales.

3.4.7.3. Altavoz
El mando tiene un altavoz de baja calidad, usado para cortos y rpidos efectos de sonido mientras se juega. As por ejemplo, podemos escuchar el sonido de una pistola que dispara o una espada que se mueve. El flujo de sonido se recibe directamente desde el sistema final, donde el altavoz tiene algunos parmetros ajustables que estudiaremos a continuacin. Hay que decir que hasta ahora el conocimiento que se tiene del altavoz es escaso, de forma que el problema de ingeniera inversa no est totalmente solucionado. De hecho, prcticamente hasta la elaboracin de este documento, slo se producan sonidos distorsionados. Para el manejo del altavoz usamos 3 reports de salida, as como una pequea seccin del espacio de memoria de los registros. -El report 0x14 se usa para habilitar o deshabilitar el altavoz. Para ello activaremos o desactivaremos el segundo bit del mismo. As si enviamos el siguiente report, habilitamos el altavoz: (52) 14 04 -El report 0x19 se usa para silenciar o desilenciar el altavoz. De la misma forma, usaremos el segundo bit del mismo. Lo que sigue lo silencia: (52) 19 04 -El report 0x18 se usa para enviar los datos que sern reproducidos en el altavoz. Se pueden enviar de 1 a 20 bytes de una vez, siguiendo la siguiente estructura general: (52) 18 LL DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD 24

Aplicaciones de controlador Bluetooth en Robtica.

25

DD DD DD LL especifica la longitud de los datos que se transmiten, los bytes DD. La longitud se representa desplazando el valor 3 bits a la derecha. Los reports que tengan menos de 20 bytes han de ser rellenados con 0, y los datos se deben enviar a la tasa correcta. --Secuencia de inicializacin: Para iniciar la operacin del altavoz seguiremos la siguiente secuencia: 1. Habilitar el altavoz, mandando 0x04 al report 0x14. 2. Silenciarlo, mandando 0x04 al report de salida 0x19, tal y como hemos estudiado. 3. Escribir 0x01 al registro 0xa20009. 4. Escribir 0x08 al registro 0xa20001. 5. Escribir los 7 bytes de configuracin, que veremos a continuacin, cada uno en uno de los registros desde el 0xa20001 al 0xa20008. 6. Escribir 0x01 al registro 0xa20008. 7. Desilenciar el altavoz, mandando 0x00 al report 0x19. --Configuracin y formato de datos: El altavoz puede usar mltiples formatos, aunque todos ellos son muy desconocidos. De hecho si lo usamos con un PC, los drivers no pueden mantener todos los formatos. Los 7 bytes de configuracin a los que nos hemos referido antes, permiten ajustar algunos valores de altavoz, entre otras cosas el formato de audio. La estructura genrica de dicho bloque es la siguiente: 00 FF RR RR VV 00 Decimos genrica porque los bytes 0x00 no se conocen. El resto de parmetros son los siguientes: VV especifica el volumen, de forma que tenemos un volumen mximo terico de FF (255). FF configura el formato de datos de sonido. Si lo ajustamos a 0x40 se configura el altavoz en formato 8-bits PCM, mientras que si imponemos 0x00 se configura a un formato de 4 bits ADPCM. Todos ellos son muy desconocidos. RR es la tasa de muestreo, de forma que tiene que ajustarse al formato seleccionado. Veamos algunas configuraciones: 25

Aplicaciones de controlador Bluetooth en Robtica.

26 tonos en el modo

00 00 4bitADPCM.

00

0D

40

00

00:

Se

producirn

00 40 00 1A 40 00 00: Se configura a 8bit-PCM a una tasa de 1794Hz (0x1A). El formato por defecto del altavoz es actualmente desconocido, pero parece que es 4-ADPCM, con una tasa de muestreo ms flexible. Decimos parece ya que si se repiten los mismos valores de 4 bits no se comportan como esperamos. El formato de 8-bit PCM parece ms cercano al estndar, pero en este caso no se pueden usar los valores superiores de frecuencia, ya que la calidad ya no es mala sino psima. En [8] encontramos una pequea tabla (Tabla X) con algunos valores de tasa de muestreo. Valor 11 (0x0B) 12 (0x0C) 13 (0x0D) 14 (0x0E) 15 (0x0F) Frecuencia de mustreo 4000-4364 Hz 3692-4000 Hz 3429-3692 Hz 3200-3429 Hz 3000-3200 Hz

Tabla X: Programacin de la tasa del altavoz

Si observamos la tabla anterior, la relacin valor-tasa de muestreo es inversamente proporcional. Si hacemos las cuentas la mxima frecuencia que podemos conseguir es de unos 7 Khz.

3.4.8. Controlador externo


El Wiimote incluye un conector de expansin de 6 pines, para transmitir datos serie de forma sncrona, datos que provienen de entradas externas. Actualmente, Nintendo tiene a Nunchuk y control clsico(fig. 3.8 mapean en una porcin del espacio de pueden incluso mandarse Output Reports la venta 2 dispositivos: y 3.9). Estas entradas se memoria de los registros, y hacia ellos.

26

Aplicaciones de controlador Bluetooth en Robtica.

27

Figura 3.8: Nunchuk

Figura 3.9: Controlador clsico

--Registros e inicializacin: Los controles de extensin se mapean en la direccin 0xa40000 y tiene en total 100 bytes de longitud. Los registros se pueden leer y escribir. Los datos estn encriptados. El cdigo de encriptacin se configura al principio del registro 0xa40040. Si se escribe un valor nulo, se inicia el perifrico y hace uso de un esquema de encriptacin muy sencillo. Si queremos recuperar la informacin original hemos de usar la siguiente transformacin:
decrypted_byte = (encrypted_byte XOR 0x17) + 0x17

El resultado debe truncarse a 8 bits. --Identificacin: Los ltimos 2 bytes del bloque de registros para el controlador de expansin, identifican al dispositivo concreto conectado al puerto. Si se hace una lectura de 2 bytes en el registro 0xa400fe tendremos estos bytes. Podemos encontrar los valores registrados en la tabla XI. Encriptado 0x0000 0xFFFF 0xFEFE 0xFDFD Desencriptado 0x2E2E 0xFFFF 0x0000 0x0101 Significado Nada insertado Parcialmente insertado Nunchuk conectado Controlador clsico conectado

Tabla XI: Identificacin del controlador externo

El caso Parcialmente insertado se produce cuando el conector se pierde o hay una mala conexin. 27

Aplicaciones de controlador Bluetooth en Robtica.

28

3.4.9. Informacin de estado


El Wiimote puede devolvernos su estado: estado de algunas configuraciones de perifricos, el estado del controlador de extensin y el nivel de la batera. Para solicitar dicha informacin hemos de enviar cualquier informacin al report 0x15. As por ejemplo, lo que sigue solicita el report de estado (tambin apaga la vibracin): (52) 15 00 La informacin de estado se recibe a travs del report 0x20: (a1) 20 00 00 FF 00 00 BB En ese contexto, BB es el nivel de la batera y FF es una mscara de banderas con el siguiente significado de estado: Bit 0 1 2 3 4 5 6 7 Mscara 0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80 Significado Desconocido Un control externo conectado Altavoz habilitado Envo continuo habilitado LED 1 LED 2 LED 3 LED 4

Tabla XII: Informacin de estado del Wiimote

28