#include "Elmu.h"

/* ========================================== **
**                                            **
** ElmuKbd.c                                  **
**                                            **
** Auteur : Stephane Caron                    **
** Date :   Mars 2006                         **
** Projet : PPE - ELMU                        **
**                                            **
**   Implementation de la gestion des entrees **
** utilisateur via les differents boutons mis **
** a sa disposition                           **
**                                            **
** ========================================== */

// IS_PRESSED
//
// Determiner si un bouton donné est dans l'état
// pressé ou non.
//
char IS_PRESSED(char button)
{
    switch (button) {
        case BUTTON_OK:     return (porta & 1);
        case BUTTON_CANCEL: return (porta & 2);
        case BUTTON_EMPTY:  return (porta & 4);
        case BUTTON_CLEAN:  return (porta & 8);
        case BUTTON_UNIT:   return (porta & 16);
        case BUTTON_DECR:   return (portb & 64);
        case BUTTON_INCR:   return (portb & 128);
        default:            return 0;
    }
}

// ElmuParsePush
//
// Analyser les informations provenant de l'utilisateur
// à travers les différents boutons poussoirs.
//
void ElmuParsePush()
{
    switch (_screen) {

        // Prendre en charge les boutons de l'écran
        // de mise-a-jour du volume.

        case SCREEN_VOLUME:
            if (IS_PRESSED(BUTTON_UNIT)) {
               unit = ((unit + 1) % NB_UNITS);
                _sig_update = 1;
            } else if (IS_PRESSED(BUTTON_DECR)) {
                volume = (volume - 10);
                _sig_update = 1;
            } else if (IS_PRESSED(BUTTON_INCR)) {
                volume = (volume + 10);
                _sig_update = 1;
            } else if (IS_PRESSED(BUTTON_OK))
                ElmuShiftScreen(SCREEN_TIMER);
            break;
        
        // Aucune gestion n'est nécessaire durant la phare
        // "Verser le volume requis".
        
        case SCREEN_TIMER:
            break;
        
        // Pouvoir passer à l'écran suivant depuis le menu
        // de "Vidange" du système.
        
        case SCREEN_EMPTY:
            if (IS_PRESSED(BUTTON_OK))
                ElmuShiftScreen(SCREEN_MAIN);
            break;
        
        // Pouvoir poursuivre le processus de nettoyage.
        
        case SCREEN_CLEAN_1:
            if (IS_PRESSED(BUTTON_OK))
                ElmuShiftScreen(SCREEN_CLEAN_2);
            break;
        
        // Pouvoir poursuivre le processus de nettoyage.
        
        case SCREEN_CLEAN_2:
            if (IS_PRESSED(BUTTON_OK))
                ElmuShiftScreen(SCREEN_CLEAN_3);
            break;
    
        // Conclure le processus de nettoyage.
        
        case SCREEN_CLEAN_3:
            if (IS_PRESSED(BUTTON_OK))
                ElmuShiftScreen(SCREEN_MAIN);
            break;

        // Gestion de l'écran principal.
        
        default: // SCREEN_MAIN
            if (IS_PRESSED(BUTTON_OK))
                ElmuShiftScreen(SCREEN_VOLUME);
            else if (IS_PRESSED(BUTTON_EMPTY))
                ElmuShiftScreen(SCREEN_EMPTY);
            else if (IS_PRESSED(BUTTON_CLEAN))
                ElmuShiftScreen(SCREEN_CLEAN_1);
            break;
    }
    
    // Le bouton "annuler" entraîne un retour immédiat
    // à l'écran principal, quel que soit l'écran actuel.
    
    if (IS_PRESSED(BUTTON_CANCEL))
        ElmuShiftScreen(SCREEN_MAIN);
}
