Please give me a feedback!

I’m sharing my project for free, so please give me a feedback if you test(ed) it.

Tell me if it works or doesn’t work, and especially add the following details:

  • the tutorial (hidemulator or sixaxis emulator)
  • the Linux distribution
  • the libraries (if different from those suggested in the tutorials)
  • the PS3 hardware version (slim, fat 40Gb, fat 60Gb, …)
  • the PS3 firmware version
  • the bluetooth dongle (exact model + revision if there is one + output of “hciconfig -a hci0” and “sudo hciconfig hci0 revision”)
  • the hardware of the PC (at least the CPU and the amount of RAM)

Report that in commentary to this post.

And if it doesn’t work, first verify if you have the latest source code. Then look at the bug list, see if your problems are already known, and if it’s not, report them.

The project is still in development. A critical issue remains, and I’m actively working to solve it. The code works actually great on my side, so that it wouldn’t be possible for me to be aware of that issue without feedback!

Another way to pair a dongle with the PS3 as a Sixaxis – 2

A usb device (such as a teensy++, a bumble-b or an atmel chip+vusb) can talk to the PS3 as an “unpaired” sixaxis.

I think it has to have the following characteristics:

  • the same vendor id and product id
  • the same hid descriptor
  • after a small delay, the device sends a PS3 button press
  • when the PS3 requests for the bdaddr, reply with the bdaddr we want to pair
  • when the PS3 sends its bdaddr, reply “ok”

Another way to pair a dongle with a PS3 as a Sixaxis?

Another way to pair a dongle with the PS3 as a Sixaxis could be to change the bdaddr of a Sixaxis with the bdaddr of a dongle, and pair that Sixaxis with the PS3.

It seems that the bluetooth module of the sixaxis is composed of a CSR chip and an additional chip (flash memory?), so that there is a little chance that the bdaddr can be changed.

The bdaddr of the bluetooth master can be get/set with usb commands (as seen with sixpair utility). I’ll try to do the same with the bdaddr of the sixaxis (it is already known that there is a get command).

Pros:
– any bluetooth dongle could be used
– using a widcomm compatible dongle could make possible to port the sixaxis emulator to windows
– the sixaxis bdaddr could be reset to its original value so that the sixaxis and the sixaxis emulator could be used at the same time

Cons:
– none

This method doesn’t work, the command just fails.

Compatible CSR bluetooth dongles

Edit 24/06: Bluecore4-ROM dongles may work too!

It is quite difficult to tell if a usb dongle will work or not (even for CSR chips).

And not to make it easier, dongle manufacturers can change the chip without changing the product name… So be careful about hardware revisions!

I suggest CSR chips such as BlueCore2-ext and BlueCore4-ext. There is no guaranty it will work.

Older CSR chips may work (as the dongle I’m using – Cellink BTA-3000).

There is valuable information about BlueCore2-ext dongles and BlueCore4-ext dongles on that blog and that forum thread.

A list of dongles with BlueCore2-ext can be found there (p.98-104).

Playing FPS with a G5 on PS3 ;-)

I did it! That feels almost like playing a FPS on a PC ^^

I seriously hope console manufacturers and game developers will think about giving us the right controller for each type of game… But I think they won’t, as they actually seem to put all their efforts in those new controllers for casual gamers…

Tutoriel : Sixaxis emulator


Attention: ce tutoriel n’est plus à jour. Nouveau tutoriel : lien.

Show »

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.