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/leitor_rfid.cpp@2:4c12e1ed1367, 2018-09-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |