53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
#include "mfrcproxy.h"
|
|
|
|
MfrcProxy::MfrcProxy(SpiMaster* spi, ShiftReg<NFC_PORTS>* 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<NFC_PORTS>* 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);
|
|
}
|