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 15/07/2024 19:38 | #
Cahute/P7 est officiellement une des raisons de passer à Linux pour le développement sur calculatrice ! Merci @Calcloverhk
3. FA-124 is slow and inflexible
The transfer speed of FA-124 is slow especially for a project with large codebase like C.Basic. For transferring C.Basic FX 2.47-β2 (516484 bytes), FA-124 takes 70 seconds to complete, whereas its Linux-based alternative, Cahute/P7, only needs 22 seconds.
-- C.Basic #16 -- Transition to fxSDK/gint
Mon blog ⋅ Mes autres projets
Citer : Posté le 26/07/2024 01:08 | #
Une version "preview" de la documentation est maintenant disponible :
https://next.cahuteproject.org/
J'ai fini un bulk de travail sur la portabilité de Cahute ce soir, avec notamment un build sous Visual Studio 2022 qui fonctionne à présent. Les détails sur comment construire Cahute avec Visual Studio 2022 sont ici :
https://next.cahuteproject.org/guides/build.html#win-windows-xp-and-above-using-visual-studio
J'ai également corrigé #18, qui faisait que sous Windows, Cahute pouvait communiquer avec une fx-CG en ScreenRecv(XP) et Projector, mais pas ScreenRecv. Cependant en testant avec Screen Receiver, j'ai pu constater un vrai problème de performances dans les interactions avec la calculatrice dans ce mode, j'ai donc créé #30 pour suivre ça.
À noter que tous ces efforts n'adressent pas encore les problèmes abordés dans #10, qui parle de packaging sous Windows. Ce sujet est encore en attente d'une personne qui souhaiterait s'y intéresser.
Et en petit bonus, j'avais parlé de Cahute ici, sur TI-Planet, sur Casiopeia et l'UCF, mais pas Cemetech ; c'est chose faite avec ce topic.
Mon blog ⋅ Mes autres projets
Citer : Posté le 27/07/2024 18:36 | #
Hey, j'ai corrigé quelques soucis avec Cahute aujourd'hui, que je peux vous décrire ici.
#20, #27 : Les implémentations du Protocole 7.00 et CASIOLINK essaient maintenant plusieurs fois d'envoyer le paquet d'initialisation, avant de sortir si aucune réponse n'a été reçue dans un délai raisonnable.
La différence se fera notamment ressentir sur l'utilisation de calculatrices sur liaisons série, où le comportement précédent était de balancer le paquet d'initialisation et d'attendre indéfiniment, ce qui était assez inefficace dans le cas où la calculatrice était mise en mode réception après le lancement de l'utilitaire.
L'expérience utilisateur s'en retrouve un peu meilleure, et p7 et cie ne "plantent" plus quand la calculatrice n'est pas joignable sur liaison série.
#30 : p7screen (et l'équivalent dans la libcahute) est maintenant beaucoup plus rapide dans la réception de frames lorsqu'une fx-CG ou compatible (type Graph 90+E) est en mode ScreenRecv (F2).
Le secret réside tout simplement dans le fait de requêter le statut de la calculatrice via la commande SCSI 0xC0 toutes les 10/15 ms, par opposition aux 200 ms utilisés avant. (oui, ce secret est très nul)
Les modifications sont disponibles sur develop, et j'aimerais travailler sur encore quelques issues avant la prochaine release.
Mon blog ⋅ Mes autres projets
Citer : Posté le 02/08/2024 19:58 | #
J'adore le gain de perfs qui juste un poll plus fréquent, bien joué.
Citer : Posté le 07/08/2024 11:21 | #
Release 0.5 publiée aujourd'hui. Il s'agit d'une release bugfix, le changelog complet est ici (anglais).
Mon blog ⋅ Mes autres projets
Citer : Posté le 17/08/2024 21:30 | #
Cahute commence enfin à pouvoir lire les archives de la mémoire principale ! Quelques exemples avec la réimplémentation de CaS, suivant !71 :
2334 bytes Program "‐A".
422 bytes Program "‐C".
9478 bytes Program "‐D".
366 bytes Program "‐E".
106 bytes Program "‐G".
2698 bytes Program "‐H".
8270 bytes Program "‐J".
1730 bytes Program "‐S".
782 bytes Program "‐T".
298 bytes Program "‐W".
5886 bytes Program "CLONELAB".
$ ./CaS -icas ../samples/cas/EULER.CAS -t
264 bytes Program "EULER".
Cahute ne supporte encore que les programmes, et encore, pas les aspects spéciaux (du type les programmes BASE). Il me manque encore beaucoup d'étude pour pouvoir y intégrer d'autres types, prévus dans #35 ; mais c'est prévu
Mon blog ⋅ Mes autres projets
Citer : Posté le 31/08/2024 22:49 | #
Première communication réussie avec une Classpad 330 par USB ! Tout ça est dans !76 pour le moment.
[2024-08-31 22:45:29 cahute info] open_usb_link: Running vendor-specific interface request 0x01.
[2024-08-31 22:45:29 cahute info] open_usb_link: Bulk in endpoint address is: 0x82
[2024-08-31 22:45:29 cahute info] open_usb_link: Bulk out endpoint address is: 0x01
[2024-08-31 22:45:29 cahute info] open_link_from_medium: Using CASIOLINK (USB) over USB Bulk (libusb).
[2024-08-31 22:45:29 cahute info] open_link_from_medium: Playing the role of sender / active side.
[2024-08-31 22:45:29 cahute info] casiolink_initiate: Making the initial handshake (6 attempts, 500ms for each).
[2024-08-31 22:45:29 cahute error] read_from_link_medium: Hit a timeout of 500ms after reading 0/1 bytes.
[2024-08-31 22:45:29 cahute info] read_from_link_medium: Read 1 bytes in 1ms.
[2024-08-31 22:45:29 cahute info] casiolink_cas300_send_command: Sending the following packet to the device:
[2024-08-31 22:45:29 cahute info] casiolink_cas300_send_command: 00000000 0130 3030 3030 3430 .0000040
[2024-08-31 22:45:29 cahute info] casiolink_cas300_send_command: 00000008 3031 3137 41 0117A
[2024-08-31 22:45:29 cahute info] read_from_link_medium: Read 3 bytes in 1ms.
[2024-08-31 22:45:29 cahute info] casiolink_cas300_send_command: Received the following acknowledgement:
[2024-08-31 22:45:29 cahute info] casiolink_cas300_send_command: 00000000 0630 30 .00
[2024-08-31 22:45:29 cahute info] read_from_link_medium: Read 62 bytes in 3ms.
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: Received the following packet from the device:
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000000 0130 3030 3033 3530 .0000350
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000008 3030 3243 5034 3330 002CP430
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000010 FFFF FF30 302E 3030 ...00.00
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000018 2E30 2830 3330 3530 .0(03050
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000020 3030 3030 312E 3031 00001.01
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000028 2E30 3031 364D FFFF .0016M..
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000030 FFFF FF38 4DFF FFFF ...8M...
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000038 FFFF FF83 3234 ....24
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: Sending the following acknowledgement to the device:
[2024-08-31 22:45:29 cahute info] casiolink_cas300_receive_packet: 00000000 0630 30 .00
Warning: Preprogrammed ROM information looks wiped out!
Warning: Username is not set.
CPU ID (probably out of date):
Environnement ID: CP430
ROM capacity: 16384KiB
Bootcode version: 01.01.00
OS version: 03.05.0000
[2024-08-31 22:45:29 cahute info] close_link: Closing the link.
[2024-08-31 22:45:29 cahute info] casiolink_terminate: Sending the following packet to the device:
[2024-08-31 22:45:29 cahute info] casiolink_terminate: 00000000 1830 3130 3030 .01000
[2024-08-31 22:45:29 cahute info] read_from_link_medium: Read 3 bytes in 1ms.
[2024-08-31 22:45:29 cahute info] casiolink_terminate: Received the following acknowledgement:
[2024-08-31 22:45:29 cahute info] casiolink_terminate: 00000000 0630 31 .01
(et oui, la présentation des données est encore maladroite dans p7, parce qu'elle est maladroite dans la bibliothèque de Cahute. C'est un point que je me suis noté de retravailler dans #43)
Mon blog ⋅ Mes autres projets
Citer : Posté le 01/09/2024 02:47 | #
Pour faire une petite pause dans l'implémentation de CAS300, j'ai travaillé sur #41 ; Cahute offre maintenant dans son interface publique la possibilité d'utiliser ses liens pour envoyer et recevoir des données brutes aux calculatrices, avec les fonctions suivantes :
Ces fonctions ne peuvent être utilisées que lorsque le device est ouvert en mode générique, i.e. :
L'idée derrière cette feature est que vous puissiez vous appuyer sur la portabilité de Cahute pour implémenter votre protocole custom entre la calculatrice et vous, ou même faire des tests ou un nouveau client sur les protocoles existants, et donc ne pas avoir à refaire linkmedium.c.
Un guide avec exemple d'utilisation pour une connexion série avec Serial monitor est disponible sur Opening a generic link to a calculator connected by serial.
Cette feature n'est présente que sur develop pour le moment ; comme pour le reste, je suis toujours preneur de vos retours
Mon blog ⋅ Mes autres projets
Citer : Posté le 10/09/2024 15:10 | #
Que je me situe bien, du coup moralement tu peux implémenter tout ce que fait fxlink (sauf le raccourci pour transfert de fichiers UDisks) avec cahute avec cette fonctionnalité ?
Citer : Posté le 10/09/2024 21:02 | #
Tant que le device ne communique qu'avec du bulk comme le fait fxlink actuellement (excepté l'UMS pour le moment), les liens génériques de Cahute peuvent effectivement être utilisés avec des protocoles tels que ceux custom de fxlink, et permettent même de communiquer avec celui-ci par-dessus les drivers un peu relous tels que CESG502 (le driver sous Windows utilisé par FA-124).
En l'état je ne pense pas considérer l'idée d'implémenter le protocole de fxlink directement dans Cahute en revanche, en tout cas pas tant que l'ensemble des protocoles et formats de fichiers prévus ne sont pas implémentés.
Mon blog ⋅ Mes autres projets