MAJ BROSSARD

Dependencies:   mbed

joystick3.c

Committer:
singularity
Date:
2014-10-22
Revision:
3:8f2c0c324296

File content as of revision 3:8f2c0c324296:

#include <stdlib.h>
#include <SDL.h>
#include <stdio.h>
#include <termios.h>
#include <sys/fcntl.h>
#include <unistd.h>


int initSerie() {

    int descripteur;
    struct termios  config;
    char const *port = "/dev/ttyUSB0"
    FILE* debugInitSerie = NULL; 
    debugInitSerie = fopen("debugInitSerie.txt","w+");
    
    if(debugInitSerie == NULL)
        return EXIT_FAILURE;
        
    fprintf(debugInitSerie,"Debut\n");
    
    
    /* Ouverture de la liaison serie */
    if ( (descripteur=open(port,O_RDWR)) == -1 ) {
        perror("open");
        fprintf(debugInitSerie,"Erreur ouverture port serie\n");
        exit(-1);
    }

    /* Lecture des parametres courants */
    tcgetattr(descripteur,&config);

    /*--------------CONFIG-------------------*/
    /* On ignore les BREAK et les caracteres avec erreurs de parite */
    config.c_iflag = IGNBRK | IGNPAR;
    /* Pas de mode de sortie particulier */
    config.c_oflag = 0;
    /* Liaison a 9600 bps avec 7 bits de donnees et une parite paire */
    /*config.c_cflag = B9600 | CS7 | PARENB;*/
    config.c_cflag = CS7 | PARENB;
    /* Mode non-canonique avec echo */
    /*config.c_lflag = ECHO;*/
     config.c_lflag = 0; /*Pas d'echo pas canonique*/
    /* Caracteres immediatement disponibles */
    config.c_cc[VMIN] = 1;
    config.c_cc[VTIME] = 0;
    /*Vitesse reglage*/
    cfsetispeed(&config, B9600);
    cfsetospeed(&config, B9600);

    /* Sauvegarde des nouveaux parametres(Modif immédiate TCSANOW)*/
    if(tcsetattr(descripteur,TCSANOW,&config) == -1) {
        fprintf(debugInitSerie,"Erreur tcsetattr\n");
        exit(-1);
    }
    fprintf(debugInitSerie,"InitSerie OK");
    fclose(debugInitSerie);
    return descripteur;
}

void envoiCommande(char dir, char md, char mg, int fd){
    FILE* debugcommande = NULL; 
    debugcommande = fopen("debugcommande.txt","w+");
    char commande[10];
    commande[0] = 'S';
    commande[1] = 'C';
    commande[2] = dir;
    commande[3] = md;
    commande[4] = mg;
    commande[5] ='\n';
    fprintf(debugcommande"%c%c%d%d%d",commande[0],commande[1],commande[2],commande[3],commande[4]);
    fclose(debugcommande);
    write(fd,commande,6);
}

char convert(Sint16 a) {
    int16 b = (int16)a;
    int8 c = b>>8;
    char res = (char) c;
    return res;
}

int main(int argc, char **argv)
{
    FILE debug = NULL;
    debug = fopen("debug.txt","w+");
    
    if(debug == NULL)
        return EXIT_FAILURE;
        
    fprintf(debug,"Debut\n");
    
    int fd = initSerie();

    if(SDL_Init(SDL_INIT_JOYSTICK) < 0){ // initialise le joystick
        return EXIT_FAILURE;
        fprintf(debug,"Erreur init sdl\n");
    }


    SDL_Joystick *joystick; // on crée le joystick
    joystick = SDL_JoystickOpen(0); // on l'assigne au numéro 0
    SDL_Event evenements;
    Sint16 dir;
    Sint16 propulsion;

    SDL_JoystickEventState(SDL_ENABLE);
    while(1)
    {
        while(SDL_PollEvent(&evenements)) // tant qu'il y a des évènements à traiter
        {
            switch(evenements.type)
            {
            case SDL_JOYAXISMOTION:
                if(evenements.jaxis.axis == 0 && evenements.jaxis.which == 0)
                {
                    dir = evenements.jaxis.value;
                    fprintf(debug,"%d",dir);
                }
                if(evenements.jaxis.axis == 1 && evenements.jaxis.which == 0)
                {
                    propulsion = evenements.jaxis.value;
                    fprintf(debug,"%d\n",propulsion);
                }
                break;
                envoiCommande(convert(dir),convert(propulsion),convert(propulsion),fd);

            default:
                break;
            }
        }
    }
    /* Fermeture */
    SDL_JoystickClose(joystick);
    SDL_Quit();
    close(fd);
    close(debug);
    return EXIT_SUCCESS;
}