Monday, September 08, 2008

Las entradas del Wiimote

Aquí un poco de información, acerca de las entradas que tiene nuestro querido Wiimote:


Botones

Existen 12 botones, en el wiimote, 4 de ellos están en la cruzecita que sirve para dar dirección, y los demás están exparcidos a lo largo de todo el control.

Cuando algún botón, se presiona o se suelta, un paquete es enviado a la comptadora via un reporte de entrada HID (Un reporte HID se usa para transimitir datos de tipo HID control de y hacia dispositivos HIDClass, es importante aclarar de una vez, que un HD control, es una fuente de información ascoiada a un HIDClass devicereport) 30H, este paquete contiene una máscara de bit, con el estado actual de todos los botones. El estado de los botones, parece siempre incluirse en todos los reportes que brinda el Wimote a la computadora, esta información suele estar en los primeros dos bits.

Por ejemplo, cuando se presiona el boton A, el paquete de entrada HID DATA que recibe la computadora es:

 (a1) 30 00 08

y cuando se suelta, el paquete que se recibe es:

(a1) 30 00 00

La asignación de bit para los botones es:

Botón Numero (dec) Valor (hex)
Two 1 0x0001
One 2 0x0002
B 3 0x0004
A 4 0x0008
Minus 5 0x0010
? motion ? 6 0x0020
? motion ? 7 0x0040
Home 8 0x0080
Izquierda
9 0x0100
Derecha
10 0x0200
Abajo
11 0x0400
Arriba
12 0x0800
Más
13 0x1000
? motion ? 14 0x2000
? motion ? 15 0x4000
? Reading Mii ? 16 0x8000

El boton de encendido, es inusual debido a que cuando se aprieta, envia una petición de desconectar en vez de enviar un código normal de botón

Sensor de movimiento:




Tanzmaus


El movimiento del control, se sensa gracias a un acelerometro de 3 ejes lineal localizado a la izquierda de donde está el botón A. El circuto integrado es el ADXL330 , el cual es construido por Analog Devices. Este dispositivo se calibra para que pueda medir aceleraciones que se encuentran en un rango de +/- 3g con 10% de sensiblidad.

Dentro del chip, se encuentra una pequeña estructura micromecánica, la cual es sujetada por unos resortes hechos de silicon. Mediciones de diferencias en capacitancias, permiten que el desplazamiento neto de la pequeña masa, pueda ser convertido en un voltaje, el cual es digitalizado. Es importante aclarar, que el sensor no mide la aceleración del Wiimote, sino la fuerza ejercida por la masa de prueba a los resortes que la sujetan. Gracias a la convención de signo que se usa, esa cantidad es proporcional a la fuerza neta que ejerce la mano del jugador sobre el wiimote cuando lo agarra. Por eso, cuando se deja el wiimote sobre una mesa, el acelerometro marca la fuerza vertical de +g (la masa puede ser normalizada en unidades arbitrarias) y cuando cae se reporta una fuerza de casi zero.


El sensor utiliza un sistema coordenado de mano derecha, con el eje X positivo a la izquierda, y ele eje Z positivo apuntando hacia arriba.

El Wiimote, no suele reportar lecturas de los sensores a la computadora, aunque si se peuden pedir estos valores, al enviar al canal 0x12 SET_REPORT:


 (52) 12 00 31

El tercer byte de la cadena anterior es una máscara de bit. 0x01 habilita el rumble o el vibreo del wiimote, 0x04 habiltia que las salida sean continuas. si 0x04 no está habilitado, los paquets sólo se sacan cuando sus valores cambian. (casi siempre, si es que el sensor de movimiento esta habilitado) . El Wiimote enivará a la computadora paquetes , donde los bytes 5, 6 y 7 contienen información acerca de las lecturas de X, Y y Z en el acelerómetro.

Un ejemplo del paquete que se envia cuando el Wiimote esta acostado hacia arriba en una mesa es:


 (a1) 31 40 20 86 8a a5

donde 0x86 es la medicion del eje de la X, 0x8a es la lectura en el eje Y, 0xa5, es la lectura en el eje Z.

Se pueden escojer otro canales para los reortes de movimientos, como peude ser 0x31, 0x33, 0x35, 0x37, 0x3e y 0x3f. Si 0x3e o 0x3f son seleccionados, entocnes las lecturas de los sensores se alternarán entre estos dos canales.

Se pude parar de hacer reportes de movimiento, al enviar al canal de salida un 0x30.
 (52) 12 00 30

Parece ser, que modo del canal es relamente un modo selección por máscara de bits. La salida de los botones, siempre se haya habilitada. el modo 0x30 son sólo boones, 0x31 es sólo sensado de movimiento, 0x32 se cree que es la cámara infraroja, y 0x33 es tanto la cámara infraroja, como el sensor de movimeinto.




Calibracion:
Los puntos de inicio, es decir los puntos que se consideran cero, asi como los valores de gravedad para los 3 ejes del acelerometro, se guardan al principio de la memoria Flash del Wiimote. La informacion se empieza a guardar apartir de la direccion 0x16 de la memoria. Esta informacion se repite en la direccion

0x20.0x16 punto cero para el eje X
0x17 Punto cero para el eje Y
0x18 Punto cero para el eje Z
0x19 no se sabe que guarda
0x1A +1G punto para el eje X
0x1B +1G punto para el eje Y
0x1C +1G punto para el eje Z
0x1D no se sabe
0x1E-0x1F checksum?



No comments: