/**************************************************************************
   Classe Clavier
   Auteur : Philippe CRUCHET - Janvier 2015
   Rôle   : Permet de gérer les touches du clavier de l'horloge.

   Projet : horloge
   IDE    : Code::Blocks sous linux utilisation de termios
 *************************************************************************/

#include "clavier.h"

Clavier::Clavier()
/*
 *	Rôle : Initialisation du clavier
 */
{
    tcgetattr(0,&initial_settings);
    new_settings = initial_settings;
    new_settings.c_lflag &= ~ICANON;
    new_settings.c_lflag &= ~ECHO;
    new_settings.c_lflag &= ~ISIG;
    new_settings.c_oflag &= ~NL0;
    new_settings.c_oflag &= ~CR0;
    new_settings.c_oflag &= ~TAB0;
    new_settings.c_oflag &=~BS0;
    new_settings.c_cc[VMIN] = 1;
    new_settings.c_cc[VTIME] = 0;
    cfsetospeed (&new_settings, B230400);
    cfsetispeed(&new_settings, 0);
    tcsetattr(0, TCSANOW, &new_settings);
}


Clavier::~Clavier()
{
    tcsetattr(0, TCSANOW, &initial_settings);
}

char Clavier::kbhit()
/*
 *	Rôle : Lit si une touche est enfoncée
 *         Fonction non bloquante.
 *
 * Paramètre de retour 0 si aucune touche n'est enfoncée,
 *                     sinon le code de la touche.
 */
{
    char ch = 0;
    new_settings.c_cc[VMIN]=0;
    tcsetattr(0,TCSANOW, &new_settings);
    read(0,&ch,1);
    new_settings.c_cc[VMIN]=1;
    tcsetattr(0,TCSANOW, &new_settings);
    return ch;
}

TOUCHES_CLAVIER Clavier::ScruterClavier()
{
    char touche = kbhit();
    TOUCHES_CLAVIER retour;
    switch (touche)
    {
        case '\n':
        case '\r': retour = FIN ;
            break;
        case ' ' : retour = MODE ;
            break;
        case '+' : retour = PLUS ;
            break;
        case '-' : retour = MOINS ;
            break;
        default : retour = AUCUNE ;
    }

    return retour ;
}
