/*
 * GccApplication1.c
 *
 * Created: 10.07.2018 19:39:28
 * Author : dozed
 */ 

#define button1 1234
#define button2 5678
#define button3 whatever

typedef enum {CLOCK_INIT = 0, CLOCK_IDLE, CLOCK_ALARM, CLOCK_STOPWATCH_RUNNING, CLOCK_STOPWATCH_STOPPED, CLOCK_STOPWATCH_NOT_SET, CLOCK_USER_INPUT, CLOCK_SET_TIME} clock_state_e;

clock_state_e clock_old_state = NULL;
clock_state_e clock_state = CLOCK_INIT;
clock_state_e clock_new_state = CLOCK_INIT;

int counter = 0; //the counter variable that is being set by the interrupt
//variables for the alarm
bool alarm_active = false;
bool alarm_triggered = false;
int alarm_time = 0;

//variables for the stopwatch
bool stopwatch_running = false;
bool stopwatch_set = false
int stopwatch_started = 0;
int stopwatch_stopped = 0;

//other variables
int user_input = 0; //variable to store user input
int current_time = 0;
int main(void)
{
  //-----------INIT----------------
  //SETUP PINS (needs to be done)

  //attach interrupt (needs to be done)

  //-----------END INIT------------
  while (1) 
  {
    timer_state = timer_new_state;

    switch(clock_state){
      case CLOCK_INIT:
        //do some init stuff...
        lcd.init(); //I know, it's just c but I don't care

        //INIT done -> change to IDLE
        clock_new_state = CLOCK_IDLE;

        break;

      case CLOCK_IDLE:
        //IDLE MODE

        //print the IDLE Screen
        lcd.goto(0,0);
        lcd.print(counter /*do some  claculations*/);
        lcd.goto(0,1);
        lcd.print("<  current time  >");

        //check buttons
        if(button_pressed(1)){
          timer_new_state = CLOCK_ALARM;
        }
        else if(button_pressed(2){
          //do something
        }
        else if(button_pressed(3)){
          //do something
        }

      case CLOCK_ALARM:
        //CLOCK ALARM
        //check if the alarm time was set
        if(user_input == 0){
          alarm_time = user_input;
          user_input = 0;
        }
        if(alarm_active){
          lcd.goto(0,0);
          lcd.print(current_time);
          lcd.goto(0,1);
          lcd.print("alarm >");
          
        }
    }
    //do some other stuff (like checking if an alarm has been triggered) 

  }
}

bool button_pressed(int button_number)
{
  bool button_state = /*check the state of the button here*/;
  return(button_state);
}

