add support for mfrc proxyies
This commit is contained in:
52
mfrcproxy.cpp
Normal file
52
mfrcproxy.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
#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);
|
||||
}
|
Reference in New Issue
Block a user