POUR ACCEDER A L'INTEGRALITE DU SUJET DE TP:
Si vous êtes en salle ER2AU, se connecter (en cliquant en haut à droite sur s'identifier) en tant que : utilisateur=au, mot de passe=au
Si vous êtes en salle ER2EN, se connecter (en cliquant en haut à droite sur s'identifier) en tant que : utilisateur=en, mot de passe=en
Si vous êtes en chez vous, et que vous n'arrivez pas à vous connecter via SSH et VNC à une salle de TP, se connecter (en cliquant en haut à droite sur s'identifier) en tant que : utilisateur=app, mot de passe=app
Si vous êtes en chez vous, et que vous arrivez à vous connecter via SSH et VNC à une salle de TP, se connecter (en cliquant en haut à droite sur s'identifier) en tant que : utilisateur=dist, mot de passe=dist
Polycopié du cours: https://bvdp.inetdoc.net/files/iut/cours_preparation_pic_qt_2021_complet_numbered.pdf
et: https://bvdp.inetdoc.net/files/iut/cours_POO_intro_complet_2021_numbered.pdf
Ce TP est la suite du tp: tppic
Objectifs :
On souhaite maintenant faire dialoguer chaque carte PIC avec une application tournant sur le PC étudiant correspondant. Dans un premier temps, vous utiliserez sur le PC étudiant l'exécutable BroadcastReceiver fourni puis vous écrirez votre propre exécutable sur PC en utilisant l'outil de développement QTCreator. A la fin du TP, vous utiliserez également l'outil d'analyse réseau pour vérifier la communication.
Repérer sur le schéma de la page imprimée fournie au premier TP les éléments utilisés pour faire dialoguer la carte PIC avec le PC étudiant. Identifier les numéros de ports UDP utilisables. Proposer les modifications nécessaires au programme du PIC.
Le résultat de cette analyse est que vous devez utiliser les numéros de ports 2700 et 2701 pour échanger des informations depuis le PC.
Le schéma suivant récapitule l'ensemble des matériels et logiciels que nous allons utiliser dans cette série de TP. Les différents éléments seront expliqués au fur et à mesure. A chaque étape, vous devez être capable d'identifier les portions utilisées et leur rôle. Vous devrez remplir les cases jaunes sur la feuille distribuée lors du TP.
L'application que vous devez développer vous est fournie dans un premier temps afin que vous la voyez fonctionner et sachiez ce que vous devez faire. Une application fonctionnant sur le PC et simulant le PIC est également fournie pour faciliter le développement et permettre aux étudiants n'ayant pas terminé le programme sur le PIC de faire ce TP.
Dans les dossiers récupérés se trouve un exécutable permettant de simuler la carte PIC. Il y a également le fichier de script .bat ou .sh qui permet de lancer simupic pour qu'elle utilise les bons numéros d'IP et de port (que vous avez du déterminer à l'exercice précédent) . Ce programme permet de simuler la carte PIC et de développer l'application sur PC sans avoir besoin de la carte PIC. Pour le test en local, vous pourrez utiliser l'adresse IP de la boucle locale (127.0.0.1).
Vous devez maintenant développer votre propre application QTbroadcastreceiver.
POUR OUVRIR LE PROJET avec QTCreator après l'avoir récupéré, vous devrez Copier/coller dans une console:
echo 'commence' cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant qtcreator broadcastreceiver.pro & echo 'fini'
Le projet est constitué des fichiers sources d'une application graphique sous QT. Votre code sera saisi dans l'implémentation de la fenêtre principale, à l'intérieur du fichier Sources→receiver.cpp. . Les définitions des méthodes et objets de la fenêtre principale sont quant à elles faites dans le fichier receiver.h. Ce sont les deux seuls fichiers que vous aurez à modifier jusqu'à nouvel ordre. Pour information le projet contient également:
.pro fichier décrivant le projet QT, les règles de compilation, les librairies à utiliser etc... main.cpp fichier décrivant le programme principal, qui se contente de lancer la fenêtre principale.
NB: Nous utiliserons sur le PC étudiant un seul Objet UdpSocket pour l'émission et la réception.
Une fois le projet ouvert, l'utilisateur peut choisir entre plusieurs mode d'affichages, notamment “Editer” et “Debogage” à l'aide des boutons sur la gauche de la fenêtre.
La fenêtre Projets fait apparaître les fichiers du (des) projet(s) ouvert(s), triés selon leur type. Sur la droite, la fenêtre affiche le contenu d'un fichier sélectionné.
CTRL+Click souris gauche sur un mot du programme permet de se déplacer à la déclaration d'une variable, d'un objet, d'une fonction, d'un type ou autre. Cela sera très utile pour connaître par exemple les méthodes utilisables sur un objet d'une certaine classe.
CTRL+B permet de compiler l'application, la fenêtre Sortie de compilation permet alors d'observer les éventuelles erreurs, sur lesquelles vous pourrez cliquer pour aller à la ligne correspondante dans le code.
CTRL+R permet d’exécuter le programme. Le programme devra être fermé en cliquant sur le bouton croix de la fenêtre avant de le recompiler ou de l’exécuter à nouveau.
F5 permet d'exécuter le programme en mode DEBUG. L'utilisateur passe alors en mode Debug, ce qui ajoute à l'affichage une zone à droite dans laquelle l'utilisateur pourra observer les variables et leurs valeurs. L'utilisateur pourra placer ou retirer des points d'arrêt en cliquant à gauche du numéro de ligne d'un fichier. Il pourra exécuter en pas à pas sans rentrer dans les fonctions à l'aide de F10 ou bien en entrant dans les fonctions à l'aide de F11. Il pourra ajouter une variable particulière à la liste des variables affichées en Debug en selectionant le nom de la variable dans le fichier programme et en cliquant droit dessus puis clic gauche sur ajouter un évaluateur d'expression.
Afin que l'application à développer sur PC soit capable d'émettre les datagrammes pour piloter la carte PIC, il faut implémenter une méthode void Receiver::sendUDP(int i), (i code le numéro de la led à allumer, donc le bouton pressé de l'application sur le PC). Cette méthode devra faire les actions suivantes:
La méthode void Receiver::sendUDP(int i) est appelée lorsque l'utilisateur presse un des boutons, le paramètre i codant le numéro du bouton.
Tester que l'appui sur le bouton i commute bien la led i du simulateur.
Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
echo 'commence' cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant git commit -a -m'emission' gitk & echo 'fini'
Contrairement à l'émission, qui survient à un moment maîtrisé par le programme (lors de l'appel de la méthode sendUDP), la réception doit pouvoir se faire à tout instant. Pour cela, un mécanisme proche d'une interruption matérielle est mis en place: lorsqu'un datagramme est reçu, une fonction est appelée pour le traiter. Comme avec les interruptions, il est nécessaire d'initialiser ce mécanisme et cela est fait dans la méthode constructeur de la fenêtre, qui est appelée lors de sa création.
Pour cela, ajouter dans la méthode constructeur de la fenêtre Receiver::Receiver(QWidget *parent) : Qdialog(parent) le réglage de l'IP du dispositif avec lequel communiquer et le port UDP en réception sur le PC.
QString m_destIP="1.1.1.2"; //à remplacer par l'IP unsigned int m_portIn=1234; //à remplacer par le port UDP à écouter
Ajouter à l'endroit indiqué après la création de udpSocket l'attache de udpSocket au port Udp:
udpSocket->bind(m_portIn, QUdpSocket::ShareAddress);
Et connecter le signal readyRead() au slot processPendingDatagrams() en utilisant:
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
Ainsi la méthode processPendingDatagrams() sera automatiquement appelée à la réception d'un datagramme sur le numéro de port choisi.
Il vous faut maintenant implémenter la méthode void Receiver::processPendingDatagrams() pour traiter les datagrammes reçus:
Tester que l'appui sur le bouton i dans l'application simupic est bien répercuté sur votre application.
Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
echo commence cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant git commit -a -m'reception' gitk & echo fini
Il est maintenant temps de tester votre application PC avec votre application PIC, pour cela:
Utilisez l'application Wireshark pour observer le traffic entre le PC et le PIC (détails d'utilisation sur la page wireshark):
Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
echo commence cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant git commit -a -m'avec carte pic' gitk & echo fini