#include "main.h"

#case

#define S105A  PIN_A0
#define R105AU PIN_A1
#define R105AD PIN_A2
#define S104A  PIN_A3
#define R104AU PIN_A4
#define R104AD PIN_A5
#define R104BU PIN_A6
#define R104BD PIN_A7

#define S103A  PIN_B0
#define R103AU PIN_B1
#define R103AD PIN_B2
#define S106A  PIN_B3
#define S107A  PIN_B4
#define S109A  PIN_B5

//#define OS101 PIN_C0 
//#define OS105B PIN_C1  
//#define OS105C PIN_C2 
//#define PIN_C3  31763
//#define PIN_C4  31764
//#define PIN_C5  31765

//#define PIN_C6  31766 //TX
//#define PIN_C7  31767 //RX

#define S101A PIN_D0
#define S105D PIN_D1  
#define S102A PIN_D2
#define S110C PIN_D3
#define S108A PIN_D4
#define S201A PIN_D5
#define S110B PIN_D6

/*
#define PIN_E0  31776
#define PIN_E1  31777
#define PIN_E2  31778
#define PIN_E3  31779
#define PIN_E4  31780
#define PIN_E5  31781
#define PIN_E6  31782
#define PIN_E7  31783

#define PIN_F0  31784
#define PIN_F1  31785
#define PIN_F2  31786
#define PIN_F3  31787
#define PIN_F4  31788
#define PIN_F5  31789
#define PIN_F6  31790
#define PIN_F7  31791

#define PIN_G0  31792
#define PIN_G1  31793
#define PIN_G2  31794
#define PIN_G3  31795
#define PIN_G4  31796
#define PIN_G5  31797

#define PIN_H0  31800
#define PIN_H1  31801
#define PIN_H2  31802
#define PIN_H3  31803
#define PIN_H4  31804
#define PIN_H5  31805
#define PIN_H6  31806
#define PIN_H7  31807

#define PIN_J0  31808
#define PIN_J1  31809
#define PIN_J2  31810
#define PIN_J3  31811
#define PIN_J4  31812
#define PIN_J5  31813
#define PIN_J6  31814
#define PIN_J7  31815
*/

#define LED1 PIN_J7  
#define LED2 PIN_J6 

#define ON(port)  output_low(port);
#define OFF(port) output_high(port);

typedef enum {UP, DOWN, NOTHING} request;

void main()
{
   char c;
   
   if(restart_cause()!= WDT_TIMEOUT)
   {
      setup_adc_ports(NO_ANALOGS|VSS_VDD);
      setup_adc(ADC_CLOCK_DIV_2);
      setup_psp(PSP_DISABLED);
      setup_spi(SPI_SS_DISABLED);
      setup_wdt(WDT_ON);
      setup_timer_0(RTCC_INTERNAL);
      setup_timer_1(T1_DISABLED);
      setup_timer_2(T2_DISABLED,0,1);
      setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
      setup_ccp1(CCP_OFF);
      setup_comparator(NC_NC_NC_NC);
      setup_vref(FALSE);
   
      OFF(S105A);
      OFF(R105AU);
      OFF(R105AD);
      OFF(S104A);
      OFF(R104AU);
      OFF(R104AD);
      OFF(R104BU);
      OFF(R104BD);
      OFF(S103A);
      OFF(R103AU);
      OFF(R103AD);
      OFF(S106A);
      OFF(S107A);
      OFF(S109A);
      OFF(S101A);
      OFF(S105D);  
      OFF(S102A);
      OFF(S110C);
      OFF(S108A);
      OFF(S201A);
      OFF(S110B);
   }
   
   while(TRUE)
   {
      if(kbhit())
      {
         c=getc();
         if(c=='S')
         {
            getc();
            switch(getc())
            {
               case '1':
                  output_toggle(S101A);
                  break;
               case '2':
                  output_toggle(S102A);
                  break;
               case '3':
                  output_toggle(S103A);
                  break;
               case '4':
                  output_toggle(S104A);
                  break;
               case '5':
                  c=getc();
                  if(c=='A') {output_toggle(S105A);}
                  if(c=='D') {output_toggle(S105D);}
                  break;
               case '6':
                  output_toggle(S106A);
                  break;
               case '7':
                  output_toggle(S107A);
                  break;
               case '8':
                  output_toggle(S108A);
                  break;
               case '9':
                  output_toggle(S109A);
                  break;
               case 'a':
                  output_toggle(S110B);
                  output_toggle(S110C);
                  break;
            }
         }
         
         if(c=='R')
         {
            getc();
            switch(getc())
            {
               case '3':
                  getc();
                  c=getc();
                  if((c=='U')) {};
                  break;
               case '4':
                  c=getc();
                  if(c=='A') {}; 
                  if(c=='B') {};
                  break;
               case '5':
                  getc();
                  getc();
                  break;
            }
         }
         output_toggle(LED1);
      }
      else
      {
         restart_wdt();
      }
   }
}