/*
 * Fonctions spécifiques à la gestion du clavier de la borne d'accès
 */

#ifndef _CLAVIER_H
#define _CLAVIER_H

#include <Socket.h>
#include <string.h>
#include <afficheur.h>

// Permet de scanner le clavier physique et de récupérer le code de la touche enfoncée. 
inline
int readClavier(Socket &barriere)
{
  barriere.envoyer("Clavier:readClavier");
  return atoi(barriere.recevoir());  
}

// Cette méthode fait appel à la méthode readClavier(). Elle est blocante. 
// Elle attend qu'une touche soit effectivement enfoncée.
inline
int toucheEnfoncee(Socket &barriere) 
{
  int touche;
  while ((touche = readClavier(barriere)) == -1);
  return touche;
}

// Contrôler la saisie du code de l'automobiliste (4 chiffres).
// Il doit correspondre au code secret passé en argument de la fonction
inline 
bool codeBon(Socket &barriere, int codeSecret) 
{
  int code = 0;
  for (int i=0; i<4; i++) {
    code *= 10;
    code += toucheEnfoncee(barriere);
    afficheCaractere(barriere, '#');    
  }
  return code == codeSecret;
}

#endif