Protocole mode KISS
Introduction :
Le mode KISS (Keep It Simple,Stupid) utilise un protocole de dialogue simplifié entre un ordinateur (host) et un TNC. La définition de ce protocole a été proposée par Mike Chepponis (K3MC) et Phil Karn (KA9Q).

La plupart des logiciels inclus dans les TNCs intègrent le dialogue en mode KISS ce qui en fait le seul "langage" commun par opposition aux protocoles host mode plus complexes mais souvent très spécifiques à certains modèles de TNC. Le passage en mode KISS s'effectue généralement par une commande spéciale (voir documentation du TNC). Il existe aussi des eproms pour TNC spécialement dédiées à ce mode.

Pour être complet, signalons que ce protocole peut être utilisé dans le cas de liaisons AX25 "filaires" entre ordinateurs (par exemple sorties rs232 + câble null modem). On le retrouve également dans certains "dialogues internes" entre applications radio fonctionnant sous le système d'exploitation Linux. Le mode KISS est aussi très pratique pour réaliser des programmes d'analyse de trafic packet radio.

 
Mode de fonctionnement :

Dès qu'une trame packet radio est reçue sur le port radio, et si cette trame ne comporte pas d'erreurs, le TNC la retransmet en format KISS vers le port asynchrone caractère (RS-232) à destination de l'ordinateur hôte.

De la même manière le TNC retransmettra en HDLC (port radio) les données d'une trame KISS reçue sur son port asynchrone RS-232. Ces données transportent en fait la structure d'une trame AX25  (hors "flags" et "CRC").

Dans ce mode le TNC joue donc simplement le rôle de convertisseur de format trame. Il est important de comprendre que toute la gestion des protocoles de communication (AX25 , TCP/IP  etc. etc..) sera effectuée par le logiciel packet-radio de l'ordinateur hôte.

En liaison radio half-duplex le TNC devra toutefois gérer l'accès au canal de transmission (CSMA) , donc le signal de commande PTT du TRX.

 
Format des trames KISS :
Une trame KISS sera constituée d'une suite de caractères au format 8 bits, 1 bit de stop,  sans parité. A noter qu'il n'y a pas de contrôle d'erreur et pas de gestion de contrôle de flux !

On peut toutefois considérer que sur un câble de quelques mètres et pour des rapidités de modulation de l'ordre de 9600 ou 19200 Bauds les erreurs de transmissions sont très peu probables.

Le format de trame KISS est en fait directement inspiré du protocole SLIP (Serial Line IP  : "ancien" protocole de transmission de paquets IP sur liaison asynchrone série, aujourd'hui remplacé par le protocole PPP).

Le début et la fin de trame KISS sont indiqués par le code réservé "Frame End" dont la valeur est 0xC0  (0x indique qu'il s'agit d'une notation en hexadécimal).

Afin d'être "transparent" à la valeur 0xC0 pouvant apparaître dans le champ de données,  le protocole KISS utilise la technique du code d'échappement. Le code d'échappement (escape code) a pour valeur 0xDB. L'utilisation du code d'échappement est simple:

Si la valeur 0xC0 apparaît dans la zone de données, elle est remplacée par la séquence de 2 octets 0xDB 0xDC. De même pour la valeur 0xDB qui sera remplacée par la séquence 0xDB 0xDD.

Tableau des codes réservés :
 Mnémonique  Description   Hexadécimal  Décimal
 FEND  Frame End   (délimiteur de trame)  0xC0  192
 FESC  Frame Escape   (code d'échappement )  0xDB  219
 TFEND  Transposed Frame End        (  0xC0 = 0xDB 0xDC )  0xDC  220
 TFESC  Transposed Frame Escape   (  0xDB = 0xDB 0xDD )  0xDD  221

Trames de données et trames de commandes :

On peut envoyer au TNC des trames de "données" (trames AX25 à transmettre) ou bien des trames de commandes afin de paramétrer le TNC. Le codage du mode commande s'effectue dans les 4 bits de poids faibles du premier octet transmis. Les 4 bits de poids forts peuvent éventuellement indiquer un numéro de port radio (cas de TNC gérant simultanément plusieurs ports radio : ex.  Port 0 = 1200 bds VHF, Port 1 = 300 bds HF).

- Format d'une trame kiss :

 C0   No port  + commande       Données (AX25)  ou  paramètres de commande   C0 
- Codage du champ  "No port radio + code commande"   (8 bits) :
  b7 b6  b5  b4    b3 b2 b1 b0 
 No  port radio   Commande
 
- Codage champ commande (4 bits de poids faibles du premier octet) :
 b3 b2 b1 b0
 Valeur  Fonction  Remarques
 0000
 0  Données   Trame AX25 
 0001
 1  TXDELAY  Octet suivant = paramètre TXDELAY x 10 ms (défaut 50) 
 0010
 2  P  Octet suivant = paramètre PERSIST  (défaut 63)
 0011
 3  SlotTime  Octet suivant =  paramètre SLOT TIME  x 10 ms  (défaut 10)
 0100
 4  TXtail  Obsolète (?)
 0101
 5  Fullduplex  Octet suivant  =   0 si "half duplex"  , autres  = full duplex 
 0110
 6  SetHardware  Octet suivant =  commande spécifique fonction du matériel
             
b7------------- b0
         
 0xFF
 255  Exit (*)  Indique au(x) TNC(s) de quitter le mode KISS 
(*) : D'où la "combinaison magique"  0xC0 0xFF 0xC0  (hexadecimal) à envoyer pour quitter le mode KISS.     
 
Mode KISS et extensions "G8BPQ"  :
John Wiseman (G8BPQ) a imaginé des extensions au mode KISS afin de faciliter la gestion de plusieurs TNCs KISS connectés à un port série RS232 (mode MULTI DROP).

Ces extensions permettent une interrogation sélective des TNCs (POLL MODE) et un mode d'acquittement d'émission effective de la trame AX25 (ACK  MODE).  Pour détecter d'éventuelles erreurs sur la liaison série, un octet de checksum  (basé sur une simple calcul du type OU-exclusif)  peut également être ajouté à la fin des données.

L'exploitation de ces extensions de commande KISS nécessite bien évidemment un logiciel extended kiss mode au niveau du TNC (par exemple eprom BPQKISS).

En mode "BPQ" la trame KISS conserve sa structure de base. Le champ port radio (4 bits nnnn) pourra être utilisé pour sélectionner un TNC particulier dans le cas d'un fonctionnement en multi drop sur port RS232. En mode BPQ le champ commande de la trame KISS comporte les fonctions supplémentaires suivantes :
 

 b3 b2 b1 b0
 Valeur   Fonction   Remarques
 1100 
 12  DATA   Trames avec attente d' acquittement d'émission (ACK du TNC)
 1110 
 14  POLL  Interrogation sélective des TNCs (réception de trames )
 
- Trame de polling c.a.d. interrogation sélective dans la cas d'un système multi-TNC :
 C0   nnnn 1110   C0 
 
- Trame de données émission en mode ACK (Les octets "aa" et "bb" constituent un identificateur de trame KISS) :
 C0   nnnn 1100    aa   bb     Data .................................................   C0 
- Trame d'acquittement du mode ACK :
 C0   nnnn 1100    aa   bb   C0 
La réception d'une trame KISS d'acquittement ACK confirme que la trame AX25 a été effectivement émise "sur l'air" par le TNC. Ceci peut être très utile pour déclencher des timers AX25 au niveau logiciel.
 
Variante SMACK du protocole KISS :
SMACK signifie Stuttgart Modified Amateur radio Crc Kiss . Une équipe de radioamateur de Stuttgart a proposé de fiabiliser la communication entre systèmes KISS en utilisant un système de détection d'erreur par calcul de CRC. La distinction entre une trame de donnée KISS et une trame SMACK s'effectue en positionnant à 1 le bit b7 de l'octet du champ numéro de port, le nombre maximum de ports radio étant supposé être ramené à 8 (cf. 3 bits nnn).
 C0   1 nnn cccc 
   Data ................................................ 
 CRC Low   CRC High   C0 
Le CRC est du type CRC-16 (X^16 + X^15 + X^2 + 1). Les 16 bits du CRC sont placés dans 2 octets à la suite des données normales.