traduction fsx

Download Traduction FSX

Post on 26-Jul-2015

188 views

Category:

Documents

3 download

Embed Size (px)

TRANSCRIPT

Traduction dun chapitre du livre Building Recreational Flight Simulators, dit par Mikes Flight Deck Books. www.mikesflightdeckbooks.com. Traduction par Jean-Paul Corbier, en juillet 2011.

Linterfaage avec MSFSUn simulateur de vol nest quune pice de muse inerte tant quelle a pas t amene la vie par une application de simulation effective. Ceci exige une connexion de haute qualit entre lapplication et les divers systmes qui composent votre simulateur de vol. Cette connexion a des composants logiciels et des composants matriels. Ce chapitre traite de la partie logicielle. Dplacer les donnes dans les deux sens vers les applications de simulation de vol a t le plus gros travail dans la construction dun simulateur de vol. Ce travail a t rendu beaucoup plus facile grce la mise sur le march de MSFX. FSX Deluxe est livr avec une API, interface de programmation, appele SimConnect. Parmi ses fonctions, SimConnect peut lire et crire des donnes de FS. Lessentiel de ce chapitre est ddi SimConnect. Nous commencerons avec un survol des processus de lecture et dcriture et des appels aux fonctions de SimConnect qui les permettent. Il y a une section dtaille qui explique comment mettre en uvre ldition gratuite de Microsoft Visual C++ express dans le dveloppement dapplications dentre/sortie de SimConnect. Il y a deux exemples de programmes qui prsentent la lecture et lcriture de donnes de FS. Les deux programmes utilisent le port srie com et fonctionne avec les projets matriels dcrits dans les autres chapitres. Il y a une couverture brve dautres options pour interfacer Flight Simulator sans utiliser SimConnect. Finalement, il y a un survol dautres applications de simulation de vol qui ont des possibilits de programmation dinterfaces.

Linterface avec Flight SimulatorLe lancement de Flight Simulator X a t un vnement important pour les amateurs de simulation de vol. FSX est la premire version intgrer lAPI (application program interface) dusage gnral appele SimConnect . Bien que les amateurs ont t capables dutiliser les API pour les tableaux de bord et les instruments et divers programmes dautres fournisseurs, ces approches nont pas eu la versatilit ni le support officiel dont jouit SimConnect. Si vous voulez construire un simulateur de vol domestique bas sur FSX, alors SimConnect est la voie suivre. SIMCONNECT SimConnect est un systme de messagerie pilot par les vnements qui supporte les communications dans les deux sens et vous permet dinteragir avec la plupart des aspects de FSX. LAPI de SimConnect comprend plusieurs douzaines de fonctions. Par chance, nous avons seulement besoin dune petite poigne de ces fonctions pour lire et crire les donnes utilises par FSX dans un simulateur domestique. Un survol de la lecture des donnes Il y a quatre tapes pour extraire des donnes de FSX : 1. 2. 3. 4. tablir une connexion avec SimConnect. dire SimConnect de quelles donnes on a besoin. dire SimConnect quand collecter les donnes et o les envoyer. dire SIMCONNECT denvoyer effectivement les donnes.

Page 1 de 18

A la lecture dun exemple de programme qui utilise SIMCONNECT, il est facile de perdre la trace de ce qui se passe. Garder les tapes ci-dessus lesprit aide sy retrouver. Etape 1 : connexion SIMCONNECT Avant que vous ne puissiez commencer une conversation sense avec SIMCONNECT, vous devez attirer son attention. Vous faites ceci en appelant la fonction SimConnect_Open(). Cela tablit une connexion et dtermine comment, et si, votre programme sera inform de la disponibilit de donnes. Avant dappeler cette fonction vous devez crer une poigne vide (empty Handle) associe avec la connexion SIMCONNECT. Une poigne est une espce particulire de pointeur que vous utiliserez pour faire rfrence la connexion quand vous ferez les prochains appels aux fonctions SIMCONNECT. Quand vous appelez SimConnect_Open(), vous lui passez un pointeur vers cette poigne. SIMCONNECT charge la poigne avec un numro de connexion valide si lappel la fonction a russi ou bien un code derreur si elle choue. Vous avez le choix de configurer SIMCONNECT pour informer de manire active votre programme de certaines conditions comme par exemple la disponibilit de certaines donnes. SIMCONNECT peut signaler ceci en utilisant le systme de messagerie Windows ou bien en crant un vnement. Si vous choisissez dutiliser le systme de messagerie, vous devez fournir un code de message et la poigne vers une fentre pour recevoir ce code. Le code de message est simplement un nombre entier de votre choix. Si vous dcidez dutiliser un vnement pour le signalement, vous devez fournir une poigne vers lobjet vnement. Vous ntes pas tenu dutiliser lune ou lautre de ces options. Vous pouvez simplement contrler priodiquement avec SIMCONNECT si quelque chose dintressant est arriv. Je reviendrai plus longuement l-dessus ltape quatre.HRESULT SimConnect_Open(

HANDLE* phSimConnect, LPCSTR szName, // HWND hWnd, // DWORD UserEventWin32, HANDLE hEventHandle, DWORD ConfigIndex );

//pointeur vers une poigne qui identifie votre connexion. nom de votre programme poigne vers votre fentre // message envoyer votre fentre quand la donne est disponible // poigne de lvnement tablir quand la donne est disponible // index dans votre fichier SimConnect.cfg

tape 2 : slection des variables de simulation spcifiques dont vous avez besoin Vous devez dfinir un groupe de variables de simulation que SIMCONNECT aura rapporter. Vous faites ceci en utilisant la fonction SimConnect_AddToDataDefinition(). Chaque appel cette fonction ajoute une variable la dfinition du groupe. Les noms de variables de simulation, les units des variables et les types utiliss dans cette fonction sont lists dans le SDK de SIMCONNECT. Vous pouvez dfinir plus dun groupe. Chaque groupe a un identificateur unique que vous devez fournir. Cest simplement un index. Typiquement, vous utiliserez une numration pour associer chaque index avec un texte significatif. Vous avez le choix davoir les donnes de simulation qui vous soient rapportes priodiquement ou bien seulement en cas dun changement minimum de leur valeur. Vous configurez cette option en entrant une valeur non nulle dans le paramtre fEpsilon et en positionnant des flags dans la fonction SimConnect _RequestDataOnSimObject(), prsente ltape trois.HRESULT SimConnect_AddToDataDefinition( HANDLE hSimConnect, // poigne vers votre connexion SimConnect SIMCONNECT_DATA_DEFINITION_ID DefineID, // identificateur du groupe de donnes

Page 2 de 18

const char* DatumName, // nom de la variable de simulation ajouter au groupe const char* UnitsName, // unit utiliser pour la variable SIMCONNECT_DATATYPE DatumType, // type de variable pour la donne float fEpsilon, // variation minimale de la variable avant rapport DWORD DatumID // tag utiliser si le rapport est en format Tagged );

tape 3 : dmarrage de la rception des donnes Utiliser la fonction SimConnect_RequestDataOnSimObject()quand vous tre prt faire rapporter les donnes par SIMCONNECT. Cet appel la fonction fixera aussi la frquence laquelle les structures de donnes sont transmises. Vous pouvez faire en sorte que les donnes soit envoyes une seule fois ou bien synchroniser la transmission des donnes avec le frame rate de la simulation, le visual frame rate de la simulation ou encore une fois par seconde. Vous pouvez encore configurer SIMCONNECT pour sauter un certain nombre de priodes entre les transmissions. Par exemple, si vous avez besoin de donnes pour les instruments de vol 10 fois par seconde et que vous avez 30 FPS, vous pouvez synchroniser la transmission des donnes sur le visual frame rate, et sauter deux visual frames aprs chaque transmission de donnes. Cette fonction reoit aussi une paire de flags comme paramtres pour vous permettre de sauter des transmissions sil ny a pas de changement significatif dans les donnes. Vous pouvez vous arranger pour avoir toute la structure de donnes transmise seulement si une ou plus de ses variables change dune certaine valeur fEpsilon. Par ailleurs vous pouvez configurer SIMCONNECT pour envoyer seulement la variable qui a chang. Si vous slectionnez cette option, la donne sera envoye en format Tagged et en utilisant le tag que vous avez fourni quand vous avez tabli la dfinition des donnes ltape prcdente. Configurer SIMCONNECT pour un envoi des donnes de manire priodique convient pour des variables qui changent continuellement, comme lincidence et le roulis dun avion. Les rapporter aprs un changement minimum est utile quand on suit une variable qui change lentement ou peu frquemment comme la quantit de carburant.HRESULT SimConnect_RequestDataOnSimObject( HANDLE SimConnect , // poigne de connexion SIMCONNECT_DATA_REQUEST_ID RequestID, // identificateur de la demande de donnes SIMREQUEST_DATA_DEFINITION_ID DefineID, // le groupe de donnes demand SIMCONNECT_OBJECT_ID ObjectID, // de quoi traite la donne SIMCONNECT_PERIOD Period, // frquence de collection des donnes SIMCONNECT_DATA_REQUEST_FLAG Flags, // options DWORD origin, // quand dmarrer la transmission des donnes DWORD interval, // combien de priodes sauter DWORD limit // quand arrter la transmission des donnes ) ;

tape quatre : la demande des structures de donnes SIMCONNECT ne dlivre pas de donnes votre programme tant que vous ne lui en demandez pas spcifiquement. SIMCONNECT vous enverra les donnes, mais elles seront tamponnes (buffered) jusqu ce que votre programme les reoive rellement. Ceci vous permet de synchroniser larrive des donnes avec leur traitement. Cela vite davoir de donnes en entre qui changent mystrieusement quand vous tes seulement mi-chemin du travail faire avec elles, une situation qui est rarement considre comme agrable. Une fois que vous appelez avez appel SIMCONNECT SimConnect_RequestDataOnSimObject, SIMCONNECT construit la structure de donnes et la place dans une file dattente de messages pour vous. Vous pouvez extraire cette structure de la file d