I. Introduction : 

D'une manière générale, lorque l'on développe une application, on emploie la fonction printf pour débugguer ou pour afficher des informations.

Dans le développement sur PSP, nous n'aurons pas toujours l'occasion de pouvoir afficher du texte à l'écran.

En effet, lorsque nous aborderons la partie dédiée aux graphismes sur la PSP, il sera bien difficile de concilier "mode graphique" et "mode texte".

Pour cela, nous allons voir comment mettre en place un système simple nous permettant d'écrire un fichier de log à la place d'un printf.


II. Convention de développement :

Pour commencer, on va créer 2 fichiers : smartLog.h et smartLog.c.

Le premier contiendra les déclaration de types et les déclarations de fonctions, tandis que le second contiendra le code de toutes les fonctions déclarées dans le header (fichier .h). 

Le fichier source (.c) incluera le fichier header (.h) ainsi que tous les headers nécessaires au bon développement de notre librairie.

Chaque type de données que nous déclarons sera préfixé par la mot-clé smart et les fonctions par le nom de la librairie ici smartLog.

Les nom de variables seront toujours explicites afin de ne pas commettre d'erreurs lors de l'écriture du code.

 

III. Comment débugguer une application sans affichage à l'écran ?

Pour commencer, nous allons déclarer une fonction permettant d'ajouter une ligne dans un fichier : smartLog_addLine.

Il suffit de mettre cette ligne dans smartLog.h :

1
void smartLog_addLine(char *line);

 

Maintenant, nous allons nous occuper de son code.

Pour faire simple, notre fonction va écrire le contenu de la variable line dans un fichier que l'on va nommé smartlog.txt.

Pour cela, il nous faut ouvrir un fichier en mode a (append) afin de pouvoir ajouter une ligne à chaque fois et ne pas écraser ce que l'on a mis de dans précedemment.

Ensuite, on écrit le contenu de line dans le fichier ouvert puis on ferme le fichier.

Ce qui nous donne la fonction suivante :

1
2
3
4
5
6
7
8
void smartLog_addLine(char *line)
{
	FILE *fdesc;

	fdesc=fopen("smartlog.txt", "a");
	fwrite(line, 1, strlen(line), fdesc);
	fclose(fdesc);
}

 

Pour que cela fonctionne, il nous faut inclure stdio.h et smartLog.h:

1
2
#include <stdio.h>
#include "smartLog.h"

 

IV. Améliorations possibles :

Comme nous venons de le voir, notre librairie est très simple. C'est un avantage indéniable lorsque l'on ne veut seulement que quelques informations.

Par contre, cela devient un peu difficile lorsque l'on se met à programmer des applications plus complexes et que l'on a besoin de plusieurs fichiers de logs : applications multi-threadées par exemple.

Là, il faudra penser ou repenser la librairie afin de permettre la gestion multi-fichiers.

De même, il peut-être envisager de ré-écrire la fonction afin que le message qu'on passe puisse être formaté de la même manière que printf.

 

V. Exemple d'utilisation : 

Maintenant, nous allons voir comment utiliser notre librairie dans un programme simple.

Le programme suivant est dérivé de celui expliquant l'utilisation des touches de la PSP : Exemples SDK - controller - basic.

Pour commencer, on va supposer que savez comment on utilise le controleur de touches de la PSP.

Afin de pouvoir utiliser notre librairie, il nous faut l'inclure dans notre code source :

1
#include "smartLog.h"

 

Au début du programme principal main, nous allons déclarer une chaine de 500 caractères (ce qui est suffisant) qui contiendra le message que l'on veut envoyer dans le fichier de log.

1
char msg[500];

 

Enfin, dans notre exemple, à chaque appui sur une des touches TRIANGLE, CROSS, SQUARE ou CIRCLE nous allons envoyer le nom de la touche dans le log.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
switch(pad.Buttons)
{
	case PSP_CTRL_SQUARE:
		sprintf(msg, "Bouton : CARRE (num: %d)\n", pad.Buttons);
		smartLog_addLine(msg);
		break;
	case PSP_CTRL_TRIANGLE:
		sprintf(msg, "Bouton : CARRE (num: %d)\n", pad.Buttons);
		smartLog_addLine(msg);
		break;
	case PSP_CTRL_CIRCLE:
		sprintf(msg, "Bouton : CARRE (num: %d)\n", pad.Buttons);
		smartLog_addLine(msg);
		break;
	case PSP_CTRL_CROSS:
		sprintf(msg, "Bouton : CARRE (num: %d)\n", pad.Buttons);
		smartLog_addLine(msg);
		break;
	default:
		break;
}

 

ATTENTION, si vous voulez ouvrir correctement le fichier sous WINDOWS, il suffit de remplacer à la fin de chaque ligne '\n' par '\r\n'. 

Enfin, il nous faut faire référence à smartLog dans notre Makefile sous peine de voir des erreurs de compilation du type "Undefined Reference...".