Protocole XMODEM
Instructions
Utilisation
Exemple
Principe
Le protocole XMODEM permet d'effectuer des transferts de
fichiers par blocs de 128 octets avec détection d'erreur
et correction par répétition.
Voici un exemple de transfert de données sous protocole
XMODEM avec:
<soh> = 0x01
<nak> = 0x15
<ack> = 0x06
<eot> = 0x04
<données> = 128 octets de données
<xx > = somme de la ligne (de <soh> à <données>
inclus)
Emetteur
|
|
Récepteur
|
|
|
attente de 10 secondes au maximum
|
|
<<<
|
<nak>
|
<soh> 0x01 0xFE <données> <xx>
|
>>>
|
|
|
<<<
|
<ack>
|
<soh> 0x02 0xFD <données> <xx>
|
>>>
|
erreur de transmission
|
|
<<<
|
<nak>
|
<soh> 0x02 0xFD <données> <xx>
|
>>>
|
répétition avec succès
|
|
<<<
|
<ack>
|
<soh> 0x03 0xFC <données> <xx>
|
>>>
|
|
|
<<<
|
<ack>
|
<eot>
|
>>>
|
|
|
<<<
|
<ack>
|
Instructions
- XMODEM_TAMPON adresse
Adresse du tampon d'émission/réception
de 128 octets
- XMODEM_BLOC adresse
Variable contenant le numéro de bloc
en cours de transfert
- XMODEM_TEMPO adresse
Variable pour gestion des temporisations
liées au protocole
- INPUT_FILE? nbr_octets
Instruction donnant le nombre d'octets disponibles
dans INPUT_FILE
- RS232_RECEIVE_FILE? nbr_octets
Instruction donnant le nombre d'octets disponibles
dans RS232_RECEIVE_FILE
- RS232_TRANSMIT_FILE? nbr_octets
Instruction donnant le nombre d'octets disponibles
dans RS232_TRANSMIT_FILE
- OUTPUT_FILE? nbr_octets
Instruction donnant le nombre d'octets disponibles
dans OUTPUT_FILE
- T_XMODEM_CONNECTE adresse
Tâche de gestion XMODEM (remplace T_RS232_CONNECTE
pendant la durée du transfert)
rec/emi XMODEM_OUVRE erreur
Ouverture d'un transfert XMODEM en émission
si rec/emi est nul et en réception sinon.
erreur est nul lorsque l'opération
est correcte
- XMODEM_OCTET_RECOIT octet,erreur
Réception d'un octet.
erreur est nul si l'octet est valide, sinon
la réception est terminée
octet XMODEM_OCTET_EMET erreur
Emission d'un octet.
erreur est nul si l'émission est correcte
- XMODEM_FERME -
Fin du transfert en émission ou en
réception
adresse XMODEM_RECOIT longueur
Réception d'un fichier à l'adresse
spécifiée sur la longueur (en octets) indiquée
en fin de transfert
adresse,longueur XMODEM_EMET -
Emission d'un fichier situé à
l'adresse et sur la longueur (en octets) spécifiées
Utilisation
Le transfert d'un fichier nécessite
l'utilisation des instructions suivantes:
- XMODEM_OUVRE,
- XMODEM_OCTET_RECOIT ou XMODEM_OCTET_EMET,
- XMODEM_FERME.
L'utilisateur doit démarrer un transfert par l'instruction
"XMODEM_OUVRE" avec une valeur nulle dans le cas d'une
émission, et non nulle dans le cas d'une réception.
Un code d'erreur nul indique que le transfert peut s'effectuer
correctement.
L'instruction "XMODEM_FERME" doit impérativemen
être exécutée à la fin d'une opération
d'émission d'un fichier. Le dernier bloc sera complété
automatiquement par des octets de bourrage (à 0), transféré
et suivi de l'émission du caractère de fin de texte
(eot).
Les fichiers peuvent être transférés
en utilisant le logiciel "Hyperterminal" sur PC ou "Apple
works terminal" sur MAC.
Exemple
Pour illustrer cette page, voici le
code des instructions "XMODEM_RECOIT" et "XMODEM_EMET":
: XMODEM_RECOIT ( adresse --> longueur )
-1 XMODEM_OUVRE
IF
DROP 0
ELSE
0
BEGIN
XMODEM_OCTET_RECOIT
IF
DROP -1
ELSE
3 PICK C! >R 1+ R> 1+ 0
THEN
UNTIL
SWAP DROP
THEN
XMODEM_FERME
;
: XMODEM_EMET ( adresse, longueur --> - )
0 XMODEM_OUVRE
IF
DROP
ELSE
0 DO
DUP C@ XMODEM_OCTET_EMET
IF
LEAVE
THEN
1+
LOOP
THEN
DROP XMODEM_FERME
;