Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

fxSDK, un SDK alternatif pour écrire des add-ins

Posté le 29/08/2014 22:00

Cette page sert d'index pour la série de topics du fxSDK.

Le fxSDK est une collection d'outils permettant de développer des add-ins pour les calculatrices Casio des séries Graph. C'est une alternative au fx-9860G SDK et PrizmSDK qui ne sont plus activement maintenus, et le compagnon classique de mon noyau gint.

Index des topics

Ce projet existe depuis 2015, alors il y a pas mal de topics liés. En voici une liste complète !

Topics principaux

Installation du fxSDK

Tutoriels

Compatibilité sur calculatrice et PC

Côté PC, le fxSDK est compatible avec Linux, Mac OS, et WSL pour Windows ; normalement tout le monde peut l'utiliser. Je teste constamment sous Linux, et WSL est un Linux donc c'est testé aussi. Je n'ai pas de Mac OS donc il peut y avoir quelques surprises, mais en général c'est l'affaire de corriger un bug ou deux.

En termes de calculatrices, le fxSDK supporte :

Calculatrices monochromes
  • Graph 35+E II
  • Graph 35+ USB / Graph 35+E (SH3/SH4)
  • Graph 75/75+/75+E
  • Graph 85/85 SD/95 (SD) (pas activement testé)

Calculatrices couleurs
  • Graph 90+E / fx-CG 50
  • Prizm fx-CG 10/20

Comment installer le fxSDK et coder des add-ins

Le fxSDK s'installe à partir de dépôts Git sur la forge de Planète Casio (par exemple Lephenixnoir/fxsdk). Il y en a un peu beaucoup, donc manuellement c'est assez long. Pour que ça aille plus vite et pour simplifier le travail des débutants, il y a un outil appelé GiteaPC qui peut faire ça pour vous.

Si vous utilisez Windows, vous aurez besoin de WSL pour accéder à un système Linux dans Windows. Heureusement, Microsoft a fait ça bien et c'est facile à faire. Voyez le tutoriel d'installation de WSL 2 (et l'explication rapide de ce que WSL 2 est).

Si vous utilisez Mac OS, ouvrez l’œil en lisant les topics pour ne pas manquer les informations supplémentaires et éventuelles déviations par rapport à la procédure normale sous Linux.

Méthode automatique avec GiteaPC (plus rapide / recommandée pour les débutants)
  1. Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.

Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
  1. Dark Storm maintient MiddleArch, un dépôt de paquets précompilés qui a entre autres le fxSDK.

Méthode manuelle (plus fine / classique pour les habitués)
  1. Compilez et installez le cross-compilateur GCC pour SuperH.
  2. installez (dans cet ordre) les dépôts fxSDK, OpenLibm, fxlibc, gint ; en option, Slyvtt/µSTL_2.3.

Description sommaire du fxSDK

Pour une introduction à l'utilisation du fxSDK qui montre comment utiliser les outils pour développer un add-in, lisez plutôt les tutoriels d'utilisation de gint. Cette section est juste une description sommaire.

Le cœur du fxSDK est un cross-compilateur GCC pour SuperH, habituellement nommé sh-elf-gcc. Bien sûr on a avec toute la suite d'outils, dont as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, GCC est un compilateur moderne avec beaucoup d'options et capable de très solides optimisations.

Sur la calculatrice, c'est le noyau gint qui fait la majorité du travail. Il remplace fxlib/libfxcg et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !

Il y a enfin plusieurs outils utiles sur le PC qui sont utilisés durant le développement ou l'utilisation des add-ins :

  • fxsdk est un script shell qui permet de créer et compiler les projets sans se prendre trop la tête. Le système de compilation officiel pour les add-ins est CMake, mais un système plus ancien de Makefile est encore supporté.
  • fxconv est un outil très polyvalent qui convertit à la compilation les assets (images, polices, maps....). Il permet de travailler avec des logiciels et formats de fichiers normaux sur le PC et d'avoir automatiquement un format optimisé sur la calculatrice. fxconv est extrêmement extensible et chaque projet peut ajouter des conversions personnalisées.
  • fxgxa crée les fichiers g1a (format des add-ins pour Graph monochromes) et g3a (format des add-ins pour Graph couleurs) à partir des programmes compilés.
  • fxlink est un outil de communication qui peut transférer des fichiers vers les Graph 35+E II et Graph 90+E en ligne de commande, mais aussi échanger interactivement avec les add-ins gint par le câble USB, et est couramment utilisé pour réaliser des captures d'écran ou captures vidéo des add-ins.


Changelog et informations techniques

Ci-dessous se trouve la liste des posts annonçant les nouvelles versions du fxSDK, ainsi que des liens vers les instructions/tutoriels supplémentaires publiés avec.

VersionDateInfos supplémentaires
fxSDK 2.9.129 Août 2022
fxSDK 2.9.021 Août 2022Réinstallation complète nécessaire
fxSDK 2.8.017 Mai 2022
fxSDK 2.7.119 Mars 2022
fxSDK 2.7.031 Décembre 2021Collecter toutes les images d'un projet avec fxconv
fxSDK 2.6.030 Août 2021Génération de structures complexes avec fxconv
fxSDK 2.5.24 Juillet 2021
fxSDK 2.5.14 Juillet 2021
fxSDK 2.5.025 Mai 2021
fxSDK 2.4.027 Avril 2021
fxSDK 2.3.130 Janvier 2021
fxSDK 2.3.029 Janvier 2021Introduction de fxconv-metadata.txtInstructions de migration vers CMake
Séparation de libprof en fx/cg



Précédente 1, 2, 3 ··· 5, 6, 7, 8, 9, 10, 11 ··· 20 ··· 30 ··· 35, 36, 37 Suivante
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 09/07/2015 16:36 | #


Lephenixnoir a écrit :
Au fait Intelligide, tu la gères comment ta coloration syntaxique toi ?


Ben avec un fichier XML pour le style et les couleurs et une QList contenant les regex
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 09/07/2015 16:38 | #


Intelligide a écrit :
Ben avec un fichier XML pour le style et les couleurs et une QList contenant les regex

Explique-moi ce que ça a d'évident.

Parce que le XML tu le parses comment ? Il y a un module pour ça intégré à Qt il me semble...
Et ça veut dire qu'à chaque fois que tu trouves un match pour une regex tu es obligé de lire le fichier pour trouver le format correspondant !?
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 09/07/2015 16:42 | #


En fait, j'utilise un QMap<QString, QString>

Lephenixnoir a écrit :
Parce que le XML tu le parses comment ? Il y a un module pour ça intégré à Qt il me semble...
Et ça veut dire qu'à chaque fois que tu trouves un match pour une regex tu es obligé de lire le fichier pour trouver le format correspondant !?


En fait, c'est un fichier comme ça:
<?xml version='1.0' encoding='UTF-8'?>
<style-scheme>
    <style foreground="#000000" background="#ffffff" name="Text"/>
    <style foreground="#ffffff" background="#3399ff" name="Selection"/>
    <style foreground="#a0a0a0" background="#f0f0f0" name="Line number"/>
    <style name="Current Line"/>
    <style foreground="#000000" name="Function"/>
    <style foreground="#000080" name="Number"/>
    <style foreground="#808000" name="Keyword"/>
    <style foreground="#008000" name="String"/>
    <style foreground="#000080" name="Preprocessor"/>
    <style foreground="#008000" name="Comment"/>
    <style foreground="#000000" name="Operator"/>
    <style foreground="#008000" name="Multiline Comment"/>
</style-scheme>


Pour parser, j'utilise QtXML qui est très simple le principe est que je parse chaque <style> puis je cherche le regex dont l'index dans le QMap est name puis j'applique avec une classe hérité de QSyntaxHighlighter
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 09/07/2015 16:47 | #


Intelligide a écrit :
En fait, j'utilise un QMap<QString, QString>

Donc tu as bien les deux en RAM. Ok, ça me paraissait plus logique aussi.

Intelligide a écrit :
Pour parser, j'utilise QtXML qui est très simple

Moi j'ai trois (deux) regex, c'est simple aussi

Intelligide a écrit :
le principe est que je parse chaque <style> puis je cherche le regex dont l'index dans le QMap est name puis j'applique avec une classe hérité de QSyntaxHighlighter

Je suppose que tu as repris l'exemple de la doc de Qt ?
Et comment gères-tu le commentaire multi-ligne ? La méthode highlightBlock() de QSyntaxHighlighter ne colore qu'un bloc (qui est en réalité une ligne) donc une regex simple ne peut pas discerner une ligne entre /* et */ d'une autre ligne.
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 09/07/2015 16:51 | #


pour le commentaire multiligne, je sais plus mais je pense que j'ai laissé l'exemple de Qt en attendant de trouver quelques pistes pour colorer un texte sans html (je pense avoir trouver avec cet exemple)
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 09/07/2015 16:58 | #


Oh, je ne connaissais pas cet exemple, merci du lien.

Est-ce que tu pourrais faire un test pour moi ? Écrire une chaîne de caractères constante (entre double quotes) sur plusieurs lignes dans ton éditeur et me dire si elle colorée.

Au fait, je me rends compte que j'ai oublié quelque chose : un second niveau de coloration pour les règles qui ne s'appliquent qu'au sein de règles multi-lignes. Pour deux exemples flagrants, on peut prendre les caractères échappés dans les chaînes de caractères ou les formats de type javadoc dans les commentaires en /**.

Puisque mes règles multi-lignes ont des noms, je dois pouvoir implémenter ça « facilement ». Si j'y arrive ça va commencer à avoir de la gueule !
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 09/07/2015 17:01 | #


Lephenixnoir a écrit :
Oh, je ne connaissais pas cet exemple, merci du lien.

Est-ce que tu pourrais faire un test pour moi ? Écrire une chaîne de caractères constante (entre double quotes) sur plusieurs lignes dans ton éditeur et me dire si elle colorée.


Dans le fxsdk ou le winsdk?
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 09/07/2015 17:19 | #


Oh, dans le WinSDK. ton éditeur »)
Dark storm En ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 09/07/2015 17:31 | #


Au passage Lephe, y'avais un bug dans ton algo l'autre jour : dans "Hello World 123 du texte", il colorie en numéraire les chiffres.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 09/07/2015 17:33 | #


Ben, c'était juste une histoire d'ordre... comme il colorait les constantes numériques après le texte, tu avais ce résultat dérangeant...

Maintenant, c'est réglé.
Dark storm En ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 09/07/2015 17:33 | #


Ah, j'ai eu peur
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 09/07/2015 19:19 | #


J'ai mis à jour le screen, vous pouvez y voir la coloration syntaxique « récursive » avec le @return dans le commentaire du main() !
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 10/07/2015 13:35 | #


Après avoir tester, je suis un peu déçu

1) C'est juste une fenêtre graphique avec un bon design
2) Il n'y a pas d'options, donc on peut pas régler le compilo ni le wrapper
3) On peut pas créer de polices

En fait, pour l'instant, les seuls trucs sont la compilation et la coloration syntaxique

Ensuite, au niveau du code, je pense que je vais prendre ton parser de stylesheet ( avec le respect de la license, bien sur)

Enfin,
La police a-t-elle une taille correcte ? Je trouve qu'elle est petite et que du 12px c'est mieux
L'aspect de la fenêtre correspond-il aux captures du topic ? Yep
Double-cliquez sur 'main.c', à gauche. La coloration syntaxique est-elle correcte ? Yep

Compilez le projet (Ctrl + B). Si possible, incluez le log
make: entrant dans le répertoire « /home/yoann/Téléchargements/fxSDK-b/tmp »
sh3eb-elf-gcc -c /home/yoann/Téléchargements/fxSDK-b/tmp/main.c -o build/main.c.o -m3 -mb -O9 -Wall -Iinclude -Llib -L/home/yoann/Téléchargements/fxSDK-b/tmp
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c: In function 'main':
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: warning: implicit declaration of function 'cos' [-Wimplicit-function-declaration]
   p[i].x = 24 * cos(angle) + 64;
                 ^
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: warning: incompatible implicit declaration of built-in function 'cos'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: note: include '<math.h>' or provide a declaration of 'cos'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: warning: implicit declaration of function 'sin' [-Wimplicit-function-declaration]
   p[i].y = 24 * sin(angle) + 32;
                 ^
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: warning: incompatible implicit declaration of built-in function 'sin'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: note: include '<math.h>' or provide a declaration of 'sin'
sh3eb-elf-as -c /home/yoann/Téléchargements/fxSDK-b/tmp/crt0.s -o build/crt0.s.o
sh3eb-elf-gcc build/main.c.o build/crt0.s.o -o "build/tmp.elf" -T addin.ld -nostdlib -Llib -L/home/yoann/Téléchargements/fxSDK-b/tmp -lfx
/usr/programs/sh3eb-elf-gcc/lib/gcc/sh3eb-elf/5.1.0/../../../
sh3eb-elf-objcopy -R .comment -R .bss -O binary "build/tmp.elf" "build/tmp.bin"
../sh3eb-elf/bin/ld: warning: section `.bss' type changed to PROGBITS
g1a-wrapper "build/tmp.bin" -o "tmp.g1a" -i icon.bmp
-- g1awrapper : 2008 Andreas Bertheussen, 2011 Leo Grange.
[>] Reading icon file 'icon.bmp'.
offset : 130
header size : 108
[W] Unreconized BMP file. Icon will be BLANK.
[I] File 'build/tmp.bin' selected as binary source.
[I] File 'tmp.g1a' selected for G1A file.
[I] Timestamp: 2015.0710.1129
[I] G1A size:  1032
[>] Writing header.. OK.
[>] Writing data.. OK.

Output size is 1032 bytes.
make: quittant le répertoire « /home/yoann/Téléchargements/fxSDK-b/tmp »


Ajoutez des fichiers au projet temporaire en choisissant Project > Add Files.
Ensuite, retirez-les un par un via le menu contexuel, en cliquant droit sur
leurs entrées dans le panneau de projet. (J'ai eu des crashs sur cette action.)

J'ai pas eu de crash

Cliquez sur le bouton 'Debug information'. Y a-t-il bien trois chemins valides dans la fenêtre du terminal ? Il ne se passe rien

Via le menu 'Settings', changez le nom du projet et sauvegardez-le dans un dossier vide. Si possible, incluez le fichier .pro créé dans le dossier. Fermez et relancez le fxSDK, choisissez Project > Open et sélectionnez le dossier précédemment utilisé. Le projet doit se charger sans problème. Aucun problème

Ajouté le 10/07/2015 à 13:36 :
et on peut pas fermer les fichiers
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 10/07/2015 13:46 | #


Intelligide a écrit :
Après avoir tester, je suis un peu déçu

1) C'est juste une fenêtre graphique avec un bon design
2) Il n'y a pas d'options, donc on peut pas régler le compilo ni le wrapper
3) On peut pas créer de polices

Comme je l'ai dit, ce n'est qu'une version de toute base, le « noyau dur » pour éditer et compiler du code. Les options de paramétrage du compilateur et du wrapper seront assez faciles à mettre en place, je m'en occuperai « assez » rapidement. Quant aux polices, l'éditeur existe déjà, je n'ai qu'à l'intégrer pour pouvoir éditer directement.

Intelligide a écrit :
En fait, pour l'instant, les seuls trucs sont la compilation et la coloration syntaxique

C'est exact ! Les seuls éléments vraiment nécessaires pour écrire des programmes, tu remarqueras.
N'oublie pas que je ne cherche pas le fonctionnalité de l'IDE mais du programme final...

Intelligide a écrit :
Ensuite, au niveau du code, je pense que je vais prendre ton parser de stylesheet ( avec le respect de la license, bien sur)

Erf, s'il y a bien un truc que j'aurais aimé éviter, c'est bien celui-là.
Pas que ça me dérange -bien au contraire- mais ce parser est moche : je pourrai utiliser des regex, et si tu testes rapidement, tu verras qu'on ne peut pas mettre deux thèmes dans le même fichier (ça ne fonctionne pas) : ensuite ça manque drastiquement de fonctions (du style @highlight = lighten(@text, 20)), mêmes basiques, et le concept du « langage » est pas fini de travailler.
Bon, tu peux l'utiliser hein (en terme de license contente-toi de dire que le code est de moi si tu le veux, ça ira), mais je ne te le conseille pas, du moins pas pour l'instant.

Intelligide a écrit :
La police a-t-elle une taille correcte ? Je trouve qu'elle est petite et que du 12px c'est mieux
L'aspect de la fenêtre correspond-il aux captures du topic ? Yep
Double-cliquez sur 'main.c', à gauche. La coloration syntaxique est-elle correcte ? Yep

Excellent.

Le log est super, désolé pour le wrapper, comme je l'ai dit à Nemhardy c'est en fait le mien, que j'ai oublié de vous passer.

Intelligide a écrit :
Ajoutez des fichiers au projet temporaire en choisissant Project > Add Files.
Ensuite, retirez-les un par un via le menu contexuel, en cliquant droit sur
leurs entrées dans le panneau de projet. (J'ai eu des crashs sur cette action.)

J'ai pas eu de crash

Win \o/

Intelligide a écrit :
Cliquez sur le bouton 'Debug information'. Y a-t-il bien trois chemins valides dans la fenêtre du terminal ? Il ne se passe rien

Est-ce que tu as retiré toutes les ressources, y compris les trois de base ? Si tu as le temps, essaye avec un projet neuf, juste en ouvrant le SDK.

Intelligide a écrit :
Via le menu 'Settings', changez le nom du projet et sauvegardez-le dans un dossier vide. Si possible, incluez le fichier .pro créé dans le dossier. Fermez et relancez le fxSDK, choisissez Project > Open et sélectionnez le dossier précédemment utilisé. Le projet doit se charger sans problème. Aucun problème

Super !

Intelligide a écrit :
et on peut pas fermer les fichiers

Hmm, si. Comme dans tous les systèmes d'onglets, Ctrl + W.
Nan, sérieusement, t'as pas essayé ça ?
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 10/07/2015 13:53 | #


Hmm, si. Comme dans tous les systèmes d'onglets, Ctrl + W.
Nan, sérieusement, t'as pas essayé ça ?


Nan je suis pas trop raccouris j'aime faire trainer les choses et une petite croix, c'est pas la fin du monde( juste la fin d'un prophète )
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 10/07/2015 13:54 | #


Ok, je plaide coupable. J'ai oublié de mettre la croix. x)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 10/07/2015 13:56 | #


croix le ou pas, c'est mieux avec
Dark storm En ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 10/07/2015 14:00 | #


Un ordi, visuellement, c'est un clavier plus un écran. Le reste c'est superflu

Il a pas tord quand même, une petite croix c'est bien

Au passage, pour le wrapper, Kris en avait pas fait un perso lui aussi ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 10/07/2015 14:02 | #


Dark storm a écrit :
Un ordi, visuellement, c'est un clavier plus un écran. Le reste c'est superflu


Tu joues à des FPS avec seulement ton clavier ?
Dark storm En ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 10/07/2015 14:02 | #


Oui (le pire, c'est que c'est vrai).
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 10/07/2015 14:03 | #


Ben, le wrapper qu'Intelligide a utilisé c'est celui de Kris. Mais il est assez incomplet, pour dire vrai...
Précédente 1, 2, 3 ··· 5, 6, 7, 8, 9, 10, 11 ··· 20 ··· 30 ··· 35, 36, 37 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 43 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd