#include <p24HJ128GP506.h>

#include "functions.h"


#define MAX_BUFFER_LENGTH 100
unsigned char globBuffer[MAX_BUFFER_LENGTH];

_FOSCSEL (FNOSC_FRC);  
_FOSC    (FCKSM_CSECMD & POSCMD_XT);  
_FWDT    (FWDTEN_OFF);	


void __attribute__((__interrupt__)) _U1TXInterrupt(void);
void __attribute__((__interrupt__)) _U1RXInterrupt(void);

void main()
{
  //PIC konfigurieren:
  oscConfig();
  ioConfig();
  init_uart1(9600);
  init_uart2(9600);
  
  delay_ms(2000);  
  PORTBbits.RB3 = 1;

  delay_ms(2000);  
  //PORTCbits.RC2 = 1;
  
  
  //RN171 konfiguieren
  if(PORTFbits.RF1 == 1)
  {
    init_rn171_server();
  }
  else
  {
    init_rn171_client();
  }

  while(1) //Endless Loop
  {
     if(PORTGbits.RG8 == 1)
    {
      PORTBbits.RB0 = 1;
    }
    else
    {
      PORTBbits.RB0 = 0;
    }

    PORTBbits.RB0 = 1;

  }
  return 0;
}


void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
 IFS0bits.U1TXIF = 0; // clear TX interrupt flag
}

void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{ 
// static unsigned char uart1_rx_buffer[MAX_BUFFER_LENGTH];
// static unsigned char count = 0;
// uart1_rx_buffer[count] = U1RXREG & 0x00FF;
 U2TXREG = U1RXREG & 0x00FF;
 /*
 if( uart1_rx_buffer[count] == '\r' || count == (MAX_BUFFER_LENGTH - 1) )
 {
   uart1_rx_buffer[count] = '\0';
   uart_send_usb(uart1_rx_buffer, 0);
   count = 0;
 }
 else
 {
   count++;
 }
 */
 IFS0bits.U1RXIF = 0; // clear RX interrupt flag
}

void __attribute__((__interrupt__)) _U2TXInterrupt(void)
{
 IFS1bits.U2TXIF = 0; // clear TX interrupt flag
}

void __attribute__((__interrupt__)) _U2RXInterrupt(void)
{

 static unsigned char uart2_rx_buffer[MAX_BUFFER_LENGTH];
 static unsigned char count = 0;
 uart2_rx_buffer[count] = U2RXREG & 0x00FF;

 if( uart2_rx_buffer[count] == '\r' || count == (MAX_BUFFER_LENGTH - 2) )
 {
   uart2_rx_buffer[count+1] = '\0';
   uart_send_usb(uart2_rx_buffer,0);
   uart_send_rn171(uart2_rx_buffer, 0);
   //strcpy(buffer, uart2_rx_buffer);
   count = 0;
 }
 else
 {
   count++;
 }
 
 IFS1bits.U2RXIF = 0; // clear RX interrupt flag
}