Intégration d'un joystick dans le logiciel Perfly SGI



Documents pareils
Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Le langage C. Séance n 4

REALISATION d'un. ORDONNANCEUR à ECHEANCES

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Sous réserve de modifications techniques et des disponibilités, fabrication française.

Généralités sur le Langage Java et éléments syntaxiques.

PGS TABLETTE PRINCIPES DE BASE Manuel Utilisateur

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

La programmation des PIC en C. Les fonctions, les interruptions.

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

I. Introduction aux fonctions : les fonctions standards

Projet Robot Centaure

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

COMMUNICATION PC/MINITEL

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

MEDIAplus elearning. version 6.6

1/ Présentation de SQL Server :

Rapport projet MMI. Luis Domingues, I3 Naomi Favre, I3 Tiago De Deus, I3. Luis Domingues, Tiago De Deus, Naomi Favre SP Interfaces Multimodales

Education Delivery Intelligent Tool

Pluridisciplinarité. Classe de BTS DATR

Les structures. Chapitre 3

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

Poker. A rendre pour le 25 avril

Projet : PcAnywhere et Le contrôle à distance.

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Introduction à la Programmation Parallèle: MPI

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

56K Performance Pro Modem

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

Export vers le format WAV dans ArtemiS SUITE

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

OpenOffice.org IMPRESS. Notes de cours Novembre 2005 Version 1.0

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.0

PROJET ALGORITHMIQUE ET PROGRAMMATION II

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Chapitre 2. Classes et objets

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation C. Apprendre à développer des programmes simples dans le langage C

Configuration des téléphones VoIP via le web

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Les chaînes de caractères

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.3

Le rôle Serveur NPS et Protection d accès réseau

Créer un sondage en ligne

DirXML License Auditing Tool version Guide de l'utilisateur

TP3 : Manipulation et implantation de systèmes de fichiers 1

Le modèle de données

Guide Expert Comptable Production Coala

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

MID. Table des matières

Bien travailler sur plusieurs écrans

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Chapitre 1 : Introduction aux bases de données

Symantec Backup Exec Remote Media Agent for Linux Servers

Utilisation du visualiseur Avermedia

Windows 8 Installation et configuration

Projet gestion d'objets dupliqués

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

ET 24 : Modèle de comportement d un système Introduction à Labview et initiation à la réalisation d un Instrument Virtuel (VI).

ENVOI EN NOMBRE DE MESSAGES AUDIO

Parcours FOAD Formation EXCEL 2010

TP, première séquence d exercices.

Systeme d'exploitation

Compte-rendu de projet de Système de gestion de base de données

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Projet Active Object

Installer des périphériques

Manuel d utilisation NETexcom

Trousse de sécurité d'alarme - NVR

ALERT NOTICE D UTILISATION DU DRIVER VOCALYS. (Cesa 200 bauds / Contact-ID)

1. Introduction Création d'une requête...2

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

contact@nqicorp.com - Web :

1 Mesure de la performance d un système temps réel : la gigue

Bases de programmation. Cours 5. Structurer les données

Mentions légales (non traduites) Introduction Légendes Schémas de raccordement Configuration de la S16...

TP1 : Initiation à Java et Eclipse

Compression de Données - Algorithme de Huffman Document de Conception

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Acronis Backup & Recovery 10 Advanced Server Virtual Edition. Guide de démarrage rapide

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Installation et prise en main

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

Introduction au langage C

TCHATONS PAR LIAISON SANS FIL BLUETOOTH

Guide de fonctions du téléphone du système SCI Norstar

Travaux Dirigés n 1 : chaînes de caractères

PROTECTION DES DONNEES PERSONNELLES ET COOKIES

Cours 6 : Tubes anonymes et nommés

gestion des processus La gestion des processus

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Transcription:

Intégration d'un joystick dans le logiciel Perfly SGI 1) Le joystick 1.1) Description C'est le modèle Flybox, de base, de la société BG SYSTEMS INC. Ce joystick possède 3 axes, 2 manettes, 2 boutons «classiques» et 6 boutons de type «interrupteur» Il est connecté à un ordinateur via une liaison série RS-232. Il doit être alimenté électriquement. Il est livré avec quelques morceaux de codes utilisable pour piloter ce dernier. 1.2) Modèle de fonctionnement Pour utiliser le joystick, il faut: Initialiser le joystick Utiliser le joystick : Envoyer une demande de donnée au joystick Attendre l'arrivées des données Lire les données sur le port Indiquer au joystick un arrêt Il est livré avec du code qui fournit au travers d'une librairie les fonctions suivantes: struct bglv contient des informations utilisés par les différentes fonctions de la librairie int analog_in: sélection des entrées analogiques (AICX, avec 0<X<9 à combiner) int dig_in: sélection des entrées digitales (DIC1, DIC2 et DIC3 à combiner, chacun comprend 8 canaux) int baud: vitesse de la ligne série (BAUDX, ou X = 24, 48, 96, 192, 384, 576, 1152 en milliers) float ain[8]: données des entrées digitales, valeurs comprises entre -1.00 et 1.00 int din[3]: données des entrées analogiques, les 8 bits de poids faibles contiennent 0 ou 1 est correspondent à l'état d'un canal. open_lv(struct * bglv, "", FB_NOBLOCK); ouverture du port série. Le second peut contenir le chemin vers /dev/tty auquel le joystick est connecté (en cas de chaîne vide, la variable d'environnement FBPORT est consultée). Le troisième indique sur open utilise un mode bloquant ou non (cf. man open) init_lv(struct * bglv); peut modifier la vitesse du port série, récupère des informations sur la version de EPROM du joystick et effectue quelques tests de compatibiliés close_lv(struct * bglv); arrêt de l'utilisation du joystick w_lv(struct * bglv->sp_fd, "o"); envoie de caractères au joystick. Le deuxième argument est la chaîne de caractère envoyée : «o» demande au joystick de communiquer ses données sur le port série r_lv(struct * bglv); lecture des informations du joystick 1.3) Utilisation Une petite API a été développé pour utiliser plus aisément le joystick, afin de: localiser le port série sur lequel le joystick est connecté calibrer le joystick traiter facilement le problème du délai d'attente entre la demande de données au

joystick et leurs disponibilités pour lecture de pouvoir exploiter facilement les données du joystick, notamment de pouvoir comparer l'état des boutons du joystick entre l'instant t-1 et t. L'API est composé d'une structure de données et des fonctions : struct Fbdescripteur Contient des informations pour gérer le joystick et les données courant (instant t) et ancien (instant t-1) construites de la façon suivante: float courant.axe[3]: La valeur de chaque axe comprise entre -1.000 et 1.000. FB_X ou 0 pour l'axe X, FB_Y ou 1 pour l'axe Y, FB_Z ou 2 pour l'axe Z float courant.m[2]: La valeur de chaque manette comprise entre -1.000 et 1.000 char courant.b[9]: L'etat de chaque bouton, 1 appuyer et 0 dans le cas contraire struct FBdescripteur * FB_Initialiser(void); Pour initialiser un joystick. Si la variable d'environnement FBPORT n'est pas initialisée avec le chemin du port série auquel le joystick est branché, le joystick est automatiquement détecté. void FB_Arreter(void); Pour arrêter d'utiliser tous les joysticks int FB_Calibrer(struct FBdescripteur * _descripteur); Pour calibrer un joystick int FB_Interroger(struct FBdescripteur * _descripteur, int _mode); Pour demander des données au joystick. Peut fonctionner de façon synchrone ou asynchrone, avec mode: FB_SANSATTENTE ou 0, pour une interrogation asynchrone FB_ATTENTE ou 1, pour une interrogation synchrone int FB_Valeurs(struct FBdescripteur * _descripteur); Pour lire les données retourner par le joystick char * FB_Detection(void); Retourne le chemin d'accès au périphérique correspondant au premier joystick trouvé. 2) Perfly Perfly est un logiciel de démonstration de la librairie graphique OpenGL Performer de SGI. Il permet d'afficher des modèles 3D. Le but est d'intégrer le support de la flybox au logiciel Perfly. Le travail a été effectué sur la version écrite en C. Les parties de OpenGL Performer qui nous intéressent sont : libpfutil : librairie contenant des fonctions diverses, notamment la gestion «bas niveau» de la flybox libpfui : librairie contenant en parti le code pour gérer l'interaction avec un utilisateur Le problème de ces deux librairies est qu'elles sont indiquées comme non supportées, leurs API pouvant être modifiées dans des versions suivantes de Performer. Par conséquent, la librairie libpfutil ne sera pas utilisée, à la place l'api écrite pour manipuler le joystick sera utilisée. Et libpfui sera utilisée au minimum. Dans la libpfui : pfiinputxform est utilisé pour lier les routines pour récupérer et pour gérer les interactions avec l'utilisateur. Il contient, entre autres, la routine de gestion des interactions utilisateur et un objet de type pfiinput, contenant la routine de récupération des événements utilisateurs. pfiinput est un objet qui contient, entre autres, la routine pour gérer les interactions utilisateurs, qui informe la routine de gestion en modifiant les attributs du pfiinputxform le contenant. Perfly stocke ses principales données dans la structure ViewState. Il est composé de trois parties principales :

1. Initialisation du logiciel et du matériel. Nous nous intéresseront plus précisément à initxformer (perfly/perfly.c), qui initialise les objets de type pfiinputxform gérant le point de vue. 2. Boucle principale d'exécution: synchronisation, calcule critique (point de vue), affichage, calcule non critique pour la simulation 3. Arrêt Deux solutions ont été étudiées pour pouvoir utiliser le joystick en modifiant le moins possible le code source de Perfly: 1. Simuler l'utilisation de la souris avec le joystick 2. Utiliser le joystick pour modifier directement le point de vue 2.1) Simuler l'utilisation de la souris avec le joystick Perfly utilise une structure pfumouse, pour conserver les informations concernant la souris. Nous allons modifier la fonction utilisée pour traiter les informations de la souris. Cette fonction traitera les informations en provenance du joystick et les placera dans un pfumouse propre au joystick, puis elle appellera l'ancienne fonction qui effectuera les traitements relatifs aux informations de notre objet pfumouse du joystick plutôt que sur celui de la souris. L'initialisation de la gestion des entrées / interactions sur le modèle se fait dans: perfly/perfly.c void initxformer(void) { ViewState->xformer = pfinewtdfxformer(pfgetsharedarena()); pfixformerautoinput(viewstate->xformer, ViewState->masterChan, &ViewState->mouse, &ViewState->events); pfixformernode(viewstate->xformer, ViewState->sceneGroup); pfixformerautoposition(viewstate->xformer, NULL, ViewState->sceneDCS); pfixformerresetcoord(viewstate->xformer, &ViewState->initViews[0]); xformermodel(viewstate->xformermodel, ViewState->collideMode); resetposition(pos_orig); /* rajout pour l'intégration du joystick */ init_joystick(viewstate->xformer, ViewState->masterChan, &ViewState->mouse, &ViewState->events); } et l'ajout de #include «joy.h» init_joystick initialise le joystick, récupère l'ancienne fonction gérant la souris puis la remplace par une nouvelle fonction de récupération des informations de la souris. Un deuxième objet pfumouse, joystick, est crée pour stocker les informations du joystick lorsqu'ils sont transformés en informations souris. La fonction gérant le joystick sera appelée dans PreFrame() situé dans la boucle principale de la fonction main du fichier common/main.c. Elle récupère les informations du joystick, lorsqu'elles sont disponibles, les transformes en événement de souris dans l'objet joystick, puis appelle la fonction initiale de gestion de la souris sur l'objet joystick. Les deux fonctions de gestion du joystick, l'initialisation et le callback se trouve dans joy/joy2.c.

Avant de pouvoir utiliser le joystick, il faut bouger la souris sur la scène de Perfly. 2.2) Utiliser le joystick pour modifier directement le point de vue Il faut modifier la routine de calcule de point de vue, situé dans l'objet pfiinputxform. Normalement la routine de collection des entrées utilisateurs et celle du calcule de point de vue sont dissociée, ce que nous ne feront pas. La récolte des informations du joystick et leurs traitements s'effectuera dans la fonction du calcul du point de vue. On modifie Perfly de la même façon que précédemment. Les deux fonctions de gestion du joystick, l'initialisation et le callback se trouve dans joy/joy3.c. Avant de pouvoir utiliser le joystick, il faut placer le mode de déplacement dans Perfly en mode Fly. ou utiliser perfly -f La position du point de vue est placée dans un objet pfcoord, contenant deux tableaux de flottant, l'un pour contenant ses coordonnées (x,y et z), l'autre son orientation (h,p et r). Il faut mettre à jour ces coordonnées, puis les insérer dans l'objet pfiinputxform, avec la fonction

pfiixformcoord. 2.3) Compilation de Perfly Il faut appliquer le patch fournit à source de Perfly (/usr/share/performer/sample/c/perfly et / usr/share/performer/sample/c/common). Cela doit créer les répertoires bg, flybox et joy, ainsi qu'un fichier makefile. bg contient le code fournit avec la flybox flybox contient le code pour utiliser la flybox joy contient le code d'initialisation du joystik, ainsi que les différents callback. Contient joy2.c, émulation de la souris par le joystick et joy3.c, déplacement du point de vue par le joystick. Le fichier joy.c est la copie de l'un des deux précédents en fonction du type de fonctionnement du joystick désiré. Pour compiler le projet, il faut utiliser: make : pour compiler Perfly avec le joystick modifiant le point de vue make alternate : pour compiler Perfly avec le joystick émulant la souris