PROFDINFO.COM

Votre enseignant d'informatique en ligne

Travail 3 - Le contrôle de Deimos

Description

Votre troisième travail consiste à programmer un client et un serveur qui permettront de contrôler le module de tests de Deimos (le système embarqué TS-7200) à distance.

Le client

Le client doit présenter une interface usager composée de cinq (5) boutons:

  1. Avancer
  2. Arrêter
  3. Tourner à gauche
  4. Tourner à droite
  5. Reculer

Lorsqu'un bouton est enfoncé, le client doit envoyer la commande par sockets au serveur en utilisant le protocole PROCOVE 1.2. Le client doit être programmé en Java et doit s'exécuter sur un des poste de travail Windows XP. De plus, l'interface usager doit permettre de spécifier l'adresse IP du serveur.

Le serveur

Le serveur doit recevoir par sockets des commandes du client qui respectent le protocole PROCOVE 1.2 et activer ou désactiver les chenilles correspondantes. Le serveur doit être programmé en C++ sur un poste de travail Windows XP, compilé pour le système d'exploitation TS-Linux et le processeur ARM et téléchargé sur le module de tests.

Les fonctions utiles pour la communication par sockets sous Linux sont socket, bind, listen, accept, recv, send, shutdown et close.

Les fichiers d'entêtes nécessaires pour la communication par sockets sous Linux sont tcpd.h, netdb.h, sys/socket.h, netinet/in.h et arpa/inet.h.

Les entrées/sorties digitales du TS-7200 sont affectées à l'adresse mémoire 0x80840000 (memory-mapped IO).

Le quatorzième(14e) octet est un octet de contrôle qui indique s'il s'agit d'entrées ou de sorties. Il faut affecter la valeur 0xFF à cet octet pour placer tous les bits en mode sorties.

Le quatrième (4e) octet est l'octet de données dont voici la description des bits:

  1. Place la chenille droite en direction avant
  2. Active la chenille droite
  3. Place la chenille droite en direction arrière
  4. Inutilisé
  5. Place la chenille gauche en direction avant
  6. Active la chenille gauche
  7. Place la chenille gauche direction arrière
  8. Inutilisé

Sous Linux, la mémoire physique est considérée comme un périphérique que l'on peut ouvrir comme un fichier en utilisant la fonction open:

fichier = open("/dev/mem", O_RDWR);

Ensuite, il faut faire une projection de la mémoire physique dans la mémoire virtuelle du processus avec la fonction mmap:

pointeur = mmap(0,getpagesize(),PROT_READ|PROT_WRITE, MAP_SHARED, fichier, 0x80840000);

Si les deux fonctions ont réussi, on peut alors utiliser sans danger la variable pointeur pour lire ou écrire une donnée en mémoire physique à partir de l'adresse 0x80840000. La quantité d'espace mémoire projetée est équivalente à la taille d'une page de la mémoire virtuelle. Cette taille est donnée par la fonction getpagesize. Il ne faut donc pas dépasser cette limite.

Finalement, il faut utiliser la fonction close pour fermer le fichier.

Attention! Le programme doit être exécuté par le root car, pour des raisons de sécurité évidentes, seul ce dernier a le droit d'utiliser le périphérique /dev/mem.

Consignes

Le contrôle de Deimos - Grille de correction

 

Nom:
 
Nom:
 

 

Critères
Pointage
Fonctionnalités (60%)
 
Communication client-serveur
/10
  Contrôle des chenilles
/40
 
Stabilité du programme
/10
Qualité de la programmation (40%)
  Auto-documentation
/10
 
Présentation du code source
/10
 
Modularité de l'application
/15
  Gestion des erreurs potentielles
/5
  TOTAL
/100