Described the packets of the protocol

This commit is contained in:
2025-03-14 15:34:17 +01:00
parent 23188688f2
commit 0aee1171d3

72
Doc.md
View File

@@ -191,8 +191,9 @@ Voici une liste des paquets possibles pour le moment dans notre protocole
| 0010 0101 | Invalidate |
| 0001 0101 | Pixel Data |
| 0000 0101 | ACK |
| 1111 0101 | Ping |
Tous ces paquets sont forgés par le master à l'exeption du paquet ACK qui peut être créé par un slave.
Tous ces paquets sont forgés par le master à l'exeption des paquets ACK, Ping et SD return.
##### Side discovery (10000101 | 0x85)
@@ -200,32 +201,61 @@ Octets à suivre : 1
Structure :
On a un octet pour l'entête et un octet qui permet de garder le compte le nombre de sauts.
Marche à suivre :
1: Ping le côté opposé
2: Si on obtient une réponse :
Incrémenter le second octet de 1 et envoyer le message complet dans la direction opposée. (Ex recu côté sud on envoie au nord)
2: Si le côté opposé ne répond pas, alors on crée un paquet side discovery que on envoie sur le même côté sur lequel on a recu le paquet Side discovery.
##### Side discovery return [SD return] (11000101 | 0xC5)
Octets à suivre : 1
Structure :
On a un octet pour pour l'entête et un octet pour le compte du côté
Marche à suivre :
On le relaie à l'opposé de l'endroit ou on l'a recu. Le paquet est destiné au master et normalement il se trouve dans la direction opposée de la ou on recoit le retour.
##### Slave Assignement (01000101 | 0x45)
Octets à suivre : 2
Structure :
Byte 1: Entête
Byte 2: Position X
Byte 3: Position Y
Marche à suivre :
Voire marche à suivre dans "Assignement des positions" mais en gros si on a deja une position assignée on route le paquet et sinon on prend la position qui est donnée.
##### Invalidate (00100101 | 0x25)
Octets à suivre : 0
Octets à suivre : 2
Structure :
Byte 1: Entête
Byte 2: Position X
Byte 3: Position Y
Marche à suivre :
Si le message n'est pas pour nous, on le route sinon on set notre position courante à -1,-1 (ATTENTION, ca veut dire que le maitre doit être stratège quand il veut invalider une matrice car si il le fait dans le mauvais ordre on a des paquets qui ne pourront simplement pas atteindre leur cible)
Petite variation. Avant de faire passer le message, on envoie un ping dans les deux directions possibles du paquet et on envoie dans la première qui répond. (Contrairement à la règle des pairs et impairs dans un but que le paquet aie plus de chance d'atteindre sa destination) Si personne ne répond on drop le paquet.
##### Pixel Data (00010101 | 0x15)
Octets à suivre : 16X16X3 [768] (en imaginant 8 bits par couleurs et une matrice de 16 par 16)
@@ -234,12 +264,48 @@ Si on fait un petit calcul on peut voir que avec 24bits par pixel on arrive sur
Structure :
Byte 1: Entête
Byte 2: Position X
Byte 3: Position Y
Ensuite on traite les informations 3 octets par 3 octets
Paquet pixel :
Byte 1: Valeur de Rouge
Byte 2: Valeur de Vert
Byte 3: Valeur de Bleu
Ce qui donne : Entête->PositionX->PositionY->PaquetPixel1->PaquetPixelx...
Marche à suivre :
Si le paquet nous est destiné on traite les informations de pixel à la volée ou après avoir tout recu c'est au choix et sinon on le route normalement.
##### ACK (00000101 | 0x5)
Octets à suivre : 2
Structure :
Marche à suivre :
Byte 1: Entête
Byte 2: Position X
Byte 3: Position Y
Marche à suivre :
On route le paquet vers 0,0 (Master). En principe un Esclave n'a jamais besoin de traiter un ACK, ils sont par défaut tous destinés au master. La position X,Y est la position de source et non de destination.
##### Ping (11110101 | 0xF5)
Octets à suivre : 0
Structure :
Byte 1: Entête
Marche à suivre :
Le ping est très simple et ne se comporte pas vraiment comme un ping TCP. La le but est simplement de renvoyer le paquet de la ou il vient. Il a une utilité principalement de débug ou de découverte de voisin locale. Exemple : Permettre à une matrice de savoir si une autre matrice est connectée à sa droite.
Quand on envoie un ping on garde en mémoire que on en a envoyé un et donc si on recoit un ping et que on attendait une réponse on arrête (Très important sinon on finit par juste ping en boucle)