/*=============================================
@   Created by: Topor Zoltan in 2006.
@   http://www.hobbielektronika.hu/
@   
@   Wireless Data Transfer Demo
===============================================*/
#include <18F4620.h>

#fuses HS,NOWDT,NOPUT,NOPROTECT,NOLVP,BROWNOUT,NOCPD,NOWRT

#use delay(clock=20000000)
//#use rs232(baud=1200,xmit=PIN_B2,rcv=PIN_B3,stream=radio,ERROR,INVERT)

#define HAS_LCD;

#ifdef HAS_LCD
	#define WireTX PIN_C0
	#define WireRX PIN_C1
#endif
#ifndef HAS_LCD
	#use fixed_io(e_outputs=PIN_E0, PIN_E1)
	#define redled_on output_bit(pin_E0,1);
	#define redled_off output_bit(pin_E0,0);
	#define greenled_on output_bit(pin_E1,1);
	#define greenled_off output_bit(pin_E1,0);
	#define WireTX PIN_B0
	#define WireRX PIN_B1
#endif
#use rs232(baud=1200,xmit=WireTX,rcv=WireRX,stream=radio,INVERT)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,stream=console)

char v_string[50];
char rv;
int ln;
int lv;

#include <m_manchester.c>
//#include <LCD.c>
#include <lcd420.c>


//================================================================
void init() {
//================================================================
int i;
int j;

#ifdef HAS_LCD
 set_tris_c(0b10000010);
 set_tris_b(0b00000000);
#endif
#ifndef HAS_LCD
	greenled_off;
	for(j=1; j<=10; ++j) {
		redled_on;
		delay_ms(250);
		redled_off;
		delay_ms(250);
	}
 set_tris_c(0b10000000);
 set_tris_b(0b00000010);
 port_b_pullups(FALSE);	//RB port felhúzóellenállások deaktiválása
#endif
// set_tris_c(0b10000000);
// set_tris_b(0b00001000);

 #ifdef HAS_LCD
 lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc("\fRadio Link Test"));
 #endif
}

//--------RF egység PWRDN (energiatakarékos) mód--------
void pwrdn_mode(void)	{
 #ifdef HAS_LCD
	output_bit(pin_C5,0);
 #endif
 #ifndef HAS_LCD
	output_bit(pin_B3,0);
 #endif
} 

//--------RF egység PWRDN->TX (energiatakarékosból adásba) mód--------
void pwrdn2tx_mode(void)	{
 #ifdef HAS_LCD
	output_bit(pin_C0,0);
	output_bit(pin_C5,1);
	delay_us(20);
	output_bit(pin_C2,1);
	delay_us(400);
 #endif
 #ifndef HAS_LCD
 	output_bit(pin_B0,0);
	output_bit(pin_B3,1);
	delay_us(20);
	output_bit(pin_B2,1);
	delay_us(400);
 #endif
} 

//--------RF egység PWRDN->RX (energiatakarékosból vételre) mód--------
void pwrdn2rx_mode(void)	{
 #ifdef HAS_LCD
	output_bit(pin_C5,1);
	delay_us(20);
	output_bit(pin_C2,1);
	delay_us(200);
	output_bit(pin_C2,0);
	delay_us(40);
	output_bit(pin_C5,0);
	delay_us(20);
	output_bit(pin_C5,1);
	delay_us(200);
// 	output_bit(pin_C1,0);
#endif
 #ifndef HAS_LCD
	output_bit(pin_B3,1);
	delay_us(20);
	output_bit(pin_B2,1);
	delay_us(200);
	output_bit(pin_B2,0);
	delay_us(40);
	output_bit(pin_B3,0);
	delay_us(20);
	output_bit(pin_B3,1);
	delay_us(200);
//	output_bit(pin_B1,0);
 #endif
} 

//--------RF egység TX->RX (adásról vételre) mód--------
void tx2rx_mode(void)	{
 #ifdef HAS_LCD
	output_bit(pin_C2,0);
	delay_us(40);
	output_bit(pin_C5,0);
	delay_us(20);
	output_bit(pin_C5,1);
	delay_us(200);
// 	output_bit(pin_C1,0);
 #endif
 #ifndef HAS_LCD
	output_bit(pin_B2,0);
	delay_us(40);
	output_bit(pin_B3,0);
	delay_us(20);
	output_bit(pin_B3,1);
	delay_us(200);
// 	output_bit(pin_B1,0);
 #endif
} 

//--------RF egység RX->TX (vételről adásra) mód--------
void rx2tx_mode(void)	{
 #ifdef HAS_LCD
 	output_bit(pin_C0,0);
	output_bit(pin_C2,1);
	delay_us(400);
 #endif
 #ifndef HAS_LCD
  	output_bit(pin_B0,0);
	output_bit(pin_B2,1);
	delay_us(400);
#endif
} 



//================================================================
void main(){
//================================================================
int i;
 init();

pwrdn_mode();
delay_ms(500);

#ifndef HAS_LCD
	pwrdn2tx_mode();
#endif
#ifdef HAS_LCD
	pwrdn2rx_mode();
//	tx2rx_mode();
#endif
delay_ms(500);


 for(;;) {
	delay_ms(1);
    #ifndef HAS_LCD
	redled_on;
	delay_ms(500);
	redled_off;
	m_send("U");
//	ln="M";
//	putc(ln,radio);
//	fprintf(radio,"MIHITECH");
	delay_ms(1000);
//	redled_on;
//	delay_ms(500);
//	redled_off;
// 	m_send("\f----");
//	puts("--\r",radio);
//	delay_ms(1500);
   #endif

    #ifdef HAS_LCD
    if(kbhit(radio)) {
//		printf(lcd_putc("\f itt vagyok1"));
//		lv=fgetc(radio);
//		rv=timed_getc();
//		fgets(v_string,radio);
//		strcpy(v_string,ptr);
//		printf(lcd_putc("\n itt vagyok2"));
//		printf(lcd_putc("\n %s"),lv);
//		printf(lcd_putc("\n %s"),v_string);
      i = m_get();
// 	 lcd_putc(lv);
// 	 lcd_putc(rv);
// 	 lcd_putc(v_string);
//     if (!receive_error){
		lcd_putc(i);
//	 }
	}
    #endif
 }
}
