#pragma once #include "spi.h" #include enum MFRC522RegEnum { Reserved00 = 0x00, CommandReg = 0x01, CommIEnReg = 0x02, DivlEnReg = 0x03, CommIrqReg = 0x04, DivIrqReg = 0x05, ErrorReg = 0x06, Status1Reg = 0x07, Status2Reg = 0x08, FIFODataReg = 0x09, FIFOLevelReg = 0x0A, WaterLevelReg = 0x0B, ControlReg = 0x0C, BitFramingReg = 0x0D, CollReg = 0x0E, Reserved01 = 0x0F, Reserved10 = 0x10, ModeReg = 0x11, TxModeReg = 0x12, RxModeReg = 0x13, TxControlReg = 0x14, TxAutoReg = 0x15, TxSelReg = 0x16, RxSelReg = 0x17, RxThresholdReg = 0x18, DemodReg = 0x19, Reserved11 = 0x1A, Reserved12 = 0x1B, MifareReg = 0x1C, Reserved13 = 0x1D, Reserved14 = 0x1E, SerialSpeedReg = 0x1F, Reserved20 = 0x20, CRCResultRegM = 0x21, CRCResultRegL = 0x22, Reserved21 = 0x23, ModWidthReg = 0x24, Reserved22 = 0x25, RFCfgReg = 0x26, GsNReg = 0x27, CWGsPReg = 0x28, ModGsPReg = 0x29, TModeReg = 0x2A, TPrescalerReg = 0x2B, TReloadRegH = 0x2C, TReloadRegL = 0x2D, TCounterValueRegH = 0x2E, TCounterValueRegL = 0x2F, Reserved30 = 0x30, TestSel1Reg = 0x31, TestSel2Reg = 0x32, TestPinEnReg = 0x33, TestPinValueReg = 0x34, TestBusReg = 0x35, AutoTestReg = 0x36, VersionReg = 0x37, AnalogTestReg = 0x38, TestDAC1Reg = 0x39, TestDAC2Reg = 0x3A, TestADCReg = 0x3B, Reserved31 = 0x3C, Reserved32 = 0x3D, Reserved33 = 0x3E, Reserved34 = 0x3F }; class MFRC522 { public: MFRC522(SPI *spi); ~MFRC522(); void MFRC522_Reset(); void Write_MFRC522(uint8_t, uint8_t); uint8_t Read_MFRC522(uint8_t); void SetBitMask(uint8_t, uint8_t); void ClearBitMask(uint8_t, uint8_t); void AntennaOn(); void AntennaOff(); int MFRC522_ToCard(uint8_t, uint8_t); int MFRC522_Request(uint8_t); int MFRC522_Anticoll(uint8_t (*)[4]); int CalulateCRC(uint8_t *); int MFRC522_SelectTag(uint8_t *); int MFRC522_Auth(uint8_t, unsigned int, uint8_t *, uint8_t *); int MFRC522_StopCrypto1(); int MFRC522_Read(uint8_t, uint8_t (*)[4]); int MFRC522_Write(uint8_t, uint8_t *); int MFRC522_DumpClassic1K(uint8_t *, uint8_t *); void MFRC522_Init(); static const int NRSTPD = 22; static const int MAX_LEN = 16; static const int PCD_IDLE = 0x00; static const int PCD_AUTHENT = 0x0E; static const int PCD_RECEIVE = 0x08; static const int PCD_TRANSMIT = 0x04; static const int PCD_TRANSCEIVE = 0x0C; static const int PCD_RESETPHASE = 0x0F; static const int PCD_CALCCRC = 0x03; static const int PICC_REQIDL = 0x26; static const int PICC_REQALL = 0x52; static const int PICC_ANTICOLL = 0x93; static const int PICC_SElECTTAG = 0x93; static const int PICC_AUTHENT1A = 0x60; static const int PICC_AUTHENT1B = 0x61; static const int PICC_READ = 0x30; static const int PICC_WRITE = 0xA0; static const int PICC_DECREMENT = 0xC0; static const int PICC_INCREMENT = 0xC1; static const int PICC_RESTORE = 0xC2; static const int PICC_TRANSFER = 0xB0; static const int PICC_HALT = 0x50; static const int MI_OK = 0; static const int MI_NOTAGERR = 1; static const int MI_ERR = 2; private: SPI *spi; };