Vous allez programmer le microcontrôleur en C pour analyser les paquets TCP/IP reçus et en générer d’autres.
Pour vous faciliter la vie une grande partie du code vous est fourni : http://rex.plil.fr/Enseignement/Reseau/TP.Reseau.GIS3-postcovid/ManetteSerie.tgz. Vous y trouverez, dans serial.c, des fonctions de gestion du port série et, dans les autres sources des fonctions pour utiliser les éléments de la manette.
Un Makefile est disponible, pour compiler il suffit de taper make. Pour télécharger le programme sur le système embarqué, tapez make upload.
Si vous êtes un peu perdu, commencez par écrire des petits programmes de test.
Par exemple, vous pouvez écrier un programme permettant de faire clignoter une LED et un programme permettant d’allumer une LED sur pression d’un bouton.
Pour aller plus loin, vous pouvez écrire un programme recevant un octet par la liaison série et le renvoyant par la même liaison. Vous pouvez aussi écrire un programme qui lit un numéro de LED sur le port série et qui allume la LED correspondante.
Les programmes utilisant le port série peuvent être testés au travers de l’utilitaire cutecom.
L’utilitaire slattach est configuré pour utiliser le protocole SLIP. Ce protocole permet de marquer la fin des paquets avec l’octet de valeur 0xc0. À remarquer que le protocole SLIP de Linux met un 0xc0 aussi en début de paquet. Vous pouvez donc tomber sur deux 0xc0 de suite. Dans ce cas il ne faut pas penser avoir reçu un paquet vide. Si la valeur 0xc0 est présente dans le paquet lui-même, elle est remplacée par les deux caractères de valeurs 0xdb et 0xdc. Si la valeur d’échappement 0xdb est présente dans le paquet elle est remplacée par les deux caractères de valeurs 0xdb et 0xdd.
Pour contrôler les LED du système embarqué nous allons nous baser sur les données UDP. Commencez par vérifier que le paquet reçu est un paquet UDP vous concernant :
Vérifiez enfin qu’il s’agit bien d’un paquet UDP de modification de l’état des LED. Vous pouvez, par exemple, regarder la valeur du premier octet de données UDP. Si c’est bien le cas utilisez les autres octets des données UDP pour effectuer l’action correspondante sur les LED.
Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :
echo -ne "C\xff" | nc -q0 -u <adresse IPv4 système embarqué> <port UDP>
Sur réception d’un paquet UDP particulier, par exemple avec une autre valeur pour le premier octet des données UDP, votre système embarqué doit retourner à l’envoyeur un paquet UDP avec comme données l’état des boutons.
Vous devez donc forger un paquet IPv4 contenant un paquet UDP contenant les données. Ce paquet doit être envoyé sur le port série en utilisant le protocole SLIP. N’oubliez pas de calculer la somme de contrôle IPv4 et éventuellement la somme de contrôle UDP.
Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :
nc -u -l -p <port UDP> | od -tx1 -w1