/*---------------------------------------------------------------------------
| Filename: timer.c
|
| Klaus Schmitt
|
| Description: 
| Timer-IRQ test
| ------------------------------------------------------------------------- */

#include "eyebot.h"

/* TimerFnc */
int count[3];

void counter1(void)
{
    count[0]++;
}
void counter2(void)
{
    count[1] += 2;
}
void counter3(void)
{
    count[2] += 3;
}


int main()
{
  TimerHandle handle[3];
  int  assigned[3];
  int  i;
  char k;

  /** set display mode */
  for(i=0;i<3;i++)
  {
    count[i]=0;
    assigned[i]=1;
  }
  LCDMode(NONSCROLLING|NOCURSOR);
  LCDMenu("Ir1","Ir2","Ir3","END");

  LCDPrintf("---Timer IRQs---\n");

  handle[0] = OSAttachTimer(1, counter1);
  handle[1] = OSAttachTimer(2, counter2);
  handle[2] = OSAttachTimer(3, counter3);

  while(KEY4 != (k=KEYRead())) 
  {
    LCDSetPos(2,0);
    for(i=0;i<3;i++)
        LCDPrintf("Counter%d: %d\n",i+1,count[i]);  
    switch (k) {
      case KEY1: 
            if(assigned[0])
            {
              OSDetachTimer(handle[0]);
              assigned[0] = 0;
            }
            else
            {
              handle[0] = OSAttachTimer(1, counter1);
              assigned[0] = 1;
            }
            break;
      case KEY2:
            if(assigned[1])
            {
              OSDetachTimer(handle[1]);
              assigned[1] = 0;
            }
            else
            {
              handle[1] = OSAttachTimer(2, counter2);
              assigned[1] = 1;
            }
            break;
      case KEY3:
            if(assigned[2])
            {
              OSDetachTimer(handle[2]);
              assigned[2] = 0;
            }
            else
            {
              handle[2] = OSAttachTimer(3, counter3);
              assigned[2] = 1;
            }
            break;
    }
  }

  for(i=0;i<3;i++)
  {
      if(assigned[i])
      {
        OSDetachTimer(handle[i]);
      }
  }
  return 0;
}


