Du coup, ILPER supportera 4 peripheriques par defaut: Un display et un Mass storage (comme maintenant), une liaison serie (ILserial) et un petit nouveau que je me suis amuse a developper cette nuit (et celles du week-end precedent...): ILsocket.
ILsocket permet de communiquer via les sockets AF_UNIX (locales) ou AF_INET (UDP/IPv4) vers soit un autre ILsocket, soit vers un peu ce que l'on veut. Entre autre, il permet d'envoyer des messages (blabla) ou des programmes, fichiers,... Sa particularite est d'etre hybride: il sera vu comme une Interface (AID 78) mais aussi comme un Mass Storage (AID 16), changeant son AID "a la volee" ! Et repondra au doux nom de "ILSOCKET"
En mode local, on peut envoyer des commandes, pour par exemple passer du mode Interface au mode Mass (et vice-versa), changer le comportement sur CR/LF, connaitre les indexes des buffers, obtenir l'adresse IP du hote, changer le port local et le port/adresse du pair, ...
Comme ILPER devient une librairie autonome, j'ai pu echanger des messages entre NSIMII (la version en cours de developpement support l'HP-IL ainsi que la gestion de la PIL-Box en mode controleur) et un HP-71B, un HP-75C (reels), ... et même des programmes: le "disque ILsocket" pouvant contenir 64Kb, il est possible de stocker et d'envoyer d'un coup plusieurs fichiers...
Les commandes de ILsocket sont sur une suggestion de jeffcalc, inspirees du langage GL. C'est a dire 2 lettres majuscules et des arguments optionels separes par des virgules. Plusieurs commandes peuvent etre envoyees d'un coup en les separant par des points-virgules ou un % (la HP-41C n'ayant pas le ; en acces direct). Il est necessaire de passer ILsocket en mode LOCAL pour que les commandes soient interpretees. Le mode REMOTE (defaut) est le mode de transmission...
- RW : Passage en mode RaW. Les CR/LF sont traites comme des octets quelconques et seront passes ainis au controleur. On aura ainsi 1 seul message: HELLO\n\rWORLD\r\n,
- TX : Mode TeXte (defaut). Les CR/LF sont traites comme des fins de messages. On aura dans ce cas 2 messages: HELLO et WORLD,
- MS : Mass Send: Le fichier ecrit par WRTP, ou autre est envoye immediatement vers le pair,
- MR : Mass Recv: Reception de "fichiers". Dans ce cas DIR fonctionne. Au pourra relire le fichier via un READP, par exemple,
- MI : Mass Init: Initialise le Mass pour une image multi fichiers. Dans ce cas, un NEWM <n> doit etre fait pour finaliser la creation de l'image. L'envoi se fait alors par la commande TRIGGER,
- ME : Fin du mode Mass et retour au mode Interface. Dans ce cas, les buffers sont nettoyes et tout ce qui n'a pas ete lu ou envoye est perdu,
- IP<itf>: Renvoit l'adresse IP de la machine hote sur l'interface <itf>,
- LA<unixname> : Fixe l'adresse de la socket AF_UNIX locale sur le nom <unixname>. Dans ce cas, <unixname> doit commener par une majuscule,
- LA<port> : Fixe le port de la socket AF_INET locale sur le numero <port>. Dans ce cas, <port> doit commencer par un nombre,
- RA<unixname> : Fixe l'adresse de la socket AF_UNIX destination sur le nom <unixname>. Dans ce cas, <unixname> doit commener par une majuscule,
- RA<IPaddress>:<port> : Fixe l'adresse IPv4 et le port de la socket AF_INET destination sur l'adresse IP <IPaddress> et le port <port>. Ainsi, SR127.1:41000 enverra vers l'adresse IP 127.0.0.1 (localhost) sur le port 41000.
- CS : Ferme la socket. Obligatoire pour prendre en compte les nouvelles adresses fixees par RA et LA,
- OS : Ouvre la socket. Obligatoire pour prendre en compte les nouvelles adresses fixees par RA et LA, car c'est lors de l'open que sont fixees ces adresses dans variables internes,
- FS : Vide la socket en reception et ignore tous les messages presents dans le buffer d'entree ainsi que ceux en attente dans la queue de la socket,
- IN : Renvoit les pointeurs d'entree (IN - reception) sous la forme iiiii.jjjjj, iiiii etant l'indice courant de lecture et jjjjj le nombre d'octets actuellement disponibles en lecture,
- OU : Renvoit les pointeurs de sortie (OUt - emission) sous la forme iiiii.jjjjj, iiiii etant l'indice courant de d'envoi (donc le nombre d'octets envoyes vers le distant) et jjjjj le nombre d'octets total à envoyer,
- ST : Renvoit le STatus sous forme d'un nombre 32 bits. La commande INSTAT recoit aussi un etat "condense" venant du ST
A savoir que l'on peut utiliser "soi-meme" comme adresse distante, donc une forme de mode "boucle" pour des tests.
De plus, ce peripherique ne requiert AUCUNE ROM specifique ni developpement particulier. J'ai voulu qu'il soit entierement gerable par un simple module HP-IL (82160A). Seul le HP-75C requiert le lex des HPILCMDS ou le HP75 I/O.
Sur HP41C+82160A, les commandes LOCAL, REMOTE, SELECT, TRIGGER, OUTA et INA sont largement suffisantes pour faire ce que l'on veut. De plus en mode Mass, toute la batterie des commandes du Mass (NEWM, DIR, WRTxx, READxx) sont disponibles
A bientot pour de nouv' HP-IL aventures !