#include "main.h"

unsigned int position;
unsigned int32 section[4];
unsigned int32 time;   // pocitadlo preteceni casovace
unsigned int state;

#define RUNNING  1
#define STOPPED 0

#int_RB
void  RB_isr(void) 
{
  section[position]= get_timer0(); 
  time=0;
  set_timer0(0);
  if(position < 3) position++;
  else {
    disable_interrupts(INT_RB);
    state = STOPPED;
  }
    
  time=0;
  set_timer0(0);

}

#int_RTCC
void  RTCC_isr(void)    // preruseni od pretekleho casovace 
{
  time++;
}

#define LCD_ENABLE_PIN  PIN_E0
#define LCD_RS_PIN      PIN_E1
#define LCD_RW_PIN      PIN_E2
#define LCD_DATA4       PIN_D4
#define LCD_DATA5       PIN_D5
#define LCD_DATA6       PIN_D6
#define LCD_DATA7       PIN_D7

#include <lcd.c>

#define BUTTON1    PIN_D0
#define BUTTON2    PIN_D1
#define BUTTON3    PIN_D2
#define BUTTON4   PIN_D3

#define BEEPER    PIN_C0

unsigned int32 run;

// Includes all USB code and interrupts, as well as the CDC API
#include <usb_cdc.h>

void beep(int16 period)
{
  while(period){
    output_toggle(BEEPER);
    delay_us(800);
    period--;
  }  
}

void test_mode()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"TEST MODE");
}

void main() {

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   port_b_pullups(TRUE);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(GLOBAL);

   lcd_init();
   usb_init();

   lcd_gotoxy(1,1);
   printf(lcd_putc,"STOPWATCH01A");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"    Kaklik 2010 ");
   delay_ms(1000);
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\n Waiting for PC... ");

   while(!usb_cdc_connected());
   lcd_gotoxy(1,1);
   printf(lcd_putc,"PC connected...");
   beep(10);
   
   if(!input(BUTTON1)) test_mode();
   run=0;
   
   section[0]=0;
   section[1]=0;
   section[2]=0;
   section[3]=0;
   
   
   while (TRUE)
   {
     run++;
     lcd_gotoxy(3,1);
     printf(lcd_putc,"START");

     while(input(BUTTON2));
       time = 0;
       set_timer0(0);
       position = 0;
       state = RUNNING;
       clear_interrupt(int_timer0);
       clear_interrupt(int_RB);
       enable_interrupts(INT_RTCC);
       enable_interrupts(INT_RB);
       
       lcd_gotoxy(6,1);
       printf(lcd_putc,"STOP");
       while(state==RUNNING);


     printf(usb_cdc_putc, "\n\r %ld %ld %ld %ld %ld", run, section[0], section[1], section[2], section[3]);
   }
}