DINGOO TOOLCHAIN DINGOOS |
|
|
Voici un petit tutoriel pour ceux qui souhaitent créer des homebrews pour l'OS natif de la Dingoo (que j'appellerais DingoOS). Il est basé sur des tutoriels du forum Dingoonity (site ici).
Pré-requis :
- Cygwin : grossièrement, il s'agit d'un "émulateur" Linux tournant sous Windows, cela permet de se retrouver avec un environnement Linux sous Windows. Celui-ci inclut le compilateur MIPSEL nécessaire à la compilation sur DingoOS, plus les librairies utiles à la programmation.
- Dingoo SDK : Regroupe le dossier nécessaire à la compilation (dont le fameux Makefile), ainsi qu'un squelette d'application.
Parce que j'en avais marre de tout le temps chercher le SDK sur différents forum ou des serveurs FTP chinois (avec une bande passante rappelant le bon vieux temps du 56k...), j'ai préparé un petit pack prêt à l'emploi que vous trouverez à cette adresse.
Mise en place :
- Décompressez l'archive à la racine du lecteur C:\. Vous devriez donc avoir maintenant deux dossiers nommés cygwin et dingoo_sdk.
- Entrez dans le dossier cygwin et cliquez sur le fichier cygwin.reg, ajoutez les infos au registre Windows. Ceci va permettre de déclarer au système les chemins nécessaires à Windows pour lancer la compilation sans erreur.
Voilà, votre SDK est en place ! On peut maintenant passer à un test de compilation.
Test de compilation :
Entrez dans le dossier c:\dingoo_sdk et lancez le fichier shell.bat. Ce fichier met en place l'environnement adéquat pour compiler, et ouvre une fenêtre de commande. Tapez build et appuyez sur entrée. Une série de code devrait apparaître, et se finir lorsque l'invite vous demande d'appuyer sur une touche pour continuer. Vous remarquerez alors qu'un fichier boot.app est apparu dans le dossier c:\dingoo_sdk. Il ne s'agit ni plus ni moins que de votre première application pour Dingoo Transférez-là sur votre console pour essayer !
Si vous voulez nettoyer le bazar laissé par le compilateur, entrez dans l'invite de tout à l'heure la commande clean et appuyez sur entrée.
Analyse du programme :
Voici une analyse succinte du fichier main.c qui explique le fonctionnement basique d'un programme :
CODE
int x = DISPLAY_WIDTH / 2, y = DISPLAY_HEIGHT / 2;
- DISPLAY_WIDHT et DISPLAY_HEIGHT sont des constantes initialisées dans le fichier lib/include/display.h. Elles correspondent à la longueur et à la largeur en pixels de l'écran de la Dingoo. En fait ici on affecte deux variables x et y qui ont pour valeur la moitié des tailles de l'écran (soit 160 et 120). Ces valeurs définiront ensuite la croix que vous voyez sur le programme.
CODE
int i = 0;
- La variable i permet d'afficher le nombre de frames générées depuis le début du programme, nous y reviendrons un peu plus tard.
CODE
display_t *display;
bitmap_t *screen;
console_t *console;
- On initialise trois variables dynamiques qui correspondent à l'écran, l'affichage et la console.
CODE
ctrl_init();
- Initialise le système d'entrées du pad. Le programme reçoit la valeur keymap de chaque touche située dans le fichier lib/include/pad.h.
CODE
display = display_init(DISPLAY_BUFFER_AUTO, NULL);
- Initialise le système d'écran. Pour le premier paramètre, deux constantes sont possibles : DISPLAY_BUFFER_AUTO et DISPLAY_BUFFER_USER (vu dans lib/include/display.h). Le deuxième paramètre reçoit des données qui servent au programme si DISPLAY_BUFFER_USER a été choisi (à creuser, çà devient compliqué d'aller au fond de la chose...).
CODE
screen = graphics_init(display);
- Initialise le système d'affichage. On lui passe en paramètre le système d'écran crée précédemment. Pareil, c'est assez compliqué comme système...
CODE
console = console_init(screen, CONSOLE_TRANSPARENT);
- Initialise la console. En premier paramètre on envoie le système d'affichage crée précédemment. Le deuxième paramètre est un flag qui peut avoir deux valeurs, CONSOLE_NONE et CONSOLE_TRANSPARENT.
CODE
graphics_clear(screen, RGB(0x00, 0x00, 0x00));
- Tout simplement une commande pour effacer l'écran de la console. Le premier paramètre est l'écran sur lequel on doit agir, et le deuxième est une palette de couleur au format RGB. (0x00, 0x00, 0x00) représente la couleur noire (Rouge : 0, Vert : 0, Bleu : 0). Si on avait voulu mettre un affichage blanc, il aurait suffit de changer la valeur de la palette RGB en (0xFF, 0xFF, 0xFF).
CODE
while(1)
{
...
}
- Voici la boucle du programme. C'est elle qui va tourner sans arrêt et déclencher la plupart des évènements comme le changement de l'affichage, l'interrogation du pad... Pour faire simple, sortez à un moment de cette boucle et le programme s'arrête. Voyons un peu en détail ce que fait cette boucle...
CODE
graphics_clear(screen, RGB(0x00, 0x00, 0x00));
- On efface tout d'abord l'écran. Bah oui, si on efface pas l'écran à chaque fois, on va écraser l'affichage précédent...
CODE
ctrl_poll();
- Fonction très utile ! C'est elle qui va interroger le pad pour savoir quelle touche est actuellement pressée. Il semblerait que ce SDK ait implémenté un système permettant de gérer l'appui simultané sur plusieurs touches.
CODE
if(ctrl_pressed(CTRL_BUTTON_START))
break;
- Tout simple, cette ligne précise que si la touche START est pressée, on sort de la boucle, et donc on entraîne la fin du programme.
CODE
if(ctrl_pressed(CTRL_DPAD_UP))
if(y > 0)
y--;
if(ctrl_pressed(CTRL_DPAD_DOWN))
if(y < DISPLAY_HEIGHT)
y++;
if(ctrl_pressed(CTRL_DPAD_LEFT))
if(x > 0)
x--;
if(ctrl_pressed(CTRL_DPAD_RIGHT))
if(x < DISPLAY_WIDTH)
x++;
- En fonction de la touche appuyée, on change les valeurs des variables x et y, ceci ayant pour but de diriger la petite croix que l'on voit sur l'écran (j'appellerais ça un embryon de souris ).
CODE
graphics_line(screen, x - 5, y, x + 5, y, RGB(0x00, 0xaa, 0xee));
graphics_line(screen, x, y - 5, x, y + 5, RGB(0x00, 0xaa, 0xee));
- On trace deux lignes sur l'écran screen, aux coordonnées x et y, et on leur donne la couleur RGB que l'on veut.
CODE
i++;
- On ajoute 1 à notre variable i, ce qui veut dire qu'une frame de plus est ajoutée au compteur (utile si l'on veut afficher les FPS, ou gérer des timers par exemple).
CODE
console->x = CONSOLE_COORD(0);
console->y = CONSOLE_COORD(0);
- On replace les pointeurs de la console (x=longueur, y=largeur) à 0, c'est à dire en haut à gauche.
CODE
console_printf(console, "i = %d\npath = %s\n", i, *argv);
- On demande à la console d'afficher du texte. Ici on peut remarquer qu'on lui demande d'afficher le nombre de frames générées depuis le lancement du programme (la variable i de tout à l'heure), et également le chemin de l'application dans le système de la console.
CODE
display_flip(display);
- Enfin, on bascule l'affichage qu'on a crée et qui était dans le buffer sur l'écran de la console. Il faut savoir que tout se qui à trait à l'affichage est écrit dans un buffer et envoyé à l'écran à la fin de la boucle, à des fin de performances.
CODE
ctrl_end();
console_end(console);
display_end(display);
graphics_end(screen);
- Une fois sortis de la boucle (par l'intermédiaire de la touche start), on peut libérer les ressource (clavier, affichage...).
CODE
return 0;
- On retourne un code. Ceux qui connaissent un peu les programmes en ligne de commande comprendront l'utilité de retourner un code, par exemple en cas d'erreur.
Et maintenant :
Maintenant, il ne vous reste plus qu'à créer votre propre code. Petit conseil, placez vos sources dans le dossier src (virez le main existant), mais ne supprimez pas ce qui est contenu dans le dossier lib. Il s'agit d'un mini SDK qui peut être très utile puis qu'il contient des fonctions pré-écrites pour simplifier le développement (gestion du son, de la vidéo, des touches, et autres joyeusetés...). Vous n'avez plus qu'à nous coder un petit truc sympa, ou porter un code existant pour DingoOS !
Remerciements :
yoannd26
booboo
Les p'tits gars du forum Dingoonity
L'ensemble des hackers et bidouilleurs qui s'arrachent les cheveux pour nous proposer des homebrews de qualité.
Tutoriel réalisé par prudho
Retranscrit sur le wiki par oliveroidubocal pour Gx-mod.com
Vous pouvez poster vos commentaires sur le forum en suivant ce lien : Lien forum