mirror of
https://github.com/RfidResearchGroup/ChameleonMini.git
synced 2026-05-12 11:20:37 -07:00
added anticollision
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#define ISO14443_3A_H_
|
||||
|
||||
#include "../Common.h"
|
||||
#include <string.h>
|
||||
|
||||
#define ISO14443A_UID_SIZE_SINGLE 4 /* bytes */
|
||||
#define ISO14443A_UID_SIZE_DOUBLE 7
|
||||
@@ -91,6 +92,31 @@ bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t S
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
{
|
||||
uint8_t CollisionByteCount = ((NVB >> 4) & 0x0f) - 2;
|
||||
uint8_t CollisionBitCount = (NVB >> 0) & 0x0f;
|
||||
uint8_t mask = 0xFF >> (8 - CollisionBitCount);
|
||||
// Since the UidCL does not contain the BCC, we have to distinguish here
|
||||
if (
|
||||
((CollisionByteCount == 5 || (CollisionByteCount == 4 && CollisionBitCount > 0)) && memcmp(UidCL, &DataPtr[2], 4) == 0 && (ISO14443A_CALC_BCC(UidCL) & mask) == (DataPtr[6] & mask))
|
||||
||
|
||||
(CollisionByteCount == 4 && CollisionBitCount == 0 && memcmp(UidCL, &DataPtr[2], 4) == 0)
|
||||
||
|
||||
(CollisionByteCount < 4 && memcmp(UidCL, &DataPtr[2], CollisionByteCount) == 0 && (UidCL[CollisionByteCount] & mask) == (DataPtr[CollisionByteCount + 2] & mask))
|
||||
)
|
||||
{
|
||||
DataPtr[0] = UidCL[0];
|
||||
DataPtr[1] = UidCL[1];
|
||||
DataPtr[2] = UidCL[2];
|
||||
DataPtr[3] = UidCL[3];
|
||||
DataPtr[4] = ISO14443A_CALC_BCC(DataPtr);
|
||||
|
||||
*BitCount = ISO14443A_CL_FRAME_SIZE;
|
||||
} else {
|
||||
*BitCount = 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/* TODO: No anticollision supported */
|
||||
*BitCount = 0;
|
||||
return false;
|
||||
@@ -111,6 +137,8 @@ bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue, bool
|
||||
|
||||
return true;
|
||||
} else {
|
||||
*BitCount = 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user