- Main Page
- Namespaces
- Data Structures
- Files

- File List
- Globals

# D:/Basile/VisualCppProjects/hydroMEX3/hydroMEX3/joystick/joystick_PC.cpp

Go to the documentation of this file.

    00001
    00009 #include "joystick_PC.h"
    00010
    00011 #include "stdafx.h"
    00012
    00013 #include <windows.h>
    00014 #include <mmsystem.h>
    00015
    00016
    00017
    00018 //Configurer SDK:
    00019 //http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/
    00020 //Joystick lib:
    00021 //http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnargame/html/msdn_dos2win2.asp
    00022 //Utiliser joystick windoze:
    00023 //http://tcharles.developpez.com/joystick/
    00024
    00025
    00026
    00027 JOYINFOEX ActualPos; // Etat actuel et dernier état du joystick
    00028 DWORD dwBoutons; // Masque pour récupérer l'état des boutons
    00029 UINT uMax[2], uMin[2]; // Maximums et minimums de chacun des axes
    00030 UINT uPoolPeriod; // Temps entre deux intérogations du joystick
    00031 JOYCAPS InfosCaps; // Infos sur les capacités du joystick
    00032 BOOL bStop; // Test d'arrêt de la boucle (bouton 4)
    00033 POINT Curseur; // Curseur de la souris
    00034
    00035
    00036 int joystick_init()
    00037 {
    00038
    00039 //      AfficherJoysConnectes();
    00040 //      AfficherCaracs(0);
    00041
    00042         //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    00043
    00044         // initialisation du temps d'attente avec un minimum de 20 millisecondes
    00045     uPoolPeriod = 20;
    00046
    00047         if (joyGetDevCaps(JOYSTICKID1, &InfosCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0;
    00048
    00049
    00050     // Initialisation de la structure informationnelle avec sa taille
    00051     ActualPos.dwSize = sizeof(JOYINFOEX);
    00052
    00053     // Initialisation des autres membres que la taille de la structure à 0
    00054     // (Plus rapide que d'affecter 0 à chaque élément. En effet, il est
    00055     // obligatoire que tous les membres soient nuls sous peine d'échec)
    00056     memset(&(ActualPos.dwFlags),0,sizeof(JOYINFOEX) - sizeof(DWORD));
    00057     // Initialisation des variables d'état actuel avant de lancer la boucle
    00058     // de gestion du joystick
    00059     ActualPos.dwFlags = JOY_RETURNALL;
    00060     joyGetPosEx(JOYSTICKID1,&ActualPos);
    00061     dwBoutons = ActualPos.dwButtons;
    00062
    00063         return 1;
    00064 }
    00065
    00066
    00067
    00068 void joystick_getXYZR(float *X, float *Y, float *Z, float *R, bool doX, bool doY, bool doZ, bool doR)
    00069 {
    00070         // on réinitialise ActualPos avant d'appeller l'API
    00071     // pour savoir la position actuelle du joystick
    00072     memset(&(ActualPos.dwFlags),0,sizeof(JOYINFOEX) - sizeof(DWORD));
    00073     ActualPos.dwFlags = JOY_RETURNALL;
    00074     joyGetPosEx(JOYSTICKID1,&ActualPos);
    00075
    00076         if (doX) {*X = (float(ActualPos.dwXpos)/32768.0f) - 1.0f;}
    00077         if (doY) {*Y = (float(ActualPos.dwYpos)/32768.0f) - 1.0f;}
    00078
    00079         if (doZ) {*Z = (float(ActualPos.dwZpos)/32768.0f) - 1.0f;}
    00080         if (doR) {*R = (float(ActualPos.dwRpos)/32768.0f) - 1.0f;}
    00081
    00082         //std::cout<< "x: " << ActualPos.dwXpos << "y: " << ActualPos.dwYpos << "\n";
    00083         //printf("x: %5d y: %5d\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", ActualPos.dwXpos, ActualPos.dwYpos);
    00084
    00085         // On patiente le avant de retester la position du joystick
    00086     //Sleep(uPoolPeriod);
    00087 }
    00088
    00089 void joystick_close() //just in case MAC OSX needs such a function...
    00090 {
    00091 }