mirror of
https://github.com/whowechina/aic_pico.git
synced 2024-11-27 23:10:48 +01:00
Better mifare auth caching
This commit is contained in:
parent
c85e42094f
commit
d37974fe22
@ -468,27 +468,33 @@ bool pn5180_mifare_auth(const uint8_t uid[4], uint8_t block_id, uint8_t key_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ignored[16];
|
uint8_t ignored[16];
|
||||||
if (!pn5180_mifare_read(block_id & 0xfc, ignored)) {
|
if (!pn5180_mifare_read((block_id & 0xfc) + 1, ignored)) {
|
||||||
DEBUG("\nPN5180 Mifare auth check bad");
|
DEBUG("\nPN5180 Mifare auth check bad");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cache.result = true;
|
cache.result = true;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pn5180_mifare_read(uint8_t block_id, uint8_t block_data[16])
|
bool pn5180_mifare_read(uint8_t block_id, uint8_t block_data[16])
|
||||||
{
|
{
|
||||||
static struct {
|
static struct {
|
||||||
|
uint8_t block_id;
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
uint8_t data[16];
|
uint8_t data[16];
|
||||||
} cache = { 0 };
|
} cache[3] = { 0 };
|
||||||
|
|
||||||
uint32_t now = time_us_32();
|
uint32_t now = time_us_32();
|
||||||
if ((now < cache.time + 1000000) && (block_id == 0)) {
|
|
||||||
memcpy(block_data, cache.data, 16);
|
if (block_id < 3) {
|
||||||
cache.time = now;
|
if ((cache[block_id].block_id == block_id) &&
|
||||||
return true;
|
(now < cache[block_id].time + 1000000)) {
|
||||||
|
memcpy(block_data, cache[block_id].data, 16);
|
||||||
|
cache[block_id].time = now;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t cmd[] = { CMD_MIFARE_READ, block_id };
|
uint8_t cmd[] = { CMD_MIFARE_READ, block_id };
|
||||||
@ -504,9 +510,10 @@ bool pn5180_mifare_read(uint8_t block_id, uint8_t block_data[16])
|
|||||||
|
|
||||||
pn5180_read_data(block_data, 16);
|
pn5180_read_data(block_data, 16);
|
||||||
|
|
||||||
if (block_id == 0) {
|
if (block_id < 3) {
|
||||||
memcpy(cache.data, block_data, 16);
|
memcpy(cache[block_id].data, block_data, 16);
|
||||||
cache.time = time_us_32();
|
cache[block_id].block_id = block_id;
|
||||||
|
cache[block_id].time = time_us_32();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user