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