////////////////////////////////////////////////////////////////////////////////
//                        Laipac RF-24G / TXRX24G
//              2.4GHz Wireless Accelerometer Transmitter
//
// Filename     : 18LF2550 RF-24G Accelerometer Transmitter.c
// Programmer   : Steven Cholewiak, www.semifluid.com
// Version      : Version 1.0 - 02/27/2006
// Remarks      : Datasheets for RF-24G / TXRX24G are available from:
//                http://www.sparkfun.com/datasheets/RF/RF-24G_datasheet.pdf
//                http://www.sparkfun.com/datasheets/RF/RF-24G.pdf
//                http://www.sparkfun.com/datasheets/RF/nRF2401rev1_1.pdf
//                http://store.qkits.com/moreinfo.cfm/txrx24g.pdf
//
//                More information on the circuit can be found at:
//                http://semifluid.com/PIC18LF2550_wireless_3axis.html
////////////////////////////////////////////////////////////////////////////////

#include <18F2550.h>
#device ADC=10
#use delay(clock=10000000)

#build(reset=0x1, interrupt=0x8)          // Necessary for Bootloader
#ORG 0x0F00,0x0FFF {}                     // Necessary for Bootloader

#use rs232(stream=PC, baud=57600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

#include <RF-24G_6-byte.c>
#define servoA PIN_B0
#define servoB PIN_B1
int8 servoAduty = 127;
int8 servoBduty = 127;
#define LED PIN_C2

#INT_RDA
void serial_isr()                         // Serial Interrupt
{
   int8 uReceive;

   uReceive = fgetc(PC);

   switch (uReceive) {
      case 0x12: {
            if (fgetc(PC) == 0x34 & fgetc(PC) == 0x56 & fgetc(PC) == 0x78 & fgetc(PC) == 0x90) #asm reset #endasm
         }
         break;
   }
}

void main() {
   int16 tempADC;

   SETUP_ADC_PORTS(AN0_to_AN2);
   SETUP_ADC(ADC_CLOCK_DIV_64);
   SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_1);
   SETUP_TIMER_1(T1_DISABLED);
   SETUP_TIMER_2(T2_DISABLED, 127, 1);
   SETUP_TIMER_3(T3_DISABLED);
   SETUP_CCP1(CCP_OFF);
   SETUP_CCP2(CCP_OFF);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   printf("Initializing Port B...\n\r");
   RF_24G_initPorts();
   printf("Configuring RF-24G...\n\r");
   RF_24G_Config();
   buf[0] = 127;
   buf[1] = 127;
   buf[2] = 127;
   buf[3] = 127;
   printf("OK!\n\r");

   RF_24G_SetTx();
   delay_ms(1);

   while(1) {
      set_adc_channel(0);
      delay_us(20);
      tempADC = READ_ADC();
      buf[0] = make8(tempADC,1);
      buf[1] = make8(tempADC,0);

      set_adc_channel(1);
      delay_us(20);
      tempADC = READ_ADC();
      buf[2] = make8(tempADC,1);
      buf[3] = make8(tempADC,0);

      set_adc_channel(2);
      delay_us(20);
      tempADC = READ_ADC();
      buf[4] = make8(tempADC,1);
      buf[5] = make8(tempADC,0);

      putBuffer();

      output_toggle(LED);

      delay_ms(50);
   }
}
