DINGOO TOOLCHAIN DINGOOS - Tutoriaux Gx-mod
Logo name
Menu
Navigation

. Accueil



> DINGOO TOOLCHAIN DINGOOS


user posted image

user posted image


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).

Sommaire

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

Dernière modification de cette page le 12 mars 2010 à 12:33.
  Cette page a été consultée 1 808 fois. 

Reproduction interdite sans autorisation - Copyright © Gx-Mod - Déclaration CNIL 831.

IpbWikiPowered by MediaWiki