#include <16F873A.h>
#include <stdlib.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP,PROTECT,NOCPD,
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,STREAM=COM_A,parity=N,bits=8) 	
#zero_ram

char *p;
char *p1;
char *p2;
char buffer_COM_A[40] = "";
short flag_rx1 = 0;

/* Estas son las cadenas válidas */
char on__cam1[9] = "ON__CAM1";
char off_cam1[9] = "OFF_CAM1";
char on__cam2[9] = "ON__CAM2";
char off_cam2[9] = "OFF_CAM2";
char on__cam3[9] = "ON__CAM3";
char off_cam3[9] = "OFF_CAM3";
char on__cam4[9] = "ON__CAM4";
char off_cam4[9] = "OFF_CAM4";

#INT_RDA
void usart_modem(void)
{  
	int32 timeout = 0;
	flag_rx1 = 0;
	p = buffer_COM_A;
	if (kbhit(COM_A))
	{
		//para 9600 timeout=4000, para 115200 timeout=3500  
		while (timeout<4000)
		{
			if (kbhit(COM_A))		
			{
				*p = fgetc(COM_A);
                p++;
				timeout = 0;
			}
			timeout++;
		}
		*p = NULL;
		flag_rx1=true;
	}
}

int validar(char *p1, char *p2)
{
	int *p3;
	p3 = strstr(p1,p2);
	return (p3);
}

/*		Programa principal		*/
void main(void)															
{
	set_tris_b(0b00000000);
	set_tris_c(0b01000000);
	enable_interrupts(INT_RDA);
	enable_interrupts(GLOBAL);

	while(1)
	{
		if(flag_rx1){
			flag_rx1 = 0;
			if(validar(buffer_COM_A, on__cam1)){
				output_bit(PIN_B5, 1);
			}
			if(validar(buffer_COM_A, off_cam1)){
				output_bit(PIN_B5, 0);
			}

			if(validar(buffer_COM_A, on__cam2)){
				output_bit(PIN_B4, 1);
			}
			if(validar(buffer_COM_A, off_cam2)){
				output_bit(PIN_B4, 0);
			}

			if(validar(buffer_COM_A, on__cam3)){
				output_bit(PIN_B1, 1);
			}
			if(validar(buffer_COM_A, off_cam3)){
				output_bit(PIN_B1, 0);
			}

			if(validar(buffer_COM_A, on__cam4)){
				output_bit(PIN_B2, 1);
			}
			if(validar(buffer_COM_A, off_cam4)){
				output_bit(PIN_B2, 0);
			}
		}
	}
}