Attention: ce tutoriel n’est plus à jour. Nouveau tutoriel : lien.
[spoiler]Introduction
Ce tutoriel explique comment contrôler une PS3 avec un clavier et une souris connectés à un PC sous Linux, en utilisant un dongle bluetooth.
Cela est possible grâce au travail de Jim Paris, dont j’ai repris et modifié le code source.
Pré-requis
- une manette sixaxis déjà utilisée avec la PS3 à utiliser
- un dongle bluetooth avec une puce dont la bdaddr (bluetooth device address) peut être changée. Pour découvrir si votre dongle marche, essayez simplement d’exécuter ce tutoriel.
Notes
Cette méthode est expérimentale, donc utilisez là à vos risques et périls. Je ne suis pas responsable des dégâts que vous pourriez causer à votre PC ou à votre PS3.
Les dongles CSR Bluecore4 trouvables sur ebay pour quelques euros sont rapportés comme utilisables. Bluecore4 est la première puce CSR implémentant l’EDR (Enhanced Data Rate), donc les mots clefs pour trouver ces dongles sont CSR et EDR.
Retirer tout autre dongle du PC (ou les désactiver).
Ne pas essayer d’utiliser le Sixaxis emulator et la manette sixaxis en même temps. Rétablir la bdaddr du dongle si elle n’est plus utilisée pour le Sixaxis emulator.
Ce tutoriel a été écrit en utilisant ubuntu depuis le live cd (rien n’est modifié sur le disque dur).
Ne pas oublier de noter la bdaddr de la PS3 dans l’étape 1, afin de ne plus avoir à répéter cette étape.
Une fois que l’étape 2 est réalisée, il n’y a plus lieu de la répéter puisque la modification de la bdaddr est permanente.
Comme les étapes 1 et 2 n’ont à être réalisées qu’une seule fois, une manière simple de démarer le Sixaxis emulator avec un live cd est de réaliser un script pour les étapes 3 et 4.
Installez ubuntu sur votre PC si vous le souhaitez ! Si vous avez un OS Windows déjà installé, vous pouvez lire ce tutoriel si vous voulez installer ubuntu sur votre disque dur sans supprimer l’OS Windows.
L’émulateur peut aussi être exécuté à partir d’un Ubuntu en Live USB persistent (lire ce post).
1 Déterminer la bdaddr du sixaxis et la bdaddr de la PS3
Connecter le sixaxis au PC avec un câble usb.
Dans un terminal (alt+F2, gnome-terminal) :
sudo apt-get install libusb-dev
wget http://diyps3controller.googlecode.com/svn/trunk/sixutils/sixaddr.c
gcc -o sixaddr sixaddr.c -lusb
sudo ./sixaddr
Current Bluetooth master: XX:XX:XX:XX:XX:XX
Current Bluetooth Device Address: YY:YY:YY:YY:YY:YY
“Current Bluetooth master” est la bdaddr de la PS3 (la noter).
“Current Bluetooth Device Address: ” est la bdaddr du sixaxis (la noter).
Déconnecter le câble usb. Le sixaxis devrait s’éteindre.
2 Modifier la bdaddr du dongle
sudo apt-get install libdbus-1-dev libglib2.0-dev
wget http://www.kernel.org/pub/linux/bluetooth/bluez-4.63.tar.gz
tar xzvf bluez-4.63.tar.gz
cd bluez-4.63
./configure –enable-test
make
(ne pas faire le traditionnel make install)
cd test
./bdaddr
Manufacturer: Cambridge Silicon Radio (10)
Device Address: 01:02:03:04:05:06
Noter l’adresse (pour pouvoir la rétablir).
sudo ./bdaddr ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
(remplacer ZZ:ZZ:ZZ:ZZ:ZZ:ZZ avec la bdaddr du sixaxis découverte dans l’étape 1).
Déconnecter et reconnecter le dongle.
./bdaddr
Manufacturer: Cambridge Silicon Radio (10)
Device Address: ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Vérifier que la bdaddr a changé.
Si l’adresse est bien changée, aller à l’étape 3.
Sinon, changer de nouveau la bdaddr:
sudo ./bdaddr ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
(remplacer ZZ:ZZ:ZZ:ZZ:ZZ:ZZ avec la bdaddr du sixaxis découverte dans l’étape 1).
Ensuite, essayer un “reset software” Ã l’aide de la commande suivante:
sudo hciconfig hci0 reset
Ceci ne change pas la bdaddr de manière permanente. La modification et le reset software doivent être réexécutés après chaque redémarrage du pc ou chaque rebranchement du dongle.
A ce moment, il n’y a pas de moyen (connu) de dire si cela va fonctionner ou non. Pour le savoir, continuer simplement le tutoriel.
3 Compiler le Sixaxis emulator
cd ~
sudo apt-get update
sudo apt-get install libbluetooth-dev libsdl1.2-dev subversion
svn checkout -r 134 http://diyps3controller.googlecode.com/svn/trunk/sixaxis-emu/ diyps3controller-read-only
cd diyps3controller-read-only
make
4 Démarrer le Sixaxis emulator
Démarrer le serveur:
sudo ./emu ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Si la commande n’est pas lancée avec sudo et que la PS3 est allumée, cela ne fonctionnera pas.
Remplacer ZZ:ZZ:ZZ:ZZ:ZZ:ZZ avec la bdaddr de la PS3 (découverte dans l’étape 1).
La PS3 devrait s’allumer.
Si un “reset software” a été réalisé dans l’étape 2, et que le message suivant s’affiche :
emu: can’t connect to control psm: Connection refused
alors cela signifie qu’il faut trouver un autre dongle (voir Notes).
Si le message “connected” s’affiche, alors continuer le tutorial.
Dans un autre terminal, démarrer le client:
cd ~/diyps3controller-read-only
./emuclient
Jouer, ou effectuer tout autre action avec la PS3.
Appuyer sur Echap pour quitter le client.
5 Contrôles clavier/souris
Les contrôles sont faits pour un clavier azerty, cela devrait probablement vous convenir.
Il est recommandé de changer les contrôles et de calibrer la souris pour chaque jeu.
Cette section décrit les paramètres qui peuvent être changés dans emuclient.c.
cd ~/diyps3controller-read-only
gedit emuclient.c
Modifier les contrôles!
make
N’oubliez pas cette dernière commande après chaque modification de emuclient.c !
Contrôles clavier
Modifier les contrôles après cette ligne:
void key(int sym, int down)
Contrôles par défaut:
right shift = ps
e = triangle
space = cross
left control = circle
r = square
tab = select
backspace = start
t = l2
k = l1
l = r1
g = r2
left shift = l3
f = r3
& = up
é = right
” = left
‘ = down
q = left stick left
z = left stick up
s = left stick down
d = left stick right
esc = quit emuclient
Quelques touches sont aussi utilisées pour calibrer la souris (voir Contrôles souris).
Contrôles souris
Les mouvements de la souris sont mappés sur le stick droit.
La zone morte est optimisée pour COD MW2.
Elle doit être changée pour chaque jeu (voir DEAD_ZONE au début du fichier).
Pour activer le mode de calibration de la zone morte, appuyer sur la touche 0 du pavé numérique (un nouvel appui sur cette même touche pour désactiver le mode).
Le mode de calibration applique un mouvement horizontal qui correspond à la valeur courante de la zone morte.
Si la position n’est pas stable, diminuer la zone morte en appuyant sur la touche / du pavé numérique jusqu’à ce que la position soit stable.
Si la position est stable, augmenter la zone morte en appuyant sur la touche * du pavé numérique jusqu’à la dernière position stable.
La valeur courante de la zone morte est affichée dans le terminal du processus emuclient.
Le multiplicateur par défaut pour les mouvements de la souris est 4 (voir DEFAULT_MULTIPLIER au début du fichier).
Les touches +/- du pavé numérique peuvent être utilisées pour augmenter/diminuer le multiplicateur.
La valeur courante du multiplicateur est affichée dans le terminal du processus emuclient.
Modifier les contrôles après cette ligne:
void clic(int button, int down)
Contrôles par défaut:
left button = r1
right button = l1
middle button = triangle
wheel up = r2
wheel down = l2
wheel right button = square
wheel left button = r3
side button = triangle
Pour les utilisateurs avancés connaissant la programmation en C
Si vous souhaitez modifier le code pour jouer avec d’autres périphériques d’entrée, vous pourrez trouver de la documentation ici.
6 Macros clavier
Il est possible d’exécuter des macros de clavier.
Un appui sur une touche peut générer une série d’événements, avec certains délais.
Les commandes sont les suivantes :
– key down (touche enfoncée)
– key up (touche relâchée)
– key press (key down + délai + key up)
– delay (délai, unité = ms)
Chaque macro doit être définie dans un fichier.
Exemple: macro_example.txt
#Defines the action that triggers the macro execution
MACRO F1
#Performs a keystroke (key down + delay 50ms + key up)
KEY e
#Sleep 50ms
DELAY 50
#Perform a key down
KEYDOWN SPACE
#Sleep 50ms (minimum delay between KEYDOWN and KEYUP)
DELAY 50
#Perform a key up
KEYUP SPACE
Les lignes qui commencent par # sont des commentaires.
Chaque fichier définissant une macro doit être référencé dans le ficher macros.txt.
Toutes les touches du clavier peuvent générer une macro. La liste complète peut être obtenue dans le fichier macro.c.
7 Résolution des problèmes / Feedbacks
Je partage mon projet gracieusement, merci de bien vouloir me donner un feedback si vous le testez.
Dites-moi si cela fonctionne ou non, et ajoutez en particulier les détails suivants :
- la distribution Linux
- les libraries (si différentes de celles suggérées dans ce tutoriel)
- la version hardware de la PS3 (slim, fat 40Gb, fat 60Gb, …)
- la version software de la PS3
- le dongle bluetooth (modèle exact + révision s’il y en a une + résultat de “hciconfig -a hci0” et “sudo hciconfig hci0 revision”)
- le hardware du PC (au moins le CPU et la quantité de RAM)
Écrivez cela dans un commentaire à ce post.
Et si cela ne marche pas, vérifiez d’abord que vous disposez du dernier code source. Ensuite rendez-vous dans la liste de bugs, regardez si vos problèmes sont déjà connus, et s’ils ne le sont pas, rapportez-les.[/spoiler]