Files
MarklinController/mfrcproxy.cpp
2022-03-21 21:22:18 +01:00

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);
}