42#define CHIP_NAME "NXP MIFARE Classic EV1"
43#define MANUFACTURER_NAME "NXP"
44#define SUPPLY_VOLTAGE_MIN 3.3f
45#define SUPPLY_VOLTAGE_MAX 4.0f
46#define MAX_CURRENT 30.0f
47#define TEMPERATURE_MIN -25.0f
48#define TEMPERATURE_MAX 70.0f
49#define DRIVER_VERSION 1000
54#define MIFARE_CLASSIC_COMMAND_REQUEST 0x26
55#define MIFARE_CLASSIC_COMMAND_WAKE_UP 0x52
56#define MIFARE_CLASSIC_COMMAND_ANTICOLLISION_CL1 0x9320U
57#define MIFARE_CLASSIC_COMMAND_SELECT_CL1 0x9370U
58#define MIFARE_CLASSIC_COMMAND_ANTICOLLISION_CL2 0x9520U
59#define MIFARE_CLASSIC_COMMAND_SELECT_CL2 0x9570U
60#define MIFARE_CLASSIC_COMMAND_HALT 0x5000U
61#define MIFARE_CLASSIC_COMMAND_AUTHENTICATION_WITH_KEY_A 0x60
62#define MIFARE_CLASSIC_COMMAND_AUTHENTICATION_WITH_KEY_B 0x61
63#define MIFARE_CLASSIC_COMMAND_PERSONALIZE_UID_USAGE 0x40
64#define MIFARE_CLASSIC_COMMAND_SET_MOD_TYPE 0x43
65#define MIFARE_CLASSIC_COMMAND_MIFARE_READ 0x30
66#define MIFARE_CLASSIC_COMMAND_MIFARE_WRITE 0xA0
67#define MIFARE_CLASSIC_COMMAND_MIFARE_DECREMENT 0xC0
68#define MIFARE_CLASSIC_COMMAND_MIFARE_INCREMENT 0xC1
69#define MIFARE_CLASSIC_COMMAND_MIFARE_RESTORE 0xC2
70#define MIFARE_CLASSIC_COMMAND_MIFARE_TRANSFER 0xB0
78static void a_mifare_classic_iso14443a_crc(uint8_t *p, uint8_t len, uint8_t output[2])
80 uint32_t w_crc = 0x6363;
87 bt = (bt ^ (uint8_t)(w_crc & 0x00FF));
88 bt = (bt ^ (bt << 4));
89 w_crc = (w_crc >> 8) ^ ((uint32_t) bt << 8) ^ ((uint32_t) bt << 3) ^ ((uint32_t) bt >> 4);
92 output[0] = (uint8_t)(w_crc & 0xFF);
93 output[1] = (uint8_t)((w_crc >> 8) & 0xFF);
120 handle->
debug_print(
"mifare_classic: contactless_init is null.\n");
126 handle->
debug_print(
"mifare_classic: contactless_deinit is null.\n");
132 handle->
debug_print(
"mifare_classic: contactless_transceiver is null.\n");
138 handle->
debug_print(
"mifare_classic: delay_ms is null.\n");
146 handle->
debug_print(
"mifare_classic: contactless init failed.\n");
182 handle->
debug_print(
"mifare_classic: contactless deinit failed.\n");
208 uint8_t input_buf[1];
210 uint8_t output_buf[2];
227 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
233 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
237 if ((output_buf[0] == 0x04) && (output_buf[1] == 0x00))
240 handle->
type = *type;
244 else if ((output_buf[0] == 0x02) && (output_buf[1] == 0x00))
247 handle->
type = *type;
254 handle->
type = *type;
255 handle->
debug_print(
"mifare_classic: type is invalid.\n");
278 uint8_t input_buf[1];
280 uint8_t output_buf[2];
297 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
303 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
307 if ((output_buf[0] == 0x04) && (output_buf[1] == 0x00))
310 handle->
type = *type;
314 else if ((output_buf[0] == 0x02) && (output_buf[1] == 0x00))
317 handle->
type = *type;
324 handle->
type = *type;
325 handle->
debug_print(
"mifare_classic: type is invalid.\n");
344 uint8_t input_buf[4];
346 uint8_t output_buf[1];
360 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
385 uint8_t input_buf[4];
387 uint8_t output_buf[1];
401 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
406 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
412 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
416 if (output_buf[0] == 0xA)
422 handle->
debug_print(
"mifare_classic: ack error.\n");
446 uint8_t input_buf[4];
448 uint8_t output_buf[1];
462 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
467 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
473 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
477 if (output_buf[0] == 0xA)
483 handle->
debug_print(
"mifare_classic: ack error.\n");
509 uint8_t input_buf[2];
511 uint8_t output_buf[5];
529 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
535 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
540 for (i = 0; i < 4; i++)
542 id[i] = output_buf[i];
543 check ^= output_buf[i];
545 if (check != output_buf[4])
547 handle->
debug_print(
"mifare_classic: check error.\n");
574 uint8_t input_buf[2];
576 uint8_t output_buf[5];
594 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
600 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
605 for (i = 0; i < 4; i++)
607 id[i] = output_buf[i];
608 check ^= output_buf[i];
610 if (check != output_buf[4])
612 handle->
debug_print(
"mifare_classic: check error.\n");
638 uint8_t input_buf[9];
640 uint8_t output_buf[1];
655 for (i = 0; i < 4; i++)
657 input_buf[2 + i] =
id[i];
658 input_buf[6] ^=
id[i];
660 a_mifare_classic_iso14443a_crc(input_buf, 7, input_buf + 7);
665 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
671 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
675 if ((output_buf[0] == 0x08) || (output_buf[0] == 0x18))
681 handle->
debug_print(
"mifare_classic: sak error.\n");
705 uint8_t input_buf[9];
707 uint8_t output_buf[1];
722 for (i = 0; i < 4; i++)
724 input_buf[2 + i] =
id[i];
725 input_buf[6] ^=
id[i];
727 a_mifare_classic_iso14443a_crc(input_buf, 7, input_buf + 7);
732 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
738 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
742 if ((output_buf[0] == 0x08) || (output_buf[0] == 0x18))
748 handle->
debug_print(
"mifare_classic: sak error.\n");
774 uint8_t input_buf[12];
776 uint8_t output_buf[1];
796 input_buf[1] = block;
797 for (i = 0; i < 6; i++)
799 input_buf[2 + i] = key[i];
801 for (i = 0; i < 4; i++)
803 input_buf[8 + i] =
id[i];
810 handle->
debug_print(
"mifare_classic: authentication failed.\n");
836 uint8_t input_buf[4];
838 uint8_t output_buf[18];
852 input_buf[1] = block;
853 a_mifare_classic_iso14443a_crc(input_buf , 2, input_buf + 2);
858 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
862 if (output_len != 18)
864 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
868 a_mifare_classic_iso14443a_crc(output_buf, 16, crc_buf);
869 if ((output_buf[16] == crc_buf[0]) && (output_buf[17] == crc_buf[1]))
871 memcpy(data, output_buf, 16);
877 handle->
debug_print(
"mifare_classic: crc error.\n");
902 uint8_t input_buf[18];
904 uint8_t output_buf[1];
917 input_buf[1] = block;
918 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
923 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
929 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
933 if (output_buf[0] != 0xA)
935 handle->
debug_print(
"mifare_classic: ack error.\n");
940 for (i = 0; i < 16; i ++)
942 input_buf[i] = data[i];
944 a_mifare_classic_iso14443a_crc(input_buf, 16, input_buf + 16);
950 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
954 if (output_buf[0] != 0xA)
956 handle->
debug_print(
"mifare_classic: ack error.\n");
984 uint8_t input_buf[18];
986 uint8_t output_buf[1];
1000 v = (uint32_t)(value);
1001 v_r = (uint32_t)(~value);
1002 data[0] = (uint8_t)((v >> 0) & 0xFF);
1003 data[1] = (uint8_t)((v >> 8) & 0xFF);
1004 data[2] = (uint8_t)((v >> 16) & 0xFF);
1005 data[3] = (uint8_t)((v >> 24) & 0xFF);
1006 data[4] = (uint8_t)((v_r >> 0) & 0xFF);
1007 data[5] = (uint8_t)((v_r >> 8) & 0xFF);
1008 data[6] = (uint8_t)((v_r >> 16) & 0xFF);
1009 data[7] = (uint8_t)((v_r >> 24) & 0xFF);
1010 data[8] = (uint8_t)((v >> 0) & 0xFF);
1011 data[9] = (uint8_t)((v >> 8) & 0xFF);
1012 data[10] = (uint8_t)((v >> 16) & 0xFF);
1013 data[11] = (uint8_t)((v >> 24) & 0xFF);
1015 data[13] = (uint8_t)(~addr);
1017 data[15] = (uint8_t)(~addr);
1021 input_buf[1] = block;
1022 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1027 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1031 if (output_len != 1)
1033 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1037 if (output_buf[0] != 0xA)
1039 handle->
debug_print(
"mifare_classic: ack error.\n");
1044 for (i = 0; i < 16; i ++)
1046 input_buf[i] = data[i];
1048 a_mifare_classic_iso14443a_crc(input_buf, 16, input_buf + 16);
1054 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1058 if (output_buf[0] != 0xA)
1060 handle->
debug_print(
"mifare_classic: ack error.\n");
1088 uint8_t input_buf[18];
1090 uint8_t output_buf[1];
1104 v = (uint32_t)(value);
1105 v_r = (uint32_t)(~value);
1106 data[0] = (uint8_t)((v >> 0) & 0xFF);
1107 data[1] = (uint8_t)((v >> 8) & 0xFF);
1108 data[2] = (uint8_t)((v >> 16) & 0xFF);
1109 data[3] = (uint8_t)((v >> 24) & 0xFF);
1110 data[4] = (uint8_t)((v_r >> 0) & 0xFF);
1111 data[5] = (uint8_t)((v_r >> 8) & 0xFF);
1112 data[6] = (uint8_t)((v_r >> 16) & 0xFF);
1113 data[7] = (uint8_t)((v_r >> 24) & 0xFF);
1114 data[8] = (uint8_t)((v >> 0) & 0xFF);
1115 data[9] = (uint8_t)((v >> 8) & 0xFF);
1116 data[10] = (uint8_t)((v >> 16) & 0xFF);
1117 data[11] = (uint8_t)((v >> 24) & 0xFF);
1119 data[13] = (uint8_t)(~addr);
1121 data[15] = (uint8_t)(~addr);
1125 input_buf[1] = block;
1126 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1131 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1135 if (output_len != 1)
1137 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1141 if (output_buf[0] != 0xA)
1143 handle->
debug_print(
"mifare_classic: ack error.\n");
1148 for (i = 0; i < 16; i ++)
1150 input_buf[i] = data[i];
1152 a_mifare_classic_iso14443a_crc(input_buf, 16, input_buf + 16);
1158 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1162 if (output_buf[0] != 0xA)
1164 handle->
debug_print(
"mifare_classic: ack error.\n");
1193 uint8_t input_buf[4];
1195 uint8_t output_buf[18];
1218 input_buf[1] = block;
1219 a_mifare_classic_iso14443a_crc(input_buf , 2, input_buf + 2);
1224 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1228 if (output_len != 18)
1230 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1234 a_mifare_classic_iso14443a_crc(output_buf, 16, crc_buf);
1235 if ((output_buf[16] == crc_buf[0]) && (output_buf[17] == crc_buf[1]))
1239 for (i = 0; i < 16; i++)
1241 data[i] = output_buf[i];
1243 value_0 = ((uint32_t)data[0] << 0) | ((uint32_t)data[1] << 8) |
1244 ((uint32_t)data[2] << 16) | ((uint32_t)data[3] << 24);
1245 value_1 = ((uint32_t)data[4] << 0) | ((uint32_t)data[5] << 8) |
1246 ((uint32_t)data[6] << 16) | ((uint32_t)data[7] << 24);
1247 value_2 = ((uint32_t)data[8] << 0) | ((uint32_t)data[9] << 8) |
1248 ((uint32_t)data[10] << 16) | ((uint32_t)data[11] << 24);
1249 address_0 = data[12];
1250 address_1 = (uint8_t)(~data[13]);
1251 address_2 = data[14];
1252 address_3 = (uint8_t)(~data[15]);
1254 if ((value_0 != value_2) || (value_0 != (uint32_t)(~value_1)))
1256 handle->
debug_print(
"mifare_classic: value is invalid.\n");
1260 if ((address_0 != address_2) ||
1261 (address_1 != address_3) ||
1262 (address_0 != (uint8_t)(address_1))
1265 handle->
debug_print(
"mifare_classic: block is invalid.\n");
1270 *value = (int32_t)(v);
1277 handle->
debug_print(
"mifare_classic: crc error.\n");
1302 uint8_t input_buf[6];
1304 uint8_t output_buf[1];
1320 input_buf[1] = block;
1321 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1326 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1330 if (output_len != 1)
1332 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1336 if (output_buf[0] == 0x4)
1338 handle->
debug_print(
"mifare_classic: invalid operation.\n");
1342 if (output_buf[0] != 0xA)
1344 handle->
debug_print(
"mifare_classic: ack error.\n");
1350 input_buf[0] = (v >> 0) & 0xFF;
1351 input_buf[1] = (v >> 8) & 0xFF;
1352 input_buf[2] = (v >> 16) & 0xFF;
1353 input_buf[3] = (v >> 24) & 0xFF;
1354 a_mifare_classic_iso14443a_crc(input_buf, 4, input_buf + 4);
1380 uint8_t input_buf[6];
1382 uint8_t output_buf[1];
1398 input_buf[1] = block;
1399 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1404 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1408 if (output_len != 1)
1410 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1414 if (output_buf[0] == 0x4)
1416 handle->
debug_print(
"mifare_classic: invalid operation.\n");
1420 if (output_buf[0] != 0xA)
1422 handle->
debug_print(
"mifare_classic: ack error.\n");
1428 input_buf[0] = (v >> 0) & 0xFF;
1429 input_buf[1] = (v >> 8) & 0xFF;
1430 input_buf[2] = (v >> 16) & 0xFF;
1431 input_buf[3] = (v >> 24) & 0xFF;
1432 a_mifare_classic_iso14443a_crc(input_buf, 4, input_buf + 4);
1457 uint8_t input_buf[4];
1459 uint8_t output_buf[1];
1472 input_buf[1] = block;
1473 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1478 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1482 if (output_len != 1)
1484 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1488 if (output_buf[0] == 0x4)
1490 handle->
debug_print(
"mifare_classic: invalid operation.\n");
1494 if (output_buf[0] != 0xA)
1496 handle->
debug_print(
"mifare_classic: ack error.\n");
1522 uint8_t input_buf[6];
1524 uint8_t output_buf[1];
1537 input_buf[1] = block;
1538 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1543 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1547 if (output_len != 1)
1549 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1553 if (output_buf[0] == 0x4)
1555 handle->
debug_print(
"mifare_classic: invalid operation.\n");
1559 if (output_buf[0] != 0xA)
1561 handle->
debug_print(
"mifare_classic: ack error.\n");
1567 input_buf[0] = 0x00;
1568 input_buf[1] = 0x00;
1569 input_buf[2] = 0x00;
1570 input_buf[3] = 0x00;
1571 a_mifare_classic_iso14443a_crc(input_buf, 4, input_buf + 4);
1602 *sector = block / 4;
1606 *sector = 32 + ((block - (32 * 4)) / 16);
1670 *block = sector * 4;
1674 *block = 32 * 4 + (sector - 32) * 16;
1704 *block = sector * 4;
1708 *block = 32 * 4 + (sector - 32) * 16;
1710 *block = *block + ((sector < 32) ? 4 : 16) - 1;
1756 uint8_t sector, uint8_t key_a[6],
1757 uint8_t block_0_0_4, uint8_t block_1_5_9,
1758 uint8_t block_2_10_14, uint8_t block_3_15,
1759 uint8_t user_data, uint8_t key_b[6])
1764 uint8_t part_1, part_2, part_3;
1766 uint8_t input_buf[18];
1768 uint8_t output_buf[1];
1769 uint8_t access_bits[4];
1781 part_1 = (((block_3_15 >> 2) & 0x1) << 3) | (((block_2_10_14 >> 2) & 0x1) << 2) |
1782 (((block_1_5_9 >> 2) & 0x1) << 1) | (((block_0_0_4 >> 2) & 0x1) << 0);
1783 part_2 = (((block_3_15 >> 1) & 0x1) << 3) | (((block_2_10_14 >> 1) & 0x1) << 2) |
1784 (((block_1_5_9 >> 1) & 0x1) << 1) | (((block_0_0_4 >> 1) & 0x1) << 0);
1785 part_3 = (((block_3_15 >> 0) & 0x1) << 3) | (((block_2_10_14 >> 0) & 0x1) << 2) |
1786 (((block_1_5_9 >> 0) & 0x1) << 1) | (((block_0_0_4 >> 0) & 0x1) << 0);
1787 access_bits[0] = ((0xF - part_2) << 4) | ((0xF - part_1) << 0);
1788 access_bits[1] = ((part_1 & 0xF) << 4) | ((0xF - part_3) << 0);
1789 access_bits[2] = ((part_3 & 0xF) << 4) | ((part_2 & 0xF) << 0);
1790 access_bits[3] = user_data;
1791 for (i = 0; i < 6; i++)
1795 for (i = 0; i < 4; i++)
1797 data[i + 6] = access_bits[i];
1799 for (i = 0; i < 6; i++)
1801 data[i + 10] = key_b[i];
1810 block = 32 * 4 + (sector - 32) * 16;
1812 block = block + ((sector < 32) ? 4 : 16) - 1;
1816 input_buf[1] = block;
1817 a_mifare_classic_iso14443a_crc(input_buf, 2, input_buf + 2);
1822 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1826 if (output_len != 1)
1828 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1832 if (output_buf[0] != 0xA)
1834 handle->
debug_print(
"mifare_classic: ack error.\n");
1839 for (i = 0; i < 16; i ++)
1841 input_buf[i] = data[i];
1843 a_mifare_classic_iso14443a_crc(input_buf, 16, input_buf + 16);
1849 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1853 if (output_buf[0] != 0xA)
1855 handle->
debug_print(
"mifare_classic: ack error.\n");
1884 uint8_t sector, uint8_t *block_0_0_4, uint8_t *block_1_5_9,
1885 uint8_t *block_2_10_14, uint8_t *block_3_15,
1886 uint8_t *user_data, uint8_t key_b[6])
1892 uint8_t input_buf[4];
1894 uint8_t output_buf[18];
1897 uint8_t access_bits[4];
1914 block = 32 * 4 + (sector - 32) * 16;
1916 block = block + ((sector < 32) ? 4 : 16) - 1;
1920 input_buf[1] = block;
1921 a_mifare_classic_iso14443a_crc(input_buf , 2, input_buf + 2);
1926 handle->
debug_print(
"mifare_classic: contactless transceiver failed.\n");
1930 if (output_len != 18)
1932 handle->
debug_print(
"mifare_classic: output_len is invalid.\n");
1936 a_mifare_classic_iso14443a_crc(output_buf, 16, crc_buf);
1937 if ((output_buf[16] == crc_buf[0]) && (output_buf[17] == crc_buf[1]))
1946 memcpy(data, output_buf, 16);
1948 for (i = 0; i < 6; i++)
1950 key_b[i] = data[10 + i];
1952 for (i = 0; i < 4; i++)
1954 access_bits[i] = data[6 + i];
1956 part_2_r = (access_bits[0] >> 4) & 0xF;
1957 part_1_r = (access_bits[0] >> 0) & 0xF;
1958 part_1 = (access_bits[1] >> 4) & 0xF;
1959 part_3_r = (access_bits[1] >> 0) & 0xF;
1960 part_3 = (access_bits[2] >> 4) & 0xF;
1961 part_2 = (access_bits[2] >> 0) & 0xF;
1962 if (((part_1 + part_1_r) != 0xF) ||
1963 ((part_2 + part_2_r) != 0xF) ||
1964 ((part_3 + part_3_r) != 0xF))
1966 handle->
debug_print(
"mifare_classic: data is invalid.\n");
1970 *block_0_0_4 = (((part_1 >> 0) & 0x01) << 2) | (((part_2 >> 0) & 0x01) << 1) |
1971 (((part_3 >> 0) & 0x01) << 0);
1972 *block_1_5_9 = (((part_1 >> 1) & 0x01) << 2) | (((part_2 >> 1) & 0x01) << 1) |
1973 (((part_3 >> 1) & 0x01) << 0);
1974 *block_2_10_14 = (((part_1 >> 2) & 0x01) << 2) | (((part_2 >> 2) & 0x01) << 1) |
1975 (((part_3 >> 2) & 0x01) << 0);
1976 *block_3_15 = (((part_1 >> 3) & 0x01) << 2) | (((part_2 >> 3) & 0x01) << 1) |
1977 (((part_3 >> 3) & 0x01) << 0);
1978 *user_data = access_bits[3];
1984 handle->
debug_print(
"mifare_classic: crc error.\n");
2014 out_buf, out_len) != 0)
#define MIFARE_CLASSIC_COMMAND_PERSONALIZE_UID_USAGE
#define MIFARE_CLASSIC_COMMAND_WAKE_UP
#define MIFARE_CLASSIC_COMMAND_MIFARE_READ
#define MIFARE_CLASSIC_COMMAND_MIFARE_INCREMENT
#define SUPPLY_VOLTAGE_MAX
#define MIFARE_CLASSIC_COMMAND_HALT
#define MIFARE_CLASSIC_COMMAND_MIFARE_RESTORE
#define MIFARE_CLASSIC_COMMAND_SET_MOD_TYPE
#define MIFARE_CLASSIC_COMMAND_REQUEST
chip command definition
#define MIFARE_CLASSIC_COMMAND_AUTHENTICATION_WITH_KEY_B
#define MANUFACTURER_NAME
#define MIFARE_CLASSIC_COMMAND_SELECT_CL1
#define SUPPLY_VOLTAGE_MIN
#define MIFARE_CLASSIC_COMMAND_AUTHENTICATION_WITH_KEY_A
#define MIFARE_CLASSIC_COMMAND_SELECT_CL2
#define MIFARE_CLASSIC_COMMAND_MIFARE_WRITE
#define MIFARE_CLASSIC_COMMAND_MIFARE_DECREMENT
#define MIFARE_CLASSIC_COMMAND_ANTICOLLISION_CL2
#define CHIP_NAME
chip information definition
#define MIFARE_CLASSIC_COMMAND_ANTICOLLISION_CL1
#define MIFARE_CLASSIC_COMMAND_MIFARE_TRANSFER
driver mifare classic header file
mifare_classic_personalized_uid_t
mifare_classic personalized uid enumeration definition
uint8_t mifare_classic_sector_last_block(mifare_classic_handle_t *handle, uint8_t sector, uint8_t *block)
mifare get the sector's last block
uint8_t mifare_classic_anticollision_cl2(mifare_classic_handle_t *handle, uint8_t id[4])
mifare anti collision cl2
uint8_t mifare_classic_halt(mifare_classic_handle_t *handle)
mifare halt
struct mifare_classic_info_s mifare_classic_info_t
mifare_classic information structure definition
uint8_t mifare_classic_read(mifare_classic_handle_t *handle, uint8_t block, uint8_t data[16])
mifare read
struct mifare_classic_handle_s mifare_classic_handle_t
mifare_classic handle structure definition
uint8_t mifare_classic_set_sector_permission(mifare_classic_handle_t *handle, uint8_t sector, uint8_t key_a[6], uint8_t block_0_0_4, uint8_t block_1_5_9, uint8_t block_2_10_14, uint8_t block_3_15, uint8_t user_data, uint8_t key_b[6])
mifare set the sector permission
uint8_t mifare_classic_block_to_sector(mifare_classic_handle_t *handle, uint8_t block, uint8_t *sector)
mifare block number to sector number
uint8_t mifare_classic_sector_first_block(mifare_classic_handle_t *handle, uint8_t sector, uint8_t *block)
mifare get the sector's first block
uint8_t mifare_classic_set_personalized_uid(mifare_classic_handle_t *handle, mifare_classic_personalized_uid_t type)
mifare set the personalized uid
uint8_t mifare_classic_value_init(mifare_classic_handle_t *handle, uint8_t block, int32_t value, uint8_t addr)
mifare init one block as a value block
uint8_t mifare_classic_authentication(mifare_classic_handle_t *handle, uint8_t id[4], uint8_t block, mifare_classic_authentication_key_t key_type, uint8_t key[6])
mifare authentication
uint8_t mifare_classic_select_cl2(mifare_classic_handle_t *handle, uint8_t id[4])
mifare select cl2
uint8_t mifare_classic_request(mifare_classic_handle_t *handle, mifare_classic_type_t *type)
mifare request
uint8_t mifare_classic_value_write(mifare_classic_handle_t *handle, uint8_t block, int32_t value, uint8_t addr)
mifare value write
uint8_t mifare_classic_decrement(mifare_classic_handle_t *handle, uint8_t block, uint32_t value)
mifare decrement
uint8_t mifare_classic_select_cl1(mifare_classic_handle_t *handle, uint8_t id[4])
mifare select cl1
mifare_classic_load_modulation_t
mifare_classic load modulation enumeration definition
uint8_t mifare_classic_get_sector_permission(mifare_classic_handle_t *handle, uint8_t sector, uint8_t *block_0_0_4, uint8_t *block_1_5_9, uint8_t *block_2_10_14, uint8_t *block_3_15, uint8_t *user_data, uint8_t key_b[6])
mifare get the sector permission
uint8_t mifare_classic_value_read(mifare_classic_handle_t *handle, uint8_t block, int32_t *value, uint8_t *addr)
mifare value read
uint8_t mifare_classic_transfer(mifare_classic_handle_t *handle, uint8_t block)
mifare transfer
uint8_t mifare_classic_write(mifare_classic_handle_t *handle, uint8_t block, uint8_t data[16])
mifare write
uint8_t mifare_classic_increment(mifare_classic_handle_t *handle, uint8_t block, uint32_t value)
mifare increment
uint8_t mifare_classic_set_modulation(mifare_classic_handle_t *handle, mifare_classic_load_modulation_t mod)
mifare set the load modulation
mifare_classic_type_t
mifare_classic type enumeration definition
uint8_t mifare_classic_anticollision_cl1(mifare_classic_handle_t *handle, uint8_t id[4])
mifare anti collision cl1
uint8_t mifare_classic_sector_block_count(mifare_classic_handle_t *handle, uint8_t sector, uint8_t *count)
mifare get the sector's block counter
uint8_t mifare_classic_deinit(mifare_classic_handle_t *handle)
close the chip
uint8_t mifare_classic_wake_up(mifare_classic_handle_t *handle, mifare_classic_type_t *type)
mifare wake up
uint8_t mifare_classic_restore(mifare_classic_handle_t *handle, uint8_t block)
mifare restore
uint8_t mifare_classic_init(mifare_classic_handle_t *handle)
initialize the chip
uint8_t mifare_classic_info(mifare_classic_info_t *info)
get chip information
mifare_classic_authentication_key_t
mifare_classic authentication key enumeration definition
@ MIFARE_CLASSIC_TYPE_S50
@ MIFARE_CLASSIC_TYPE_S70
@ MIFARE_CLASSIC_TYPE_INVALID
@ MIFARE_CLASSIC_AUTHENTICATION_KEY_A
uint8_t mifare_classic_transceiver(mifare_classic_handle_t *handle, uint8_t *in_buf, uint8_t in_len, uint8_t *out_buf, uint8_t *out_len)
transceiver data
void(* delay_ms)(uint32_t ms)
void(* debug_print)(const char *const fmt,...)
uint8_t(* contactless_deinit)(void)
uint8_t(* contactless_transceiver)(uint8_t *in_buf, uint8_t in_len, uint8_t *out_buf, uint8_t *out_len)
uint8_t(* contactless_init)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v