127 lines
3.3 KiB
C++
127 lines
3.3 KiB
C++
#pragma once
|
|
|
|
#include "spi.h"
|
|
#include <stdint.h>
|
|
|
|
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;
|
|
};
|