Etudes/BTS/C++/RessourcesReveil/clavier.cpp

77 lines
1.9 KiB
C++
Raw Normal View History

2016-10-14 15:52:18 +00:00
/**************************************************************************
Classe Clavier
Auteur : Philippe CRUCHET - Janvier 2015
R<EFBFBD>le : Permet de g<EFBFBD>rer les touches du clavier de l'horloge.
Projet : horloge
IDE : Code::Blocks sous linux utilisation de termios
*************************************************************************/
#include "clavier.h"
Clavier::Clavier()
/*
* R<EFBFBD>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<EFBFBD>le : Lit si une touche est enfonc<EFBFBD>e
* Fonction non bloquante.
*
* Param<EFBFBD>tre de retour 0 si aucune touche n'est enfonc<EFBFBD>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 ;
}