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
Citer : Posté le 05/10/2024 16:44 | #
Pour celles et ceux qui souhaiteraient contribuer à Cahute, mais n'ont aucune idée de comment faire, j'ai refait le guide de contribution pour parler de l'ensemble des façons que je vois de contribuer, qui ne se limite pas simplement aux merge requests.
Un petit résumé en français de ce guide, vous pouvez contribuer en :
Et comme je travaille assez dur pour gagner la confiance des différentes communautés CASIO autour de ce projet, n'hésitez pas à mettre une petite étoile sur le dépôt Gitlab et ou le dépôt Github
Mon blog ⋅ Mes autres projets
Citer : Posté le 12/10/2024 23:45 | #
il y a t-il moyen de communiquer avec une calculatrice avec sa carte son? (jack 3.5 carte son -> jack 2.5 calculatrice)
Ou sinon avec un adaptateur TX/RX to USB?
Citer : Posté le 13/10/2024 00:34 | #
Adaptateur TX/RX to USB : oui, tant que tu as l'embout de bonne taille pour les calculatrices CASIO ! Les adaptateurs / câbles testés officiellement sont le câble d'Util-Pocket et le SB-88A de CASIO, mais normalement oui.
Carte son : je suis preneur que tu me montres ton setup physique, en l'état je ne vois pas trop de quel branchement tu parles.
Mon blog ⋅ Mes autres projets
Citer : Posté le 13/10/2024 11:29 | #
Adaptateur TX/RX to USB : oui, tant que tu as l'embout de bonne taille pour les calculatrices CASIO ! Les adaptateurs / câbles testés officiellement sont le câble d'Util-Pocket et le SB-88A de CASIO, mais normalement oui.
Carte son : je suis preneur que tu me montres ton setup physique, en l'état je ne vois pas trop de quel branchement tu parles.
En gros la carte son c'est quand tu génère les signaux pour communiquer avec la calculatrice sous forme de son et non pasvia un port série. les imputions sont directement encodé en audio dans un .waw ou en direct, ensuite il suffit de brancher avec un câble jack 2.6 <-> jack 3.5 la calculatrice et la sortie son de l'ordinateur. C'est déjà le même procédé pour certains mods du minitel.
Citer : Posté le 13/10/2024 14:12 | #
Alors je suis hors de ma zone de confort, mais j'ai regardé un peu, et de ce que j'en comprends, là où la calculatrice utilise +4.2V pour 1 et 0V pour 0 (source : fxReverse), alors que selon les sources que j'ai lu :
« A headphone jack can output -1V to +1V »
Source : Programming Espruino with Audio - Espruino
Et Line level sur Wikipedia semble indiquer -1.736V à 1.736V.
Dans tous les cas, ça ne semble donc pas être suffisant pour communiquer avec une calculatrice CASIO. C'est dommage, ç'aurait pu être une super solution low-cost pour communiquer avec une calto via série !
Qui sait, peut-être que @Dark Storm pourra confirmer ou infirmer ce que j'ai cru comprendre !
Mon blog ⋅ Mes autres projets
Citer : Posté le 13/10/2024 16:11 | #
Alors, pourquoi pas mais comme dit Cake c'est compliqué pour plusieurs raisons :
- les tensions sont clairement pas les mêmes, pas dit que le 1V de la carte son soit
- IIRC le protocole de communication est bidirectionnel, ce qui veut dire qu'il faut pouvoir envoyer des données de la calto vers la carte son. Donc un câble 3-pin 2.5mm vers soit une paire de jacks, soit un câble 4-pins (suivant ce que t'as en connectique sur le PC).
Bref en théorie c'est jouable, en pratique ça demande du hardware tel que bidouiller un câble série est tout aussi compliqué. Chose qu'il faut que je teste et document d'ailleurs >_>
Citer : Posté le 13/10/2024 21:21 | #
Bon je vais me contenter du RX/TX TTL to serial USB.