Repositório para códigos do painel da plataforma SATC

Dependencies:   MFRC522 mbed-STM32F103C8T6 mbed

Fork of C_005_EA_Painel_sem_bms by Engenharia Mobilis

Committer:
MobilisEletrica
Date:
Mon Sep 24 18:30:52 2018 +0000
Revision:
2:4c12e1ed1367
Parent:
1:25c826c035bd
[SATC] C?digo do painel de controle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MobilisEletrica 1:25c826c035bd 1 #include <leitor_rfid.h>
MobilisEletrica 1:25c826c035bd 2 /*
MobilisEletrica 1:25c826c035bd 3 Inicializacao do leitor de cartoes
MobilisEletrica 1:25c826c035bd 4 */
MobilisEletrica 1:25c826c035bd 5 uint8_t CardReader::init(CardReaderMode mode){
MobilisEletrica 1:25c826c035bd 6 rf_chip.PCD_Reset();
MobilisEletrica 1:25c826c035bd 7 //Configuracoes copiadas da biblioteca utilizada no arduino
MobilisEletrica 1:25c826c035bd 8 // Reseta baud rates
MobilisEletrica 1:25c826c035bd 9 rf_chip.PCD_WriteRegister(rf_chip.TxModeReg, 0x00);
MobilisEletrica 1:25c826c035bd 10 rf_chip.PCD_WriteRegister(rf_chip.RxModeReg, 0x00);
MobilisEletrica 1:25c826c035bd 11 // Reseta ModWidthReg
MobilisEletrica 1:25c826c035bd 12 rf_chip.PCD_WriteRegister(rf_chip.ModWidthReg, 0x26);
MobilisEletrica 1:25c826c035bd 13 // Prossegue com a inicializacao padrao
MobilisEletrica 1:25c826c035bd 14 rf_chip.PCD_Init();
MobilisEletrica 1:25c826c035bd 15 wait_ms(10);
MobilisEletrica 1:25c826c035bd 16 // Seleciona o modo de operacao: Polling ou interrupcao
MobilisEletrica 1:25c826c035bd 17 int comIEnRegValue;
MobilisEletrica 1:25c826c035bd 18 switch (mode){
MobilisEletrica 1:25c826c035bd 19 case CRMODE_Interrupt:
MobilisEletrica 1:25c826c035bd 20 comIEnRegValue = comIEnRegInterruptValue;
MobilisEletrica 1:25c826c035bd 21 break;
MobilisEletrica 1:25c826c035bd 22 case CRMODE_Polling:
MobilisEletrica 1:25c826c035bd 23 comIEnRegValue = comIEnRegPollingValue;
MobilisEletrica 1:25c826c035bd 24 break;
MobilisEletrica 1:25c826c035bd 25 default:
MobilisEletrica 1:25c826c035bd 26 comIEnRegValue = comIEnRegPollingValue;
MobilisEletrica 1:25c826c035bd 27 break;
MobilisEletrica 1:25c826c035bd 28 }
MobilisEletrica 1:25c826c035bd 29 rf_chip.PCD_WriteRegister(rf_chip.ComIEnReg, comIEnRegValue);
MobilisEletrica 1:25c826c035bd 30 // Sucesso de inicializacao se da pelo sucesso de leitura de um registrador
MobilisEletrica 1:25c826c035bd 31 return comIEnRegValue == rf_chip.PCD_ReadRegister(rf_chip.ComIEnReg);
MobilisEletrica 1:25c826c035bd 32 }
MobilisEletrica 1:25c826c035bd 33
MobilisEletrica 1:25c826c035bd 34 /* Funcao necessaria para funcionamento via interrupcao
MobilisEletrica 1:25c826c035bd 35 Deve ser chamada logo apos processar uma interrupcao,
MobilisEletrica 1:25c826c035bd 36 para que o mfrc522 volte o pino de interrupcao para seu valor de repouso (alto)
MobilisEletrica 1:25c826c035bd 37 */
MobilisEletrica 1:25c826c035bd 38 void CardReader::clearInterrupts(){
MobilisEletrica 1:25c826c035bd 39 rf_chip.PCD_WriteRegister(rf_chip.ComIrqReg, comIrqRegValue);
MobilisEletrica 1:25c826c035bd 40 rf_chip.PICC_HaltA();
MobilisEletrica 1:25c826c035bd 41 }
MobilisEletrica 1:25c826c035bd 42 /* Funcao necessaria para funcionamento via interrupcao
MobilisEletrica 1:25c826c035bd 43 Deve ser chamada periodicamente
MobilisEletrica 1:25c826c035bd 44 para que o mfrc522 reative o circuito da antena
MobilisEletrica 1:25c826c035bd 45
MobilisEletrica 1:25c826c035bd 46 */
MobilisEletrica 1:25c826c035bd 47 void CardReader::enableAntenna(){
MobilisEletrica 1:25c826c035bd 48 rf_chip.PCD_WriteRegister(rf_chip.FIFODataReg, rf_chip.PICC_CMD_REQA);
MobilisEletrica 1:25c826c035bd 49 rf_chip.PCD_WriteRegister(rf_chip.CommandReg, rf_chip.PCD_Transceive);
MobilisEletrica 1:25c826c035bd 50 rf_chip.PCD_WriteRegister(rf_chip.BitFramingReg, 0x87);
MobilisEletrica 1:25c826c035bd 51 }
MobilisEletrica 1:25c826c035bd 52
MobilisEletrica 1:25c826c035bd 53 /*
MobilisEletrica 1:25c826c035bd 54 Avalia se cartao escolhido esta entre os autorizados para uso com o veiculo
MobilisEletrica 1:25c826c035bd 55 */
MobilisEletrica 1:25c826c035bd 56 int CardReader::cardIsValid(){
MobilisEletrica 1:25c826c035bd 57 bool card_is_valid = true;
MobilisEletrica 1:25c826c035bd 58 // Coleta uid do cartao
MobilisEletrica 1:25c826c035bd 59 uint8_t* card_id = rf_chip.uid.uidByte;
MobilisEletrica 1:25c826c035bd 60 uint8_t id_database_list_size = sizeof(id_database_list)/sizeof(id_database_list[0]);
MobilisEletrica 1:25c826c035bd 61 //itera sobre cada um dos cartoes autorizados e os compara com o cartao lido
MobilisEletrica 1:25c826c035bd 62 for(uint8_t i = 0; i < id_database_list_size ; i++){
MobilisEletrica 1:25c826c035bd 63 card_is_valid = true;
MobilisEletrica 1:25c826c035bd 64 for(uint8_t j = 0; j < ID_SIZE; j++){
MobilisEletrica 1:25c826c035bd 65 card_is_valid = card_is_valid && (card_id[j] == id_database_list[i][j]);
MobilisEletrica 1:25c826c035bd 66 }
MobilisEletrica 1:25c826c035bd 67 if(card_is_valid){
MobilisEletrica 1:25c826c035bd 68 //copia id do cartao para atributo 'last_valid_card' do objeto
MobilisEletrica 1:25c826c035bd 69 std::copy(rf_chip.uid.uidByte,rf_chip.uid.uidByte+ID_SIZE,last_valid_card);
MobilisEletrica 1:25c826c035bd 70 break;
MobilisEletrica 1:25c826c035bd 71 }
MobilisEletrica 1:25c826c035bd 72 }
MobilisEletrica 1:25c826c035bd 73 return card_is_valid;
MobilisEletrica 1:25c826c035bd 74 }
MobilisEletrica 1:25c826c035bd 75
MobilisEletrica 1:25c826c035bd 76
MobilisEletrica 1:25c826c035bd 77 /*
MobilisEletrica 1:25c826c035bd 78 Tenta ler o cartao, retorna 'true' em caso de sucesso
MobilisEletrica 1:25c826c035bd 79 */
MobilisEletrica 1:25c826c035bd 80 int CardReader::readCard(){
MobilisEletrica 1:25c826c035bd 81 return rf_chip.PICC_IsNewCardPresent() && rf_chip.PICC_ReadCardSerial();
MobilisEletrica 1:25c826c035bd 82 }