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; }
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);} } } } }