#include "mfrcproxy.h" MfrcProxy::MfrcProxy(SpiMaster* spi, ShiftReg* csReg, uint8_t csPin, void (detectCb)(MfrcProxy* proxy, Uid uid, void* data), void* userData): _csReg(csReg), _spi(spi), _detectCb(detectCb), _userData(userData), _csPin(csPin) { } uint8_t MfrcProxy::read(uint8_t addr) { _csReg->setBit(_csPin, false); _delay_us(5); _spi->readWrite(addr); _delay_us(5); uint8_t res = _spi->readWrite(); _csReg->setBit(_csPin, true); return res; } void MfrcProxy::irq() { if(read(REG_IRQ_BITS)) { uint8_t len = read(REG_UID_LEN); if(len > 0 && len < 11) { Uid uid; for(uint8_t i = 0; i < len; ++i) { uid.uidByte[i] = read(REG_UID_START_REG+i); } uid.size = len; _detectCb(this, uid, _userData); } } } bool MfrcProxy::probe(SpiMaster* spi, ShiftReg* csReg, uint8_t csPin) { csReg->setBit(csPin, false); _delay_us(5); spi->readWrite(REG_CHIP_ID); _delay_us(5); uint8_t version = spi->readWrite(); csReg->setBit(csPin, true); return version == 0x87; } uint8_t MfrcProxy::getId() { return read(REG_ID); }