Example #1
0
int do_thing(void *data) {
    //char *portdev = "/dev/cu.usbserial";
    //char *portdev = "/dev/ttyO1";
    
    int serial_fd;

    serial_t *serial = (serial_t *)data;
    char *port_dev = serial->port_dev;
    struct termios options;

    int nbytes;
    char buffer[10];

    ANSI_CHECK(__FILE__, open_serial(port_dev, &serial_fd));
    config_serial(&options, serial_fd);

    serial->fQuit = 0;
    while(!serial->fQuit) {
        nbytes = read(serial_fd, buffer, sizeof(buffer));
        if(nbytes > 0) {
            buffer[nbytes] = '\0';
            serial->on_serial_data_received(serial, buffer, nbytes);
        }
        serial->process_command(serial, serial_fd);
    }

    close(serial_fd);
    return 0;
}
Example #2
0
void main(void)
{
	//CONFIGURAÇÃO DO CLOCK
	OSCCON=0b01110001;
	
	//CONFIGURAÇÃO DAS PORTAS
	ANSEL=0;
	ANSELH=0;
	TRISA=0b00011111;
	TRISB=0b01110000;
	TRISC=0;
	PORTC=0;

	//CONFIGURAÇÃO DAS INTERRUPÇÕES
	INTCON=0b11001000;//GIE=1;PEIE=1;RABIE=1;
	OPTION_REG=0b00000011;
	T1CON=0b00001111;
	TMR1=32768;
	PIE1=1;
	WPUA0=1;
	
	config_serial();

	data_atual.dia_da_semana=0;
	data_atual.dia=0;
	data_atual.mes=0;
	data_atual.ano=0;
	data_atual.hora=0;
	data_atual.minuto=0;
	data_atual.segundo=0;

	verificar_num_contas();
	carregar_senha();
	TXREG= INICIALIZAR;
	while(!TRMT){}
//	leitura_eeprom_externa(endereco_final_eeprom);
//	escrita_eeprom_externa(endereco_final_eeprom);

	while(1){

		if(enviar==1){//O que será enviado pela serial dependerá da etapa em que o envio foi solicitado pelo programa.
					  //Se for na etapa final, por exemplo, significa que é necessário enviar de volta se o acesso foi bem sucedido ou não.
			enviar=0;
			
			TXREG = '\n';
			while(!TRMT){}
			TXREG = INICIO;
			while(!TRMT){}

						if(FLAGS_1<4){
										etapa = etapa_inicial;
										TXREG = 'O';
										while(!TRMT){}
										TXREG = 'K';
										while(!TRMT){}

												if(funcao == REQUERIMENTO_STATUS_ATUAL){
														numero_para_ascii(data_atual.ano);
														numero_para_ascii(data_atual.mes);
														numero_para_ascii(data_atual.hora);
														numero_para_ascii(data_atual.minuto);
														numero_para_ascii(data_atual.segundo);
														numero_para_ascii(qtd_total_contas);
														numero_para_ascii(QTD_MAX_CONTAS);
														numero_para_ascii(SENSOR_ABERTURA_FECHADURA);}


												else if(funcao == MUDAR_SENHA){
													char i=0;	
														do{
															senha[i] = nova_senha[i];
															eeprom_write(((conta*16) + i),senha[i]);
															while(WR){}
															i++;} while(nova_senha[i-1]  && i<TAMANHO_SENHA);
														}
							
												else if(funcao == ABERTURA_PORTA){
														while(SENSOR_ABERTURA_FECHADURA == 0){
															cont++; //quantidade de vezes que se tentou destravar a fechadura
															FECHADURA=1;
															__delay_ms(325);
															FECHADURA=0;
																if(SENSOR_ABERTURA_FECHADURA == 0) __delay_ms(100);
															}
												}

										}
						
						else{
			
						etapa = etapa_inicial;
							if(testar_bit(FLAGS_1,ERRO_PROTOCOLO)){ 
												TXREG = 'E';
												while(!TRMT){} 
												TXREG = 'P';
												while(!TRMT){}
													if(funcao == MUDAR_SENHA){
																TXREG = 'S'; //indica que a nova senha tem menos que 6 caracteres;
																while(!TRMT){} 
														} 
												
												resetar_bit(FLAGS_1,ERRO_PROTOCOLO);}

							if(testar_bit(FLAGS_1,ERRO_COMUNICACAO)){
											
											TXREG = 'E';
											while(!TRMT){}
											TXREG = 'C'; 
											while(!TRMT){} 
											resetar_bit(FLAGS_1,ERRO_COMUNICACAO);}
						
				
							if(testar_bit(FLAGS_1,ERRO_SENHA)){
											TXREG = 'E';
											while(!TRMT){}
											TXREG = 'S'; 
											while(!TRMT){} 
											resetar_bit(FLAGS_1,ERRO_SENHA);}
				
							if(testar_bit(FLAGS_1,ERRO_IDENTIF_CONTA)){ 
											TXREG = 'E';
											while(!TRMT){}
											TXREG = 'I'; 
											while(!TRMT){} 
											resetar_bit(FLAGS_1,ERRO_IDENTIF_CONTA);}
								}
															


				TXREG=FIM;
				while(!TRMT){}}
				
			

			else if(RCIE==0){
							if(etapa == etapa_recebe_funcao){
									carregar_senha();

										if(testar_bit(nivel_acesso,(funcao - '0'))){
											TXREG = CONTINUAR;
											while(!TRMT){}
											setar_bit(FLAGS_1,TRANSICAO_ETAPA);}

										else{
											setar_bit(FLAGS_1,ERRO_NIVEL_DE_ACESSO);}
										

							}
					}

			
		
}		
}