Le projet Carte Radio

English version

Voici les toutes nouvelles informations consacrées au projet de carte radio pour la HP48GX.

La carte en elle-même
-  photos de la version initiale

Le software

-  InterHP 1.02

-  ChatHP
  x Fonctionnement
  x Utilisation
  x Version 1.01c radio pour HP48GX       x Version 1.01b radio pour HP48SX
  x Version 1.01c IR pour HP48G(X)         x Version 1.01b IR pour HP48S(X)
  x Version 1.01c wire pour HP48G(X)      x Version 1.01b wire pour HP48S(X)
  x Bibliothèques seules
  x Sources


La carte en elle-même

imaginée, conçue, réalisée et mise au point par
Arthur Patrouchev

Shéma carte

Il s'agit d'un circuit électronique d'environ 10 x 6 x 1 cm. Il s'insère dans l'emplacement prévu pour les cartes RAM/ROM. L'alimentation est assurée par la HP48GX, ce qui double la consommation électrique mais reste raisonnable comparé à d'autres tentavives : il n'est pas nécessaire de changer les piles toutes les 5 minutes.

Le transfert se fait via la prise série, selon le standard RS232C. Les nouveaux prototypes en construction permettront de brancher une prise discrète sur le port série et (espérons-le) de refermer le couvercle des slots, pour l'instant, la prise reste visible. Pour améliorer la portée limitée, deux antennes (fils métalliques fins) sont greffées sur le circuit.
Il était initialement prévu de les insérer en toute invisibilité dans la rainure du boîtier, mais leur efficacité est alors diminuée de plus de 95 %.
Par conséquent, les antennes resteront probablement visibles. Des tests récents avec antennes extérieures ont démontré une portée de 50 mètres en terrain dégagé, et une communication possible à travers une cloison, un plafond, etc.

La vitesse de transfert optimale (et prévue) pour la carte est de 1200 bauds. Les ondes employées ont une fréquence de 433 MHz. Bien entendu, ceci ne saurait rivaliser avec l'infrarouge, beaucoup plus rapide et plus fiable.
L'intérêt majeur des transferts radio est d'échanger des informations à distance, quelle que soit la position de la HP48GX. De plus, le système en cours de développement (cf partie software) utilise les ondes radio pour créer une sorte de "réseau virtuel", où chaque calculateur équipé de la carte et du logiciel possède une identité de 10 quartets, fondée sur le numéro de série.

Voici donc les photos tant attendues de la carte radio.
(version initiale, sans antennes et avec prise volumineuse)
Un grand merci à
Philippe Pamart pour les scans des photos.

Coût : les prototypes actuels reviennent à environ 250 FF.

Pour plus d'informations sur la carte (photos des composants, schémas techniques complets) : site d'Arthur Patrouchev.


Le software

Tout l'intérêt des transferts par ondes radio est d'échanger des informations. Or, une démonstration à l'Open HP de l'epita a prouvé que, comme toujours, les commandes RPN intégrées à la HP n'étaient pas suffisantes. Seules des chaînes étaient transférées, et les données étaient fréquemment endommagées, voie manquantes notamment parce que les deux HP48 ne lançaient pas les commandes de réception et d'envoi en même temps....

D'où l'intérêt d'un logiciel de communication spécifique pour la carte radio, qui puisse synchroniser les envois et corriger de nombreuses erreurs via le port série à une vitesse de 1200 bauds (ce qui donne un octet = un caractère transmis en 1/150e de seconde) :

InterHP v1.02

Cette bibliothèque permet une installation spécifique pour VOTRE calculateur, identifiant ainsi le numéro de série et donc la HP48GX sur le réseau virtuel. Un nouvel exécutable d'installation (3K) est maintenant disponible, mais la synchronisation du protocole, encore imparfaite, nécessite encore quelques améliorations.

Une version modifiée passant elle par l'infrarouge est maintenant disponible, afin d'obtenir un apperçu de la vitesse et du fonctionnement réel du système de transfert.

Utilisation :

L'installation se fait en tapant en entrée le numéro de série de la HP48GX, par exemple 3422S04545.
La calculatrice redémarre, et la bibliothèque n° 505, InterHP v1.02 est installée dans le port 0.

Pour envoyer, placer l'objet à envoyer sur le niveau 1 de la pile.
Ensuite, placer la chaîne donnant le numéro de série du destinataire au niveau 1, par exemple "3422S04545". Utiliser alors l'entrée ADR? de la bibliothèque pour convertir cette chaîne en l'entier-binaire hexadécimal correspondant. Dans l'exemple, ADR? renvoie #3422A04545h.
(ne pas oublier de se placer en mode hexa en tapant HEX) Au passage, les lettres sont converties en chiffres héxaécimaux, selon un modulo de 6, ainsi G,M,S deviennent A; H,N,T deviennent B, etc.
Appuyer enfin sur la touche correspondant à l'entrée "Send" et appuyer peu de temps avant ou après sur la receveuse sur la touche correspondant à l'entrée "Recv". L'interruption (sauf au début de "Recv", presser [ON]-[C]) se fait en appuyant sur une touche différente de [ON].

Le protocole employé :

- test du réseau par l'envoyeuse : 6,5s au plus, l'indicateur I/O est allumé vers la fin, effectué pour éviter de brouiller un envoi en cours par une émission inappropriée.

- envoi des requêtes par l'envoyeuse (une dizaine), durée: 8s

Les requêtes comprennent l'ID de l'envoyeuse, protégée par un CRC, ainsi que celle de la receveuse idem, la taille de l'objet à envoyer et le nombre de "packets" ( ensemble codé de données contentant 50 quartets d'information utile ) que l'envoi prendra. (la receveuse DOIT allumer son I/O, sinon, ça signifie qu'aucune requête n'a été reçue. Si elle ne l'allume que vers la fin, il y a de fortes chances que les requêtes n'aient pas été convenablement reçues.)

Si la receveuse reçoit une requête pour une autre hp, elle se "tait" pour ne pas brouiller la transmission.

Si l'objet à transmettre est trop gros, la receveuse envoie un message radio "IM" à l'envoyeuse qui elle renvoie une erreur "Insufficient remote memory".

- envoi de l'autorisation : une seule, double, par la receveuse. Idem, l'autorisation est signée et adressée à UNE hp. C'est là un des points faibles du protocole (un échec est possible). Enfin, si il y a échec de réception d'autorisation, l'envoyeuse reprend l'envoi de 8s de requêtes.
L'inconvénient, c'est que si la receveuse a effectivement déjà émis son autorisation et qu'elle ne reçoit pas de packets d'objet, elle n'a pas l'idée (pour l'intstant) de ré-émettre son autorisation...

- envoi de l'objet : temps dépendant de la taille de l'objet envoyé. Disons, 4s pour l'objet de démonstration 'Obj' inclus dans le répertoire.

L'objet est codé en packets écrits ainsi :
ID_envoyeuse+CRC "to" ID_receveuse+CRC
longueur_objet+CRC n°_du_packet_courant+CRC
10_quartets+CRC 10_quartets+CRC 10_quartets+CRC 10_quartets+CRC 10_quartets+CRC

L'ensemble est envoyé deux fois à la suite systématiquement. Ainsi, si une erreur est intervenue, elle peut être corrigée sans redemander un nouvel envoi.

- envoi de l'Ack, accusé de réception par la receveuse. ( à améliorer : si rien n'est reçu par l'envoyeuse, ni Ack, ni Cor pour ré-envoyer, il FAUDRAIT que l'envoyeuse ré-emmette disons 3 fois l'objet... et s'arrête ensuite. Pour l'instant, elle attend ad vitam aeternam une confirmation, bonne ou mauvaise ).

Ou si une partie de l'objet est endommagée, envoi par la receveuse d'une demande de correction :
"Cor" ID_receveuse+CRC (deux fois)
"to" ID_envoyeuse+CRC (deux fois)

Terminé : si tout s'est bien passé, la receveuse affiche l'objet transmis au niveau 1, et l'envoyeuse met <1h> au niveau 1 (transfert successful).

A la demande de certains programmeurs, voici les sources de InterHP v1.02 :
Version radio et version infrarouge.

Dernière remarque : ceci est un système 100 % assembleur, c'est évident... :-)

 

ChatHP

A la demande de nombreux programmeurs et utilisateurs (merci à Arthur, SunHP, Shadow, Philippe, Benoît et de nombreux autres pour leurs encouragements), j'ai conçu un système de Chat qui présente de nombreux avantages :
l'envoi fonctionne vers plusieurs HP en même temps grâce à un protocole de redemande individuelle de ré-envoi de message et surtout parce que les messages envoyés sont COURTS (limités à 129 caractères pour que les envois, reformatés par l'analyseur de texte, tiennent dans le buffer I/O).

Fonctionnement :

Là encore, les HP sont identifiées grâce à leur numéro de série, mais l'affichage des messages reçus se fait via une table ID/nom usuel pour obtenir des noms lisibles par le commun des mortels.

Les messages reçus sont tout simplement stockés sur la pile, avec au sommet de cette pile de messages justement une chaîne du genre "Chat session 18:05 19/05/99"...
On peut donc sauver facilement une session de Chat, et le systè a été conçu pour pouvoir reprendre une session et replaçant dans la pile les éléments d'une ancienne session.
Si le contenu de la pile ne correspond pas à une session valide, une nouvelle session est lancé sans altérer le contenu initial de la pile.

Les messages apparaissent dans la pile comme suit :
"xxxxx>Hello, ça va bien ?" avec éventuellement plusieurs lignes mais JAMAIS plus de 22 caractères par ligne.
(Le démarrage du programme de Chat le vérifie d'ailleurs avant de re-lancer une ancienne session.)
"xxxxx" représente l'affichage des quartets de l'ID.

La conversion ID/noms usuels se fait via un objet typé Linked Array, stocké dans la variable 'TabCor' de Home.
Des informations internes sont stockées dans une variable globale 'ChatPar', placée également dans Home.

L'affichage se fait en police intégrée de taille 2.
(Et pour changer les fontes ? Hé ben ça viendra plus tard... :-) )
Les 7 premières lignes de l'écran contiennent les messages reçus, et la 8ème ligne affiche la ligne en cours, avec un curseur (bientôt, version 1.02) clignotant s'il-vous-plaît...

Exemple de Chat

Remarquez le curseur à la "Eden", tout en bas...

Je pensais initialement réaliser une routine d'affichage TRES rapide, moins de 1/150e de seconde pour mettre à jour complètement l'affichage entre chaque caractère en train d'être reçu par radio.... Peine perdue, même après avoir reprogrammé intégralement la routine d'affichage des caractères de taille 2, ce challenge semble illusoire... Heureusement, le plus souvent, seule la ligne en cours nécessite d'être mise à jour, et encore, à condition qu'une touche adéquate ait été tapée. De ce fait, ça va beaucoup plus vite.
Finalement, la tâche principale est la gestion du clavier et de la ligne en cours, avec des appels fréquents à la routine de réception radio et un rafraîchissement quand c'est nécessaire.
Pour l'émission, à mon grand regret, il semble qu'il soit nécessaire de l'effectuer en monotâche pour assurer une fiabilité suffisante ( cependant, étant donné la taille de chaque message, l'envoi dure moins d'une seconde ).

Concernant la routine de gestion de la ligne en cours, notez que TOUS les caractères accessibles par un raccourci clavier (sauf les accents sur les consonnes, peu employés en français) ont été implémentés.
La durée de répétition des touches est assez courte, il vous faudra donc provisoirement taper relativement vite.
Seule différence par rapport au clavier standard, comme la ligne en cours est unique, les retours chariot ne sont pas autorisés : j'ai donc affecté le point-virgule à la combinaison [Shift droit] [.].
Si la ligne tapée ne tient pas sur 22 caractères, l'analyseur de ligne insère les retours chariot en conservant si possible les caractères d'un même mot sur une seule ligne et en remplissant au plus chaque ligne.

Pour ce qui est des transferts radio, qui consistent essentiellement en l'échange de messages bien que des demandes de ré-envoi soient également prévues au cas où une interférence aurait brouillé un message, l'ensemble apparaît maintenant fonctionnel.

Utilisation :

Les liens (cf plus bas) pointent vers des exécutables d'installation. Il suffit de transférer un exécutable sur la HP48G/S(X) et de le lancer.
Taper le numéro de série de votre calculateur (la suite de 10 chiffres et lettres gravée au dos de la HP ) puis votre nom usuel, et attendre le rédémarrage.
La bibliothèque est maintenant stockée dans le port 0 - Chat HP, destiné à être utilisé exclusivement avec une carte radio qui occupe jusqu'à aujourd'hui les deux slots, ne s'installe qu'en port 0 - et le tableau de correspondances ID / noms usuels est placé dans le répertoire Home (on peut maintenant supprimer l'exécutable d'installation).
Dès lors, à condition d'avoir équipé votre HP48GX d'une carte radio branchée sur le port série, on peut discuter comme sur le Net entre 2 HP48GX ou plus.... ;o))

N.B. Les versions radio de Chat HP sont équipées d'un système de test de la carte au démarrage qui renvoie une erreur "Radio card malfunction" si aucune carte radio n'est placé en port 1 ou si la prise vers le port série est mal branchée.

Théoriquement, on peut conserver la variable 'TabCor' et supprimer la bibliothèque Chat HP v1.01c. Si d'aventure on veut récupérer la bibliothèque sans lancer l'exécutable d'installation, c'est-à-dire sans ré-inscrire son nom et son numéro de série et sans perdre la liste d'interlocuteurs enregistrée dans 'TabCor', il suffit d'installer manuellement la bibliothèque seule.

L'édition de la Contact List est permise par trois commandes de Chat HP v 1.01c :

- Add Contact : prend en argument une chaîne au niveau 1, qui repréprésente le nom usuel de l'interlocuteur correspondant à l'ID présente au niveau 2 sous forme d'un binaire ( par exemple # 3244A04545h ).
Pour calculer cet entier binaire, lire le numéro de série de la HP de l'interlocuteur, remplacer les lettres hors de la zone A à F par des chiffres hexadécimaux A-F.
(théoriquement, en remplaçant G, M, S par A, et T, N, H par B, etc.)
'Add Contact' modifie ou crée une variable du répertoire Home appelée 'TabCor', et qui est un objet typé Linked Array (essentiellement pour des raisons esthétiques).

- Del Contact : prend comme argument une chaîne argument au niveau 1 de la pile, et efface l'interlocuteur, dont le nom est spécifié dans cette chaîne, de la liste stockée dans 'TabCor'.

-List : réalise l'affichage de tous les interlocuteurs ajoutés avec 'Add Contact' dans 'TabCor'. Le premier nom est celui du propriétaire de la HP locale. C'est le numéro en face de votre nom qu'il faut donner à un interlocuteur pour que celui-ci le tape au niveau 2 de la pile, tape votre nom au niveau 1 de la pile et vous ajoute à sa liste d'interlocuteurs à l'aide de 'Add Contact'.

ChatHP v1.01c, version radio pour HP48GX :

La troisième version de ChatHP est donc maintenant disponible !!

Chat HP v1.01c pour HP48GX

Le système fonctionne de manière très satisfaisante. L'"emballage" (système de démarrage d'une ancienne session, lancement d'une nouvelle session, exécutable d'installation, etc.) est maintenant bel et bien terminé.

TOUS LES BUGS CONNUS ONT ETE CORRIGES.

(en particulier, la gestion de la mémoire, défaillante depuis les premières versions mises en ligne, est désormais assurée de manière optimale.)

La version 1.01b ajoute à la demande de certains utilisateurs la commande 'Del Contact'.

La version 1.01c effectue une meilleure gestion du clavier et la possibilité de parfaitement recevoir pendant que l'on tape un texte.

Version 1.01c IR pour HP48G(X) :

Cette version modifiée à partir de la version radio permet d'obtenir un apperçu des possibilités de ChatHP sans posséder deux cartes radio et deux HP48GX.
Deux HP48G(X) sont recommandées, mais le programme fonctionne aussi - sans transmission - avec une seule HP48G(X).
Les modifications effectuées concernent le passage de l'interface RS-232 par les diodes infrarouge, ainsi que l'absence de test de réception en cours à l'émission et l'envoi d'un caractère de stop une fraction de seconde après chaque envoi. (Dans la version radio, ce caractère de stop venait du "bruit" radio résiduel).
La nécessitéssité d'un caractère de stop vient du fait que la fin d'une transmission est détectée par une chute de la fréquence avec laquelle les caractères sont reçus, calculé entre le dernier caractère et le précédent.

Ceci devrait donc fournir un avant-goût à tous les heureux possesseurs d'au moins une HP48G(X).

Version 1.01c wire pour HP48G(X) :

Pourquoi une version filaire supplémentaire du Chat ?
Toujours en raison de l'absence de caractère de stop dans la la routine d'émission radio, nécessaire en transmission par fil où le "bruit" est nul. Voici donc de quoi utiliser la HP48G(X) avec un cable HP-HP : Version 1.01c wire pour HP48G(X).

Version 1.01b radio pour HP48SX :

Cette version est écrite pour la HP48SX. Son fonctionnement est identique à celui de la version radio pour la HP48GX, à ceci près que la police de caratères de taille 2 dans la ROM de la HP48SX est implantée juste au-dessous de la RAM système... Pour simplifier la programmation, j'ai donc choisi d'utiliser la bibliothèque Universal Font Library 3, qu'il vous faudra donc installer sur la HP48SX avant de pouvoir utiliser les versions S(X) de ChatHP v1.01b.

Version 1.01b IR pour HP48S(X) :

Il s'agit ici de la version pour transmission par cable, écrite pour la HP48S(X). Installer préalablement la bibliothèque Universal Font Library 3.

Version 1.01b wire pour HP48S(X) :

Il s'agit ici de la version pour transmission par cable, écrite pour la HP48S(X). Installer préalablement la bibliothèque Universal Font Library 3.

A venir bientôt :

Version 1.02 avec curseur clignotant et allumage des indicateurs pendant les transferts, test des piles pendant l'exécution du programme, et bien d'autres choses...!

Bibliothèques seules :

Les bibliothèques seules sont elles-aussi disponibles, mais l'utilisation des exécutables d'installation est indispensable pour la première installation sur une calculatrice. En effet, l'exécutable crée à partir du numéro de série et du nom de l'utilisateur une variable 'TabCor' dans le répertoire 'HOME', variable indispensable au fonctionnement de ChatHP v1.01c.

Sources :

Les sources sont publics, et comme tous les bons programmes pour la HP, InterHP et ChatHP sont parfaitement gratuits. Chaque version a son source, sous la forme d'un répertoire. Appliquer l'entrée 'D->LIB' de la bibliothèque <-LIB-> pour recréer la bibliothèque. Utiliser HP asm 1.1 gx pour assembler les sources des codes en langage machine ; Employer la commande '->Prg' d'EXT48 v2.4 pour recompiler chaque programme en RPL-système.


Dernière mise à jour : 23/01/2001 18:00

Envoyez vos félicitations à : yoanndesir@yahoo.com


L'ensemble de ces programmes a été réalisé avec Eden 2.0, AsmFlash, MLDL 2.0, EXT v2.08, <-LIB-> et EXT48 v2.4.

Retour à la page HP48G(X) principale