Commit 04985598ec2472ca5c1e60e708ccbf29faeec796

Authored by root
1 parent dc90031e

Revert "Projer terminé"

This reverts commit dc90031e3bb71e8e2fffd640569db119a60812f9.
README.md deleted
... ... @@ -1,102 +0,0 @@
1   -# Tutorat Système
2   -
3   -Etudiants: Raphaël MARTIN, Pierre FRISON.
4   -
5   -## nInvaders contrôlé par Arduino
6   -
7   -### Procédure automatique
8   -
9   -Pour simplifier la mise en place du programme de l'atmega328p et de l'atmega16u2, nous avons créer un script pour guider l'utilisateur dans les manipulations et exécuter les commandes à ça place.
10   -
11   -Lancez le script installAndPlay.sh à la racine du projet.
12   -
13   -Avec le shield orienté avec le joystick à gauche et les boutons à droite, les commandes sont les suivantes :
14   - * Bouton gauche : déplacement à gauche
15   - * Bouton haut : lancer une partie et tirer
16   - * Bouton droit : déplacement à droite
17   -
18   -Amusez-vous bien ! (pour relancer le jeu sans installation utilisez play.sh)
19   -
20   -### Procédure manuelle
21   -
22   -Si notre script échoue voici la procédure manuelle :
23   - * Court-circuitez le pin de reset de l'atmega16u2 à la masse
24   - * cd atmega16u2/base/
25   - * make
26   - * Débranchez et rebranchez la carte Arduino
27   - * cd atmega328p/
28   - * make upload
29   - * Court-circuitez le pin de reset de l'atmega16u2 à la masse
30   - * cd atmega16u2/custom/PolytechLille/PAD/
31   - * make upload
32   - * Débranchez et rebranchez la carte Arduino
33   - * cd ninvaders
34   - * make exec
35   - * Le jeu devrait se lancer
36   -
37   -## Tests préprogrammés
38   -
39   -Avec l'atmega328p et l'atmega16u2 programmé avec nos programmes, il est possible de réaliser différents tests à partir du PC. Il existe 4 programmes de test :
40   - * ListDevices : retourne une liste de tous les appareils connectés avec des détails.
41   - * ListEndpoints : cherche l'Arduino et affiche la liste des endpoints programmés avec quelques détails.
42   - * SendData : cherche l'Arduino et envoi une séquence automatique via les endpoints pour faire clignoter des LEDs sur l'arduino.
43   - * ReceiveAndSendData : cherche l'Arduino et se met en attente de données envoyé par la carte via l'endpoint dédié aux boutons. Lorsque l'utilisateur appui sur un bouton, les données sont réceptionnées et retourné sur l'endpoint des LEDs pour ordonner à l'Arduino leur allumage.
44   -
45   -## Détails et explications techniques
46   -
47   -### Modification de nInvaders
48   -
49   -Pour implémenter le contrôle par la carte Arduino, nous avons principalement modifié la fonction readInput. Nous avons choisi de lire les entrées par scrutation. Nous avons donc ajouté un timeout à la fonction getch pour le clavier et nous avons utiliser la fonction receiveData avec un timeout de 50 ms. De ce fait le jeu n'est pas bloqué.
50   -
51   -Il suffit ensuite de faire correspondre les données reçues avec des actions en jeu.
52   -
53   -### Pilote USB
54   -
55   -Pour simplifier l'utilisation du code, nous avons créé plusieurs fonctions clées :
56   - * Une fonction "start" pour initialiser le librairie usb-1.0, chercher la carte Arduino grâce à ses IDs, réclamer les interfaces, détacher le kernel des interfaces et lister les endpoints dans un tableau.
57   - * Une fonction "sendData" pour envoyer des données.
58   - * Une fonction "receiveData" pour recevoir des données.
59   - * Une fonction "stop" pour libérer les interfaces et supprimer les structures de données.
60   -
61   -Ce découpage s'inspire du fonctionnement des sockets (dans son utilisation uniquement, le fonctionnement étant évidemment différent).
62   -
63   -### atmega328p
64   -
65   -L'atmega328p nous sert ici pour acquérir la valeur des différents capteurs (boutons et joystick) et allumer les LEDs sur commande. Pour nous simplifier la tâche, nous avons utiliser un ordonnanceur et écrit 3 tâches :
66   - * Pour l'affichage des LEDs
67   - * Pour la lecture de la valeur des boutons
68   - * Pour la lecture des axes du joystick
69   -
70   -### atmega16u2
71   -
72   -L'atmega16u2 sert uniquement de traducteur entre le PC et l'atmega328p. Il lit les informations transmises par le PC via les endpoint et le retransmet via liaison série et vis versa. (Voir "Conventions pour la communication" pour plus de détails sur les traductions).
73   -
74   -### Conventions pour la communication
75   -
76   -De 328p vers 16u2 : 0bXYZZZZZZ
77   -* X = 0 -> les Z sont les états de chaque bouton
78   -* X = 1 & Y = 0 -> les Z correspondent à la valeur X du joystick
79   -* X = 1 & Y = 1 -> les Z correspondent à la valeur Y du joystick
80   -
81   -De 16u2 vers PC. Cas des boutons (Endpoint 0x83) : 0b00ZZZZZZ
82   -* 2u2 -> PC (endpoint button 1) : 0b000ZZZZZ
83   -* Z : état d'un bouton
84   -
85   -De 16u2 vers PC. Cas du joystick (Endpoint 0x84) : 0b1YZZZZZZ
86   -* 12u2 -> PC (endpoint button 2) : 0bX0YYYYYY
87   -* X = 0 -> valeur en X du joystick
88   -* X = 1 -> valeur en Y du joystick
89   -
90   -De PC vers 16u2. Cas des LEDs 8 9 10 11 12 (Endpoint 0x01) : 0b000XXXXX
91   -* X = état d'une LED (LEDs 8 9 10 11 12)
92   -
93   -De PC vers 16u2. Cas de la LED 13 (Endpoint 0x02) : 0b0000000X
94   -* X = état de la LED 13
95   -
96   -De 16u2 vers 328p : 0b00YYYYYY
97   -* Y = état d'une LED (LEDs 8 9 10 11 12 13)
98   -
99   -## Notes
100   -
101   -Les licences de certains programmes ont été supprimé pour gagner de la place (nInvaders notemment). Ce projet est à usage privé uniquement.
102   -
atmega328p/makefile renamed to atmega328p/Makefile
... ... @@ -34,4 +34,4 @@ $(TARGET).hex: $(TARGET).elf
34 34 upload: $(TARGET).hex
35 35 stty -F $(TERM) hupcl # reset
36 36 $(DUDE) $(PGMERISP) -U flash:w:$(TARGET).hex
37   - make clean
  37 +
... ...
installAndPlay.sh deleted
... ... @@ -1,31 +0,0 @@
1   -#!/bin/bash
2   -
3   -echo "Compilation et installation du programme dans l'atmega328p..."
4   -
5   -echo ""
6   -echo "Courcircuitez le pin de reset de l'atmega16u2 à la masse."
7   -read -n1 -s -r -p "Appuyez sur une touche pour continuer"
8   -make -C ./atmega16u2/base/ || exit 1
9   -
10   -echo ""
11   -echo "Débranchez et rebranchez la carte Arduino."
12   -read -n1 -s -r -p "Appuyez sur une touche pour continuer"
13   -make -C ./atmega328p/ upload || exit 1
14   -
15   -
16   -echo ""
17   -echo "Compilation et installation du programme dans l'atmega16u2..."
18   -
19   -echo ""
20   -echo "Courcircuitez le pin de reset de l'atmega16u2 à la masse."
21   -read -n1 -s -r -p "Appuyez sur une touche pour continuer"
22   -make -C ./atmega16u2/custom/PolytechLille/PAD upload || exit 1
23   -
24   -echo ""
25   -echo "Débranchez et rebranchez la carte Arduino."
26   -read -n1 -s -r -p "Appuyez sur une touche pour continuer"
27   -
28   -
29   -echo ""
30   -echo "Compilation et lancement du jeu..."
31   -make -C ./ninvaders/ exec || exit 1
play.sh deleted
... ... @@ -1,4 +0,0 @@
1   -#!/bin/bash
2   -
3   -echo "Compilation et lancement du jeu..."
4   -make -C ./ninvaders/ exec || exit 1
tests/SendData/a.out 0 → 100755
No preview for this file type