I. Introduction :

Dans cet exemple, nous allons voir comment utiliser les touches de la PSP ou du moins comment récupérer les actions de l'utilisateur.

 

II. Les explications :

Pour commencer, il faut inclure le bon header : pspctrl.h.

1
#include <pspctrl.h>

 

Ensuite, il nous faut déclarer une variable dans laquelle on récupérera la dernière touche appuyée de type SceCtrlData.

1
SceCtrlData pad;

Pour plus d'informations sur ce type de données, vous pouvez consulter la documentation du SDK : pspsdk-1.0+beta2: Référence de la structure SceCtrlData.

 

Avant de commencer à récupérer des informations en provenance des boutons, on peut définir quelques paramètres comme le mode de fonctionnement du controleur : digital ou analogique. La fonction sceCtrlSetSamplingMode est là pour ça.

1
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);

 

Etant donné que l'on veut récupérer en permanence l'état du contoleur, il nous faut faire une boucle infinie. C'est la base our un gestionnaire d'évènement : ici les évènements sont des appuis sur les touches de la PSP.

1
2
3
while(1)
{
}

 

Maintenant, ce qui nous intéresse, c'est la "lecture" de l'état du controleur. Pour cela, on fait appel à la fonction sceCtrlReadBufferPositive qui prend en 1e paramètre l'adresse d'une structure de type SceCtrlData et en 2e paramètre le nombre d'appuis que l'on veut récupérer. Ce code est à placer dans la boucle infinie.

1
sceCtrlReadBufferPositive(&pad, 1);

 

Après avoir lu l'état du controleur, il faut traiter l'information. Dans notre cas, nous allons nous occuper d'afficher à l'écran le nom du bouton qui a été appuyé ainsi que la position du curseur (même s'il ne se voit pas) au moment de l'appui. Pour simplifier la tâche et surtout la compréhension par rapport au code fournis dans le PSPSDK, nous allons utiliser un switch au lieu de if imbriqués.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
switch(pad.Buttons)
{
  case PSP_CTRL_SQUARE:
    printf("Bouton : CARRE\n");
    break;
  case PSP_CTRL_TRIANGLE:
    printf("Bouton : TRIANGLE\n");
    break;
  case PSP_CTRL_CIRCLE:
    printf("Bouton : ROND\n");
    break;
  case PSP_CTRL_CROSS:
    printf("Bouton : CROIX\n");
    break;
  default:
    break;
}
//Affichage des coordonnées du curseur
//La position 0,0 correspond au coin supérieur gauche de l'écran
printf("Coordonnees (X,Y) : (%d, %d)\n", pad.Lx, pad.Ly);

Pour une liste détaillée des touches, vous pouvez consulter la documentation du SDK : pspsdk-1.0+beta2: Controller Kernel Library.

 

C'est sympa de lire et d'afficher le nom de la touche qui est appuyée, mais il faudrait que l'on pense à pouvoir quitter le programme en appuyant sur une touche : par exemple la touche START. L'exemple du SDK n'y fait pas référence mais il est toujours intéressant de se pencher sur la question.

Dans ce cas, il nous faut rajouter un case dans notre switch et faire appel à la fonction d'arrêt du programme sceKernelExitGame.

1
2
3
case PSP_CTRL_START:
  sceKernelExitGame();
  break;

 

Maintenant, il faut s'intéresser à la compilation. Pour que cette étape se passe sans problèmes, il nous faut ajouter la librairie pspdebug dans notre Makefile.
1
LIBS = ..... -lpspctrl ....

 

III. Capture d'écran :

La capture d'écran ci-dessous est une capture de l'exemple original du sdk et pas une capture de ce que l'on a vu précedemment.

Screenshot - Sample SDK controller basic

 

IV. Conclusion :

Voila, vous avez les bases pour savoir vous servir du controleur de la PSP. Maintenant, il ne vous reste plus qu'à tester toutes les touches et toutes les possibilités que cela offre : réalisation d'un menu, d'un OSK (pour les plus courageux),...

​