45 lines
1.0 KiB
C
45 lines
1.0 KiB
C
#include <assert.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "iccard/nesica.h"
|
|
#include "iccard/mifare.h"
|
|
|
|
#include "util/dprintf.h"
|
|
|
|
HRESULT aime_card_populate(
|
|
struct mifare *mifare,
|
|
const uint8_t *card_sn,
|
|
size_t nbytes)
|
|
{
|
|
uint8_t b;
|
|
size_t i;
|
|
|
|
assert(mifare != NULL);
|
|
assert(card_sn != NULL);
|
|
|
|
memset(mifare, 0, sizeof(*mifare));
|
|
|
|
if (nbytes != 16) {
|
|
dprintf("Nesica IC: Card Serial must be 16 characters\n");
|
|
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
for (int i = 0; i < 16; i++) {
|
|
mifare->sectors[0].blocks[0].bytes[i] = i;
|
|
}
|
|
|
|
memset(mifare->sectors[0].blocks[2].bytes, 0xff, 16);
|
|
memset(mifare->sectors[0].blocks[3].bytes, 0xff, 16);
|
|
|
|
mifare->sectors[0].blocks[0].bytes[14] = 'T';
|
|
mifare->sectors[0].blocks[0].bytes[15] = 'U';
|
|
|
|
memcpy_s(mifare->sectors[0].blocks[1].bytes, 4, (uint8_t *)"T053", 4);
|
|
memcpy_s(mifare->sectors[0].blocks[1].bytes + 4, 12, card_sn, 12);
|
|
memcpy_s(mifare->sectors[0].blocks[2].bytes, 16, card_sn + 12, 4);
|
|
|
|
return S_OK;
|
|
}
|