Repositório para códigos do painel da plataforma SATC
Dependencies: MFRC522 mbed-STM32F103C8T6 mbed
Fork of C_005_EA_Painel_sem_bms by
leitor_rfid.cpp
00001 #include <leitor_rfid.h> 00002 /* 00003 Inicializacao do leitor de cartoes 00004 */ 00005 uint8_t CardReader::init(CardReaderMode mode){ 00006 rf_chip.PCD_Reset(); 00007 //Configuracoes copiadas da biblioteca utilizada no arduino 00008 // Reseta baud rates 00009 rf_chip.PCD_WriteRegister(rf_chip.TxModeReg, 0x00); 00010 rf_chip.PCD_WriteRegister(rf_chip.RxModeReg, 0x00); 00011 // Reseta ModWidthReg 00012 rf_chip.PCD_WriteRegister(rf_chip.ModWidthReg, 0x26); 00013 // Prossegue com a inicializacao padrao 00014 rf_chip.PCD_Init(); 00015 wait_ms(10); 00016 // Seleciona o modo de operacao: Polling ou interrupcao 00017 int comIEnRegValue; 00018 switch (mode){ 00019 case CRMODE_Interrupt: 00020 comIEnRegValue = comIEnRegInterruptValue; 00021 break; 00022 case CRMODE_Polling: 00023 comIEnRegValue = comIEnRegPollingValue; 00024 break; 00025 default: 00026 comIEnRegValue = comIEnRegPollingValue; 00027 break; 00028 } 00029 rf_chip.PCD_WriteRegister(rf_chip.ComIEnReg, comIEnRegValue); 00030 // Sucesso de inicializacao se da pelo sucesso de leitura de um registrador 00031 return comIEnRegValue == rf_chip.PCD_ReadRegister(rf_chip.ComIEnReg); 00032 } 00033 00034 /* Funcao necessaria para funcionamento via interrupcao 00035 Deve ser chamada logo apos processar uma interrupcao, 00036 para que o mfrc522 volte o pino de interrupcao para seu valor de repouso (alto) 00037 */ 00038 void CardReader::clearInterrupts(){ 00039 rf_chip.PCD_WriteRegister(rf_chip.ComIrqReg, comIrqRegValue); 00040 rf_chip.PICC_HaltA(); 00041 } 00042 /* Funcao necessaria para funcionamento via interrupcao 00043 Deve ser chamada periodicamente 00044 para que o mfrc522 reative o circuito da antena 00045 00046 */ 00047 void CardReader::enableAntenna(){ 00048 rf_chip.PCD_WriteRegister(rf_chip.FIFODataReg, rf_chip.PICC_CMD_REQA); 00049 rf_chip.PCD_WriteRegister(rf_chip.CommandReg, rf_chip.PCD_Transceive); 00050 rf_chip.PCD_WriteRegister(rf_chip.BitFramingReg, 0x87); 00051 } 00052 00053 /* 00054 Avalia se cartao escolhido esta entre os autorizados para uso com o veiculo 00055 */ 00056 int CardReader::cardIsValid(){ 00057 bool card_is_valid = true; 00058 // Coleta uid do cartao 00059 uint8_t* card_id = rf_chip.uid.uidByte; 00060 uint8_t id_database_list_size = sizeof(id_database_list)/sizeof(id_database_list[0]); 00061 //itera sobre cada um dos cartoes autorizados e os compara com o cartao lido 00062 for(uint8_t i = 0; i < id_database_list_size ; i++){ 00063 card_is_valid = true; 00064 for(uint8_t j = 0; j < ID_SIZE; j++){ 00065 card_is_valid = card_is_valid && (card_id[j] == id_database_list[i][j]); 00066 } 00067 if(card_is_valid){ 00068 //copia id do cartao para atributo 'last_valid_card' do objeto 00069 std::copy(rf_chip.uid.uidByte,rf_chip.uid.uidByte+ID_SIZE,last_valid_card); 00070 break; 00071 } 00072 } 00073 return card_is_valid; 00074 } 00075 00076 00077 /* 00078 Tenta ler o cartao, retorna 'true' em caso de sucesso 00079 */ 00080 int CardReader::readCard(){ 00081 return rf_chip.PICC_IsNewCardPresent() && rf_chip.PICC_ReadCardSerial(); 00082 }
Generated on Wed Jul 13 2022 23:43:00 by
1.7.2
