En 2015/2016, dans le monde balbutiant des utilitaires de communication avec fx-9860G et compatibles Linux, on trouvait un
xfer9860 vieillissant et pas très fonctionnel, et un
UsbConnector qui ne supportait pas assez de features. Alors en août 2016, j'ai fini par faire
p7, une implémentation des interactions avec la mémoire de stockage avec le protocole 7.00 tel que
documenté par Simon Lothar.
Tel que le veut la tradition capitaliste, maintenant que j'avais quelque chose qui fonctionnait et était apprécié de la communauté, il s'agissait de grandir. Les autres commandes du protocole 7.00 requièrent une connaissance beaucoup plus approfondie de la mémoire principale et de formats bien plus diversifiés, alors il est temps de s'enfoncer dedans et de gérer ces formats ; c'est ainsi qu'en novembre 2016, je sors la
libg1m. Mais voilà, ces formats requièrent un encodage de caractères qu'il faut gérer également, alors hop, le même mois, la
référence FONTCHARACTER est annoncée.
En 2018/2019, alors que je reprends mes études, je me rends compte que tout ça fait beaucoup de projets à interconnecter, documenter et faire marcher ensembles ; alors j'entreprends d'en faire un projet commun, nommé "libcasio", où j'en profite pour aller au bout de mon refactoring en séparant les différentes couches, introduisant beaucoup de complexité mais beaucoup de flexibilité au niveau du design, introduisant des concepts assez intéressants mais qui sortent du cadre simple de la communication avec des calculatrices CASIO, au point même que j'en extraierai l'I/O dans une bibliothèque nommée "libtio" (pour "Touhey I/O").
La libcasio a de belles réussites, notamment avec l'ajout d'un utilitaire nommé "p7os" qui permet, enfin, de flasher une calculatrice depuis Linux, faisant au passage deux victimes collatérales sous la forme de deux Graph 35+USB, celle que j'avais au lycée et celle d'
Eltoredo qui en a fait don pour la science (merci à lui !). C'est
Lailouezzz qui réussira le premier flash avec p7os ; une commande était incorrecte, et il fallait en réalité en employer un autre. La barre était franchie, fxRemote ou même Windows n'est plus nécessaire pour flasher une calculatrice !
Seulement voilà, la libcasio était très complexe à maintenir, avec beaucoup de couches différentes, et j'étais seul à m'en occuper. Courant 2019, ma motivation s'effrite et je finis par m'intéresser à d'autres sujets, d'autres projets, et à délaisser les calculatrices CASIO.
Pendant quatre ans, nous avions donc une libp7 et des p7utils plus maintenus, une libcasio qui n'est jamais sorti, une myriade de petits projets plus maintenus non plus et dont le potentiel d'interconnexion avec les autres projets n'a jamais été exploité. Avec de plus, des utilitaires de moins en moins utiles dans la vie de tous les jours, puisque les fx-CG / Prizm / Graph 90+E ont un mode "clé USB" qui rend accessible leur contenu de façon standard.
Alors mi-février 2024, je me suis motivé et j'ai recommencé un projet similaire à la libcasio, mais avec les expériences que j'ai eues entretemps (beaucoup de documentation, un recours à la simplicité bien plus présent, et plus d'expérience en général), et un scope plus limité dans un premier temps : avoir les mêmes features que la dernière release de la libp7 et des p7utils, mais sous une forme plus maintenable et, surtout, documentée cette fois. Cet objectif a été atteint avec la release 0.1 de Cahute, qui a lancé ce topic !
Citer : Posté le 04/03/2024 15:32 | #
Ouah! C'est top ça! Ça marche sous une VM ou WSL? Sinon, bravo pour ce travail!
Citer : Posté le 04/03/2024 15:39 | #
Merci !
Sous une VM sous Linux ça doit marcher, à condition de déléguer l'accès aux périphériques représentant les calculatrices ou les câbles série à la VM pour qu'un p7 qui y soit puisse y accéder.
Sous WSL, aucune idée. J'ai quelques éléments de compatibilité avec la WinAPI et le projet compile avec MinGW donc quelqu'un de motivé peut probablement rédiger un tutoriel pour installer un driver compatible libusb ou les bons drivers pour les câbles USB/série (FTDI, ...) et faire tourner les utilitaires nativement. Mais n'ayant pas de Windows natif sur mes machines perso depuis ~2019/2020, cette personne motivée, ce ne sera pas moi.
Mon blog ⋅ Mes autres projets
Citer : Posté le 04/03/2024 15:58 | #
C'est intéressant comme compromis de supporter le pré-C89 mais pas Windows.
Citer : Posté le 04/03/2024 15:59 | #
Je fais ça pour que ce soit plus facile à porter, j'ai pas dit que ce serait moi qui porterais, remarque.
Mon blog ⋅ Mes autres projets
Citer : Posté le 04/03/2024 16:37 | #
Merci !
Sous une VM sous Linux ça doit marcher, à condition de déléguer l'accès aux périphériques représentant les calculatrices ou les câbles série à la VM pour qu'un p7 qui y soit puisse y accéder.
Sous WSL, aucune idée. J'ai quelques éléments de compatibilité avec la WinAPI et le projet compile avec MinGW donc quelqu'un de motivé peut probablement rédiger un tutoriel pour installer un driver compatible libusb ou les bons drivers pour les câbles USB/série (FTDI, ...) et faire tourner les utilitaires nativement. Mais n'ayant pas de Windows natif sur mes machines perso depuis ~2019/2020, cette personne motivée, ce ne sera pas moi.
Citer : Posté le 17/03/2024 22:22 | #
J'ai fini par merge la réimplémentation de p7os aujourd'hui dans develop avec !3.
Ceci ajoute les features suivantes :
Pas de release prévue pour le moment, ça arrivera quand ça arrivera.
Mon blog ⋅ Mes autres projets
Citer : Posté le 22/03/2024 13:26 | #
Il a fallu quelques fix, mais l'ensemble des utilitaires de Cahute sur la branche develop tourne correctement sous MacOS / OS X à présent, grâce à un contributeur externe
Pour plus de détails : https://gitlab.com/cahuteproject/cahute/-/issues/3
Mon blog ⋅ Mes autres projets
Citer : Posté le 23/03/2024 12:32 | # | Fichier joint
Premiers essais réussis avec le protocole CASIOLINK en mode réception, j'arrive à recevoir des captures d'écran monochrome et à les afficher avec p7screen (légèrement modifié pour lire depuis le port série en attendant !4) ! Il manque encore beaucoup d'étapes pour un bon support du protocole, mais ça avance
Mon blog ⋅ Mes autres projets
Citer : Posté le 23/03/2024 12:39 | #
Oh, c'est quoi comme modèle ça ?
Citer : Posté le 23/03/2024 12:41 | #
C'est une Graph 65 sur laquelle je fais mes tests actuellement (premier modèle pré-2004 qui a l'honneur de se confronter à Cahute). Elle a deux modes de partage d'écran : monochrome et couleur ; mais pour le moment Cahute ne supporte que le premier. Je suis en train d'ajouter le support du deuxième en ce moment-même
Mon blog ⋅ Mes autres projets
Citer : Posté le 24/03/2024 13:36 | # | Fichier joint
Et avec !9 vient le support des captures couleur pour la Graph 65 !
Mon blog ⋅ Mes autres projets
Citer : Posté le 24/03/2024 17:06 | #
GG Cake, ça le fait grave.
Purée par contre, j'avais oublié à quel point le début de la couleur chez Casio était kitchissime
Citer : Posté le 24/03/2024 21:45 | #
La version 0.2 de Cahute est publiée !
Elle inclue du rework sur les liens faits en communication série, notamment pour inclure une première implémentation du protocole CASIOLINK, et p7os, un utilitaire qui peut être utilisé pour flasher une calculatrice monochrome, ou simplement uploader et lancer un Update.EXE sur la calculatrice. Elle apporte également quelques fix, notamment pour faire marcher le projet correctement sur macOS / OS X.
À noter également que j'utilise maintenant l'onglet Releases sur le dépôt du projet sur Gitlab.com pour avertir les package maintainers et autres utilisateurs à l'installation manuelle. Cela se manifeste par :
Il reste beaucoup de choses à faire, dont certaines sont déjà représentées par des entrées sur l'issue tracker du projet. Je recherche notamment du monde et des suggestions pour le packaging de Cahute sous Windows et sous Debian. Mais comme le dit si bien Framasoft, la route est longue, mais la voie est libre !
Mon blog ⋅ Mes autres projets
Citer : Posté le 27/03/2024 19:15 | #
Aujourd'hui j'ai fait quelque chose que je voulais faire depuis longtemps : la découverte automatique de protocole sur port série, pour découvrir automatiquement si la calculatrice utilise du Protocole 7.00 ou du CASIOLINK ! Globalement j'envoie les deux checks avec des timeouts et je regarde si j'ai une réponse pour un protocole ou pour l'autre.
Avec une Graph 65 :
[2024-03-27 19:04:00 cahute info] determine_protocol_as_sender: 00000000 0530 3030 3730 .00070
[2024-03-27 19:04:00 cahute error] read_from_link: Hit a timeout of 100ms after reading 0/1 bytes.
[2024-03-27 19:04:00 cahute info] determine_protocol_as_sender: Sending the CASIOLINK check packet:
[2024-03-27 19:04:00 cahute info] determine_protocol_as_sender: 00000000 16 .
[2024-03-27 19:04:00 cahute info] read_from_link: Read 1 bytes in 0ms (after waiting 26ms).
[2024-03-27 19:04:00 cahute info] initialize_link_protocol: Using CASIOLINK (serial).
[2024-03-27 19:04:00 cahute info] initialize_link_protocol: Playing the role of sender / active side.
[2024-03-27 19:04:00 cahute info] close_link: Closing the link.
[2024-03-27 19:04:00 cahute info] casiolink_terminate: Sending the following end packet:
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000000 3A45 4E44 00FF FFFF :END....
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000008 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000010 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000018 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000020 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000028 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:04:00 cahute info] casiolink_terminate: 00000030 FFAB ..
The requested operation was not implemented yet.
Avec une Graph 75+E :
[2024-03-27 19:05:57 cahute info] determine_protocol_as_sender: 00000000 0530 3030 3730 .00070
[2024-03-27 19:05:57 cahute info] read_from_link: Read 6 bytes in 0ms (after waiting 34ms).
[2024-03-27 19:05:57 cahute info] initialize_link_protocol: Using Protocol 7.00 (serial).
[2024-03-27 19:05:57 cahute info] initialize_link_protocol: Playing the role of sender / active side.
[2024-03-27 19:05:57 cahute info] seven_send_and_receive: Sending the following packet to the device:
[2024-03-27 19:05:57 cahute info] seven_send_and_receive: 00000000 0130 3130 3646 .0106F
[2024-03-27 19:05:57 cahute info] seven_send_and_receive: Packet sent successfully, now waiting for response.
[2024-03-27 19:05:57 cahute info] read_from_link: Read 13 bytes in 0ms (after waiting 32ms).
[2024-03-27 19:05:57 cahute info] read_from_link: Read 164 bytes in 192ms.
[2024-03-27 19:05:57 cahute info] seven_receive: Received packet data is the following:
[2024-03-27 19:05:57 cahute info] seven_receive: 00000000 0630 3231 3030 4134 .02100A4
[2024-03-27 19:05:57 cahute info] seven_receive: 00000008 4779 3336 3330 3046 Gy36300F
[2024-03-27 19:05:57 cahute info] seven_receive: 00000010 5245 4E45 5341 5320 RENESAS
[2024-03-27 19:05:57 cahute info] seven_receive: 00000018 5348 3733 3535 3031 SH735501
[2024-03-27 19:05:57 cahute info] seven_receive: 00000020 3030 3030 3030 3030 00000000
[2024-03-27 19:05:57 cahute info] seven_receive: 00000028 3030 3030 3430 3936 00004096
[2024-03-27 19:05:57 cahute info] seven_receive: 00000030 3030 3030 3035 3132 00000512
[2024-03-27 19:05:57 cahute info] seven_receive: 00000038 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:05:57 cahute info] seven_receive: 00000040 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:05:57 cahute info] seven_receive: 00000048 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:05:57 cahute info] seven_receive: 00000050 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:05:57 cahute info] seven_receive: 00000058 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:05:57 cahute info] seven_receive: 00000060 FFFF FFFF FFFF FFFF ........
[2024-03-27 19:05:57 cahute info] seven_receive: 00000068 3032 2E30 392E 3232 02.09.22
[2024-03-27 19:05:57 cahute info] seven_receive: 00000070 3031 FFFF FFFF FFFF 01......
[2024-03-27 19:05:57 cahute info] seven_receive: 00000078 3030 3031 3030 3030 00010000
[2024-03-27 19:05:57 cahute info] seven_receive: 00000080 3030 3030 3234 3332 00002432
[2024-03-27 19:05:57 cahute info] seven_receive: 00000088 372E 3030 537A 5154 7.00SzQT
[2024-03-27 19:05:57 cahute info] seven_receive: 00000090 4D51 3347 FFFF FFFF MQ3G....
[2024-03-27 19:05:57 cahute info] seven_receive: 00000098 FFFF FFFF 4341 4B45 ....CAKE
[2024-03-27 19:05:57 cahute info] seven_receive: 000000A0 4649 5645 FFFF FFFF FIVE....
[2024-03-27 19:05:57 cahute info] seven_receive: 000000A8 FFFF FFFF 4242 ....BB
Warning: Preprogrammed ROM information looks wiped out!
Warning: Bootcode information looks wiped out!
CPU ID (probably out of date): RENESAS SH735501
Environnement ID: Gy36300F
Product ID: SzQTMQ3G
ROM capacity: 4096KiB
RAM capacity: 512KiB
OS version: 02.09.2201
OS offset: 0x00010000
OS size: 2432KiB
Username: CAKEFIVE
[2024-03-27 19:05:57 cahute info] close_link: Closing the link.
[2024-03-27 19:05:57 cahute info] seven_send_and_receive: Sending the following packet to the device:
[2024-03-27 19:05:57 cahute info] seven_send_and_receive: 00000000 1830 3030 3730 .00070
[2024-03-27 19:05:57 cahute info] seven_send_and_receive: Packet sent successfully, now waiting for response.
[2024-03-27 19:05:57 cahute info] read_from_link: Read 6 bytes in 0ms (after waiting 32ms).
[2024-03-27 19:05:57 cahute info] seven_receive: Received packet data is the following:
[2024-03-27 19:05:57 cahute info] seven_receive: 00000000 0630 3030 3730 .00070
Tout ça n'est pas grand chose, mais ça démontre que je commence à maîtriser suffisamment les différents protocoles et leurs interactions pour faire ce genre de choses
Mon blog ⋅ Mes autres projets
Citer : Posté le 27/03/2024 19:20 | #
Ooh donc tu peux autodétecter le bon protocole, c'est sympa ça.
Citer : Posté le 02/04/2024 17:44 | #
Cahute peut maintenant tourner sur du Win32 sur x86_64 correctement avec MinGW, avec support amélioré des ports série, de CESG502, de WinUSB (avec la libusb), et de l'overlap I/O pour le support des timeouts. Il manque encore le packaging, mais au moins, le coeur est présent.
Pour mes 0 utilisateurs sous Windows... x)
Mon blog ⋅ Mes autres projets
Citer : Posté le 02/04/2024 17:45 | #
Certes… il y a zéro utilisateur windows, mais on peut imaginer une gui cross-platform pour cahute
Citer : Posté le 02/04/2024 17:47 | #
Ah bah la GUI cross-platform c'est l'endgame du projet, pour enfin égaler la communauté TI qui a TiLP. Mais avant ça, y a beaucoup d'étapes...
Mon blog ⋅ Mes autres projets
Citer : Posté le 03/04/2024 15:23 | #
cahute 0.2 ne semble pas avoir de règle install() pour p7os ?
Citer : Posté le 03/04/2024 15:25 | #
Ouais, erreur de ma part qui a été fixed peu après la release :
https://gitlab.com/cahuteproject/cahute/-/commit/157f710ccd99ac6eb2595dec136f0b4a93a8bcbb
Ce sera fixed upstream pour la release 0.3, j'ai pas spécialement demandé aux packagers de faire un patch en attendant parce que c'est pas forcément nécessaire mais tu peux demander ça aux packagers Arch au besoin
Mon blog ⋅ Mes autres projets