Tuesday, September 16, 2008

What wiitle Wiimote gives out...

El Wiimote (Control Remoto Wii ) es el control principal de la consola Wii de Nintendo. Sus características más destacables son la capacidad de detección de movimiento en el espacio y la habilidad de apuntar hacia objetos en la pantalla. Este control, se está usando mucho ya, en video juegos, que pueden ser corridos en una PC, sin necesidad de la consola Wii. El Wiimote mantiene comunciación con la computadora, mediate Bluetooth.

Analicemos ahora, la salidas que posee este control

Salidas:

LEDS:Se encuentran en la punta del control, son 4 LEDS azules. Mientras se está jugando, estos LEDS se usan para indicar que el wiimote se encuentra en modo descubrible de Bluetooth (cuando parpadea, indica el nivel de batería) también sirven estos LEDS, para indicar el número de jugador al que corresponde ese control. (si es el número de jugador es 2, se prenderían dos LEDS) Los LEDS se pueden controlar de manera independiente.

Rumble:
El rumble se da via un motor, que posee un peso desbalanceado, este motor puede ser activado para hacer así que el control vibre. El motor puede ser activado, al enviar un paquete de salida
[SET_REPORT] a los canales 0x11, 0x13, 0x14, 0x15, 0x19 o 0x1a con el bit menos significativo puesto en: (52) 13 01
La vibración, se puede eliminar al poner ese bit en cero: (52) 13 00
Se puede utilizar cualquiera de los canales anteriores, aunque el canal 0x11 no es muy recomendable, ya que también se usa para controlar a los LEDS .


Bocina:
El Wiimote, posee una pequeña bocina de baja calidad, la cual se utiliza para dar durante el juego efectos de sonidos cortos. El flujo de sonido que se debe tocar, se obtiene del host directamente.
La bocina, es controlada mediante 3 reportes de salida, el reporte 0x14 se utiliza para habilitar o deshabilitar la bocina. Al poner en alto el segundo bit, se habilita la bocina, y al ponerlo en bajo, se deshabilita. Por ejmplo, para habiliar la bocina, se enviaría: (52) 14 04
El reporte 0x19, se usa para silenciar o des-silenciar la bocina, funciona de la misma manera, que el reporte 0x14. 0x04 callaría a la bocina, y 0x00 haría que nuevamente sonará. (Una especie de mute y de unmute!)
El reporte 0x18, se usa para enviar datos de sonido a la bocina. 1-20 bytes se pueden enviar en un sólo paquete.
Ejemplo de un paquete que se podría enviar a la bocina:
(52) 18 LL DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD

LL especifica el tamaño del dato que se enviará. Los bytes DD son el dato de sonido. Cuando el dato, posee un tamaño que es menor al de 20 bytes, se deben rellenar los lugares restantes. Los datos de sonido, por otro lado, se deben enviar a una frecuencia adeucada, se puede escojer la freucncia de muestreo durante la inicialización.

Secuencia de Inicialización de la bocina.
Las siguientes secuencias, inicializarían a la bocina:

*Habilita la bocina (Envia 0x04 la salida del reporte 0x14)
*Pon en silencio a la bocina (Envia 0x04 a la salida del reporte 0x19)
*Escribe 0x01 al registro 0x04a20009
*Escribe 0x08 al registro 0x04a20001
*Escribe una configuración de 7 byte a los registros 0x04a20001-0x04a20008
*Escribe 0x01al registro 0x04a20008 (La configuraión de 7 byte de la bocin, controlan justo la configuarión de la bocina, como es su frecuencia de muestreo. )
*Regresa el sonido a la bocina (Envía 0x00 al reporte de salida 0x19)

Formato del dato de sonido: Parece ser un sonido ADPCM de 4 bits. ADPCM (Adaptive Differential Pulse Code Modulation) utiliza una modulación, de modo que en vez de cuantificar la señal directamente, como el PCM, cuantifican la diferencia entre la señal y una predicción hecha a partir de la señal, por lo que se trata de una codificación diferencial

1 comment:

Jorge Barrio said...

Buenas.

Sabes si hay alguna libreria en Delphi que implemente la bocina?