« SE2a4 Projet système/réseau 2023/2024 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Ligne 36 : Ligne 36 :


La première étape du projet consiste à réaliser un serveur web minimaliste qui s’appelera sioux.
La première étape du projet consiste à réaliser un serveur web minimaliste qui s’appelera sioux.
Ce programme peut prendre des arguments optionnels : -p <port> ou –port <port> pour spécifier un numéro de
 
port différent de celui utilisé par défaut (port 80). Pour traiter les arguments, utilisez la fonction getopt_long (voir
Ce programme peut prendre des arguments optionnels : <code>-p <port></code> ou <code>–port <port></code> pour spécifier un numéro de port différent de celui utilisé par défaut (port 80). Pour traiter les arguments, utilisez la fonction <code>getopt_long</code> (voir la page de manuel correspondante). Si les arguments sont incorrects, le programme affichera un message qui précise la syntaxe. Pour plus de clarté, l’analyse des arguments et de l’affichage de la syntaxe seront écrits dans des fonctions séparées.
la page de manuel correspondante). Si les arguments sont incorrects, le programme affichera un message qui précise
 
la syntaxe. Pour plus de clarté, l’analyse des arguments et de l’affichage de la syntaxe seront écrits dans des fonctions
Vous devez décoder les requêtes HTTP. Vous pouvez vous limiter aux requêtes GET en HTTP version 1.1. Vous devez gérer les en-têtes de réponse <code>Server</code>, <code>Date</code> et <code>Content-Type</code>. Les différentes pages HTML seront réalisées en utilisant HTML5.
séparées.
 
Vous devez décoder les requêtes HTTP. Vous pouvez vous limiter aux requêtes GET en HTTP version 1.1. Vous
Pour structurer le développement, nous proposons d’utiliser l’arboresence suivante :  
devez gérer les en-têtes de réponse Server, Date et Content-Type. Les différentes pages HTML seront réalisées en
 
utilisant HTML5. Lorsque la requête GET contient des informations provenant d’un formulaire, vous ajouterez les
PSR-2023-20224_Nom-binome1_Nom-binome2
valeurs passées dans un fichier du nom de la page web mais avec l’extension cvs. Pour tester, vous créerez une
|_Sioux
page vote.html qui demande de choisir parmis plusieurs photos quelle est la meilleure. La page de réponse sera
|_Libs
nommée vote-reponse.html et sera appelé avec un paramètre nommé reponse. Voici un exemple d’utilisation :
  |_Reseau
http://localhost/vote-reponse.html?reponse=3.
 
Pour structurer le développement, nous proposons d’utiliser l’arboresence suivante :
Pour le développement des fonctions réseaux vous pouvez vous inspirer du code existant sur le cours de Monsieur Redon (https://rex.plil.fr/Enseignement/Reseau/Reseau.IMA4sc/reseau.html). Vous devez faire une bibliothéque réseau pour les fonctions génériques. Le code du serveur web devra être également séparé en plusieurs fichiers, a minima <code>sioux.c</code> et <code>analyste_http.c</code>.
PSR-2023-20224_Nom-binome1_Nom-binome2
sioux
libs
Reseau
Pour le développement des fonctions réseaux vous pouvez vous inspirer du code existant sur le cours de Monsieur
Redon (https://rex.plil.fr/Enseignement/Reseau/Reseau.IMA4sc/reseau.html). Vous devez faire une biblio-
théque réseau pour les fonctions génériques. Le code du serveur web devra être également séparé en plusieurs fichiers,
a minima sioux.c et analyste_http.c


=== Serveur HTTP multi-flux ===
=== Serveur HTTP multi-flux ===

Version du 26 février 2024 à 16:38

Objectif

L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques.

Le système est composé des éléments suivants :

  • des cartes USB fixées sur les écrans et connectées en USB sur la station la plus proche ;
  • des serveurs Web sur chaque station qui peuvent être accédés en utilisant un navigateur Web classique.

Le serveur Web d'une station, en plus de servir des pages Web, va gérer les cartes USB locales et écouter les requêtes UDP de gestion des écrans.

Il vous faut programmer à la fois le micro-contrôleur des cartes USB et le serveur Web.

Matériel

Vous devez concevoir et réaliser une carte électronique pour gérer un écran. Cette carte être conçue mécaniquement pour se fixer dans l'angle du moniteur où se trouvent le bouton permettant d'allumer et d'éteindre le moniteur et la LED de statut de ce même moniteur.

Un servo-moteur doit pouvoir se clipser sur la carte pour appuyer sur le bouton et un photo-récepteur doit pouvoir contrôler si la LED du moniteur est allumée ou non.

La carte doit être architecturée autour d'un ATmega16u4 et comporter quelques LED commandées en plus de l'écosystème du microcontrôleur et de ce qui est nécessaire pour faire fonctionner servo-moteur et photo-récepteur.

La conception de la carte se fait en utilisant le logiciel KiCAD version 7.

Développement sur la carte

Il doit être possible de gérer les cartes par le protocole USB. Il est conseillé d'écrire un programme en utilisant la bibliothèque LUFA exposant une interface USB de classe spécifique liée à deux points d'accès par interruption : un entrant pour lire l'état du photo-récepteur et un sortant pour commander le servo-moteur et quelques LED.

Il est aussi demandé que l'état de la LED de statut soit répété sur une des LED commandées, le photo-récepteur pouvant masquer la LED du moniteur. Une autre LED doit servir à indiquer que la carte est prise en charge par une application, ce qui est facile à tester via la variables globale USB_DeviceState.

Pour le principal, appuyez-vous sur votre travail en tutorat USB. La principale différence avec le tutorat est que les capteurs et actionneurs sont directement connectés sur l'ATmega16u4 cette fois. Faites attention, les broches PWM du minuteur 0 ne sont pas les mêmes par rapport à l'ATmega328p. Consultez la documentation du micro-contrôleur pour identifier ces broches.

Développement système et réseau sur la station

Fonctionnalité serveur Web

Serveur HTTP

La première étape du projet consiste à réaliser un serveur web minimaliste qui s’appelera sioux.

Ce programme peut prendre des arguments optionnels : -p <port> ou –port <port> pour spécifier un numéro de port différent de celui utilisé par défaut (port 80). Pour traiter les arguments, utilisez la fonction getopt_long (voir la page de manuel correspondante). Si les arguments sont incorrects, le programme affichera un message qui précise la syntaxe. Pour plus de clarté, l’analyse des arguments et de l’affichage de la syntaxe seront écrits dans des fonctions séparées.

Vous devez décoder les requêtes HTTP. Vous pouvez vous limiter aux requêtes GET en HTTP version 1.1. Vous devez gérer les en-têtes de réponse Server, Date et Content-Type. Les différentes pages HTML seront réalisées en utilisant HTML5.

Pour structurer le développement, nous proposons d’utiliser l’arboresence suivante :

PSR-2023-20224_Nom-binome1_Nom-binome2
|_Sioux
|_Libs
  |_Reseau

Pour le développement des fonctions réseaux vous pouvez vous inspirer du code existant sur le cours de Monsieur Redon (https://rex.plil.fr/Enseignement/Reseau/Reseau.IMA4sc/reseau.html). Vous devez faire une bibliothéque réseau pour les fonctions génériques. Le code du serveur web devra être également séparé en plusieurs fichiers, a minima sioux.c et analyste_http.c.

Serveur HTTP multi-flux

Pages spécifiques

Fonctionnalité gestion des cartes USB

A l'initialisation du serveur, les cartes USB de gestion d'écan doivent être détectées et mémorisées. Un identifiant unique sur un octet doit être programmé dans chaque carte. Cet identifiant doit pouvoir être récupéré par le point d'accès de contrôle. Il est conseillé de prévoir des détections régulières de cartes USB nouvellement insérées.

Quand cela lui est demandé le serveur doit pouvoir contacter une carte particulière, c'est à dire avec un identifiant précis, et lui demander l'état du moniteur, de changer l'état du moniteur, ou de changer l'état d'une LED commandée.

Pour toute cette partie, il est fortement conseillé de reprendre le travail effectué en tutorat USB.

Fonctionnalité serveur UDP

Votre serveur doit aussi écouter sur le port UDP 4242. Les requêtes reçues sont vérifiées pour s'assurer qu'elles sont bien légitimes, par exemple en utilisant un "nombre magique" sur lequel la promotion doit s'entendre. Les requêtes contiennent le numéro des cartes USB concernées, le numéro 255 indiquant que toutes les cartes du réseau sont concernées. La requête peut être de connaitre l'état du moniteur ou de changer cet état en un état précisé.