La wiimote

Encryptage des données

Maintenant que nous savons que la wiimote peut se synchroniser avec un PC possèdant un clé bluetooth. Nous allons voir quelles sortes de données sont envoyées par la wiimote. Cette page sera succinte car je trouve le site de wiibrew très complet pour ce sujet et l’envie de copier le travail d’un autre ne m’enchante pas. Je vais donc faire une introduction à l’utilisation des requêtes pour pouvoir dialoguer avec la wiimote. Donc si vous voulez savoir comment parser exactement les requêtes, lisez cette partie puis reportez vous au site ===> wiibrew qui vous complera (et promis, c’est la dernière fois que je vous parle de ce site au combien intéressant ).

Les types de données

Il y a différents type de données qui sont envoyées et reçues par la wiimote.

Pourquoi utilisé différents type de données?

Déjà il faut savoir que la wiimote possède plusieurs modes d’envoi que l’on va détailler plus tard.
Elle possède également des modules dont je vous ai déjà parlé comme une mémoire ou un haut parleur et qui nécessite l’envoi de données particulières.

Les données transmises à et par la wiimote sont normées.

Voici un tableau qui résume les différents types :

Attention !!!
Les données utilises dans le tableau sont les données qui reste une fois que l’on a désencapsuler les données de transmission du protocol HID.


I/O ID(s) Size Function
O 0x10 1 Unknown
O 0x11 1 Player LEDs
O 0x12 2 Data Reporting mode
O 0x13 1 IR Camera Enable
O 0x14 1 Speaker Enable
O 0x15 1 Status Information Request
O 0x16 21 Write Memory and Registers
O 0x17 6 Read Memory and Registers
O 0x18 21 Speaker Data
O 0x19 1 Speaker Mute
O 0x1a 1 IR Camera Enable 2
I/O ID(s) Size Function
I 0x20 6 Status Information
I 0x21 21 Read Memory and Registers Data
I 0x22 4 Acknowledge output report, return function result
I 0x30-0x3f 2-21 Data reports


On peut donc voir dans le tableau que chaque donnée possède un ID. Cela va permettre de savoir de quelle type de données il s’agit et la taille de celle-ci.
Toutes les données en O sont les données qui sont transmise à la wiimote et inversement ceux en I sont celles envoyées par la wiimote.

On peut voir que pour les données qui sont envoyées à la wiimote et qui demande une réponse de sa part comme par exemple ( Read Memory and Registers ) correspond des types de données pour la réponse (Read Memory and Registers Data).
Donc si par exemple, on envoie la requête pour connaitre les informations sur le status ( ID 15 ), il faut s’attendre à recevoir une réponse d’ID 20.

Il existe également un type de données très important. On peut le voir dans le tableau, c’est le Data reports.
En faite, ce sont les données envoyées par les boutons, l’accéléromètre, la camera et les extensions.

J’ai donc décidé de m’attarder uniquement sur les Data Reports. Mais vous devez savoir qu’il est maintenant possible en envoyant les bonnes requêtes d’écrire dans la mémoire, de faire parler le haut-parleur, d’allumer les LEDs de la wiimote, etc...

Quelles sont les données transmises ?

Maintenant que vous savez que chaque requête est normée ( ID, size), on va pouvoir s’attarder sur les données reçues par le PC.

Commençons par un exemple simple:
si on envoie :

	11 LL  => schema d’allumage des diodes.
	11 10  => allume la diode 1 de la wiimote
	11 20  => allume la diode 2 de la wiimote
	11 40  => allume la diode 3 de la wiimote
	11 80  => allume la diode 4 de la wiimote

Les valeurs données sont en hexadécimales. On peut voir que l’on a l’id 11 qui correspond au diode.
Donc avec cette exemple, on peut voir comment sont formés les requêtes, c’est à dire l’id suivi des données.

Maintenant petite explication sur les Data Report.
La wiimote possède plusieurs modes de Data Report, chacun correspondant à un niveau de précision des composants de la wiimote.
Il devient possible de choisir de ne recevoir que les informations venant des boutons ou des boutons et de l’accéléromètre.
Le mode est choisis par l’utilisateur donc par les jeux de la WII en temps normal.

Pour choisir son mode d’envoi des données, rien de plus simple :

	12 TT MM => 12, id pour Data Report mode (original !!)
			 => TT, pour surement quelque chose de très intéressant mais que je ne connais pas ( pas utiliser ).
			 => MM, pour le mode, il correspond à l’id par lequel seront renvoyées les données.
	Par exemple :
	
	12 00 30 => l’id 30 correspond à l’activation des boutons
	
	La réponse sera de la forme suivante:
	30 BB BB => 30, id pour le mode bouton et 2 octets pour les données sur les boutons
	

Les différents modes de Data Report et le format de données sont :

30 Activation des boutons

	30 BB BB
	
	BB => données des boutons

31 Activation des boutons et de l’accéléromètre

	31 BB BB AA AA AA
	
	BB => données des boutons
	AA => données de l’accéléromètre ( XX YY ZZ)

32 Activation des boutons et de l’extension sur 8 octets

	32 BB BB EE EE EE EE EE EE EE EE
	
	BB => données des boutons
	EE => données de l’extension (données encryptées)

33 Activation des boutons, de l’accéléromètre et de l’infra-rouge sur 12 octets

	33 BB BB AA AA AA II II II II II II II II II II II II
	
	BB => données des boutons
	AA => données de l’accéléromètre ( XX YY ZZ)
	II => données de la caméra infra-rouge

34 Activation des boutons et de l’extension sur 19 octets

	34 BB BB EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
	
	BB => données des boutons
	EE => données de l’extension (données encryptées)

35 Activation des boutons, de l’accéléromètre et de l’extension sur 16 octets

	35 BB BB AA AA AA EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
	
	BB => données des boutons
	AA => données de l’accéléromètre ( XX YY ZZ)
	EE => données de l’extension (données encryptées)

36 Activation des boutons, de l’infra-rouge sur 10 octets et de l’extension sur 9 octets

	36 BB BB II II II II II II II II II II EE EE EE EE EE EE EE EE EE
	
	BB => données des boutons
	II => données de la caméra infra-rouge
	EE => données de l’extension (données encryptées)

37 Activation des boutons, de l’accéléromètre, de l’infra-rouge sur 10 octets et de l’extension sur 6 octets

	37 BB BB AA AA AA II II II II II II II II II II EE EE EE EE EE EE
	
	BB => données des boutons
	AA => données de l’accéléromètre ( XX YY ZZ)
	II => données de la caméra infra-rouge
	EE => données de l’extension (données encryptées)

3D Activattion de l’extension sur 21 octets

	3D EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
	
	EE => données de l’extension (données encryptées)

3E / 3F Activation des boutons, de l’accéléromètre et de l’infra-rouge sur 36 octets

	3E BB BB AA AA II II II II II II II II II II II II II II II II II
	3F BB BB AA AA II II II II II II II II II II II II II II II II II
	
	BB => données des boutons
	AA => données de l’accéléromètre 
	II => données de la caméra infra-rouge

Ce mode est assez particulier. Je vous conseille de vous reporter sur le site wiibrew ;).

On s’aperçoit qu’avec les différents modes, on peut vraiment accélérer le temps de traitement pour parser les données en fonction de l’utilisation.
Si l’on a besoin uniquement de l’accéléromètre, on prendre le mode 0x31. Par contre, si l’on veut uniquement les données de l’extension ( utilisé si l’on joue avec la manette classique ), on prendra le mode 0x21.

Maintenant que l’on sait comment sont formatées les données, il devient alors simple de créer des librairies qui seront capable de parler avec la wiimote.
C’est ce que l’on va voir dans la prochaine section ===> Utilisation sur ordinateur