LibDriver MIFARE_CLASSIC
Loading...
Searching...
No Matches
driver_mifare_classic_card_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static mifare_classic_handle_t gs_handle;
41
50{
51 uint8_t res;
52 uint8_t i;
53 uint8_t addr;
54 int32_t value_check;
55 uint8_t id[4];
56 uint8_t key[6];
57 uint8_t data[16];
58 uint8_t data_check[16];
59 uint8_t block_0_0_4;
60 uint8_t block_1_5_9;
61 uint8_t block_2_10_14;
62 uint8_t block_3_15;
63 uint8_t user_data;
64 uint8_t key_b[6];
67
68 /* link function */
75
76 /* get information */
77 res = mifare_classic_info(&info);
78 if (res != 0)
79 {
80 mifare_classic_interface_debug_print("mifare_classic: get info failed.\n");
81
82 return 1;
83 }
84 else
85 {
86 /* print chip info */
87 mifare_classic_interface_debug_print("mifare_classic: chip is %s.\n", info.chip_name);
88 mifare_classic_interface_debug_print("mifare_classic: manufacturer is %s.\n", info.manufacturer_name);
89 mifare_classic_interface_debug_print("mifare_classic: interface is %s.\n", info.interface);
90 mifare_classic_interface_debug_print("mifare_classic: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
91 mifare_classic_interface_debug_print("mifare_classic: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
92 mifare_classic_interface_debug_print("mifare_classic: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
93 mifare_classic_interface_debug_print("mifare_classic: max current is %0.2fmA.\n", info.max_current_ma);
94 mifare_classic_interface_debug_print("mifare_classic: max temperature is %0.1fC.\n", info.temperature_max);
95 mifare_classic_interface_debug_print("mifare_classic: min temperature is %0.1fC.\n", info.temperature_min);
96 }
97
98 /* start register test */
99 mifare_classic_interface_debug_print("mifare_classic: start card test.\n");
100
101 /* init */
102 res = mifare_classic_init(&gs_handle);
103 if (res != 0)
104 {
105 mifare_classic_interface_debug_print("mifare_classic: init failed.\n");
106
107 return 1;
108 }
109
110 /* wake up */
111 res = mifare_classic_wake_up(&gs_handle, &type);
112 if (res != 0)
113 {
114 mifare_classic_interface_debug_print("mifare_classic: wake up failed.\n");
115 (void)mifare_classic_deinit(&gs_handle);
116
117 return 1;
118 }
119
120 /* output the type */
121 if (type == MIFARE_CLASSIC_TYPE_S50)
122 {
123 mifare_classic_interface_debug_print("mifare_classic: find S50 card.\n");
124 }
125 else if (type == MIFARE_CLASSIC_TYPE_S70)
126 {
127 mifare_classic_interface_debug_print("mifare_classic: find S70 card.\n");
128 }
129 else
130 {
131 mifare_classic_interface_debug_print("mifare_classic: invalid type.\n");
132 (void)mifare_classic_deinit(&gs_handle);
133
134 return 1;
135 }
136
137 /* get the id */
138 res = mifare_classic_anticollision_cl1(&gs_handle, id);
139 if (res != 0)
140 {
141 mifare_classic_interface_debug_print("mifare_classic: anti collision cl1 failed.\n");
142 (void)mifare_classic_deinit(&gs_handle);
143
144 return 1;
145 }
146
147 /* select cl1 */
148 res = mifare_classic_select_cl1(&gs_handle, id);
149 if (res != 0)
150 {
151 mifare_classic_interface_debug_print("mifare_classic: anti collision cl1 failed.\n");
152 (void)mifare_classic_deinit(&gs_handle);
153
154 return 1;
155 }
156
157 mifare_classic_interface_debug_print("mifare_classic: id is 0x%02X 0x%02X 0x%02X 0x%02X.\n",
158 id[0], id[1], id[2], id[3]);
159
160 /* authentication block 0 */
161 key[0] = 0xFF;
162 key[1] = 0xFF;
163 key[2] = 0xFF;
164 key[3] = 0xFF;
165 key[4] = 0xFF;
166 key[5] = 0xFF;
167 res = mifare_classic_authentication(&gs_handle, id, 0x00,
169 if (res != 0)
170 {
171 mifare_classic_interface_debug_print("mifare_classic: authentication failed.\n");
172 (void)mifare_classic_deinit(&gs_handle);
173
174 return 1;
175 }
176 mifare_classic_interface_debug_print("mifare_classic: authentication block 0 ok.\n");
177
178 /* read block 0 */
179 res = mifare_classic_read(&gs_handle, 0x00, data_check);
180 if (res != 0)
181 {
182 mifare_classic_interface_debug_print("mifare_classic: read failed.\n");
183 (void)mifare_classic_deinit(&gs_handle);
184
185 return 1;
186 }
187 mifare_classic_interface_debug_print("mifare_classic: block 0 is ");
188 for (i = 0; i < 16; i++)
189 {
190 mifare_classic_interface_debug_print("0x%02X ", data_check[i]);
191 }
193
194 /* authentication block 1 */
195 key[0] = 0xFF;
196 key[1] = 0xFF;
197 key[2] = 0xFF;
198 key[3] = 0xFF;
199 key[4] = 0xFF;
200 key[5] = 0xFF;
201 res = mifare_classic_authentication(&gs_handle, id, 0x01,
203 if (res != 0)
204 {
205 mifare_classic_interface_debug_print("mifare_classic: authentication failed.\n");
206 (void)mifare_classic_deinit(&gs_handle);
207
208 return 1;
209 }
210 mifare_classic_interface_debug_print("mifare_classic: authentication block 1 ok.\n");
211
212 /* write block 1 */
213 for (i = 0; i < 16; i++)
214 {
215 data[i] = rand() % 256;
216 }
217 mifare_classic_interface_debug_print("mifare_classic: write block 1: ");
218 for (i = 0; i < 16; i++)
219 {
220 mifare_classic_interface_debug_print("0x%02X ", data[i]);
221 }
223 res = mifare_classic_write(&gs_handle, 0x01, data);
224 if (res != 0)
225 {
226 mifare_classic_interface_debug_print("mifare_classic: write failed.\n");
227 (void)mifare_classic_deinit(&gs_handle);
228
229 return 1;
230 }
231
232 /* read block 1 */
233 res = mifare_classic_read(&gs_handle, 0x01, data_check);
234 if (res != 0)
235 {
236 mifare_classic_interface_debug_print("mifare_classic: read failed.\n");
237 (void)mifare_classic_deinit(&gs_handle);
238
239 return 1;
240 }
241 mifare_classic_interface_debug_print("mifare_classic: read block 1: ");
242 for (i = 0; i < 16; i++)
243 {
244 mifare_classic_interface_debug_print("0x%02X ", data_check[i]);
245 }
247 mifare_classic_interface_debug_print("mifare_classic: check data %s.\n", memcmp(data, data_check, 16) == 0 ? "ok" : "error");
248
249 /* authentication block 2 */
250 key[0] = 0xFF;
251 key[1] = 0xFF;
252 key[2] = 0xFF;
253 key[3] = 0xFF;
254 key[4] = 0xFF;
255 key[5] = 0xFF;
256 res = mifare_classic_authentication(&gs_handle, id, 0x02,
258 if (res != 0)
259 {
260 mifare_classic_interface_debug_print("mifare_classic: authentication failed.\n");
261 (void)mifare_classic_deinit(&gs_handle);
262
263 return 1;
264 }
265 mifare_classic_interface_debug_print("mifare_classic: authentication block 2 ok.\n");
266
267 /* value init */
268 res = mifare_classic_value_init(&gs_handle, 0x02, 0, 0x02);
269 if (res != 0)
270 {
271 mifare_classic_interface_debug_print("mifare_classic: value init failed.\n");
272 (void)mifare_classic_deinit(&gs_handle);
273
274 return 1;
275 }
276 mifare_classic_interface_debug_print("mifare_classic: init value is %d.\n", 0);
277
278 /* read */
279 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
280 if (res != 0)
281 {
282 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
283 (void)mifare_classic_deinit(&gs_handle);
284
285 return 1;
286 }
287 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
288
289 /* value write */
290 res = mifare_classic_value_write(&gs_handle, 0x02, -10, 0x02);
291 if (res != 0)
292 {
293 mifare_classic_interface_debug_print("mifare_classic: value init failed.\n");
294 (void)mifare_classic_deinit(&gs_handle);
295
296 return 1;
297 }
298 mifare_classic_interface_debug_print("mifare_classic: write value is %d.\n", -10);
299
300 /* read */
301 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
302 if (res != 0)
303 {
304 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
305 (void)mifare_classic_deinit(&gs_handle);
306
307 return 1;
308 }
309 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
310
311 /* increment */
312 res = mifare_classic_increment(&gs_handle, 0x02, 6);
313 if (res != 0)
314 {
315 mifare_classic_interface_debug_print("mifare_classic: increment failed.\n");
316 (void)mifare_classic_deinit(&gs_handle);
317
318 return 1;
319 }
320 res = mifare_classic_transfer(&gs_handle, 0x02);
321 if (res != 0)
322 {
323 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
324 (void)mifare_classic_deinit(&gs_handle);
325
326 return 1;
327 }
328 mifare_classic_interface_debug_print("mifare_classic: increment %d.\n", 6);
329 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
330 if (res != 0)
331 {
332 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
333 (void)mifare_classic_deinit(&gs_handle);
334
335 return 1;
336 }
337 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
338
339 /* increment */
340 res = mifare_classic_increment(&gs_handle, 0x02, 6);
341 if (res != 0)
342 {
343 mifare_classic_interface_debug_print("mifare_classic: increment failed.\n");
344 (void)mifare_classic_deinit(&gs_handle);
345
346 return 1;
347 }
348 res = mifare_classic_transfer(&gs_handle, 0x02);
349 if (res != 0)
350 {
351 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
352 (void)mifare_classic_deinit(&gs_handle);
353
354 return 1;
355 }
356 mifare_classic_interface_debug_print("mifare_classic: increment %d.\n", 6);
357 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
358 if (res != 0)
359 {
360 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
361 (void)mifare_classic_deinit(&gs_handle);
362
363 return 1;
364 }
365 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
366
367 /* increment */
368 res = mifare_classic_increment(&gs_handle, 0x02, 6);
369 if (res != 0)
370 {
371 mifare_classic_interface_debug_print("mifare_classic: increment failed.\n");
372 (void)mifare_classic_deinit(&gs_handle);
373
374 return 1;
375 }
376 res = mifare_classic_transfer(&gs_handle, 0x02);
377 if (res != 0)
378 {
379 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
380 (void)mifare_classic_deinit(&gs_handle);
381
382 return 1;
383 }
384 mifare_classic_interface_debug_print("mifare_classic: increment %d.\n", 6);
385 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
386 if (res != 0)
387 {
388 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
389 (void)mifare_classic_deinit(&gs_handle);
390
391 return 1;
392 }
393 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
394
395 /* decrement */
396 res = mifare_classic_decrement(&gs_handle, 0x02, 5);
397 if (res != 0)
398 {
399 mifare_classic_interface_debug_print("mifare_classic: decrement failed.\n");
400 (void)mifare_classic_deinit(&gs_handle);
401
402 return 1;
403 }
404 res = mifare_classic_transfer(&gs_handle, 0x02);
405 if (res != 0)
406 {
407 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
408 (void)mifare_classic_deinit(&gs_handle);
409
410 return 1;
411 }
412 mifare_classic_interface_debug_print("mifare_classic: decrement %d.\n", 5);
413 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
414 if (res != 0)
415 {
416 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
417 (void)mifare_classic_deinit(&gs_handle);
418
419 return 1;
420 }
421 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
422
423 /* decrement */
424 res = mifare_classic_decrement(&gs_handle, 0x02, 5);
425 if (res != 0)
426 {
427 mifare_classic_interface_debug_print("mifare_classic: decrement failed.\n");
428 (void)mifare_classic_deinit(&gs_handle);
429
430 return 1;
431 }
432 res = mifare_classic_transfer(&gs_handle, 0x02);
433 if (res != 0)
434 {
435 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
436 (void)mifare_classic_deinit(&gs_handle);
437
438 return 1;
439 }
440 mifare_classic_interface_debug_print("mifare_classic: decrement %d.\n", 5);
441 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
442 if (res != 0)
443 {
444 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
445 (void)mifare_classic_deinit(&gs_handle);
446
447 return 1;
448 }
449 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
450
451 /* decrement */
452 res = mifare_classic_decrement(&gs_handle, 0x02, 5);
453 if (res != 0)
454 {
455 mifare_classic_interface_debug_print("mifare_classic: decrement failed.\n");
456 (void)mifare_classic_deinit(&gs_handle);
457
458 return 1;
459 }
460 res = mifare_classic_transfer(&gs_handle, 0x02);
461 if (res != 0)
462 {
463 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
464 (void)mifare_classic_deinit(&gs_handle);
465
466 return 1;
467 }
468 mifare_classic_interface_debug_print("mifare_classic: decrement %d.\n", 5);
469 res = mifare_classic_value_read(&gs_handle, 0x02, &value_check, &addr);
470 if (res != 0)
471 {
472 mifare_classic_interface_debug_print("mifare_classic: value read failed.\n");
473 (void)mifare_classic_deinit(&gs_handle);
474
475 return 1;
476 }
477 mifare_classic_interface_debug_print("mifare_classic: read value is %d.\n", value_check);
478
479 /* restore from block 2 */
480 res = mifare_classic_restore(&gs_handle, 0x02);
481 if (res != 0)
482 {
483 mifare_classic_interface_debug_print("mifare_classic: restore failed.\n");
484 (void)mifare_classic_deinit(&gs_handle);
485
486 return 1;
487 }
488
489 /* transfer to block 2 */
490 res = mifare_classic_transfer(&gs_handle, 0x02);
491 if (res != 0)
492 {
493 mifare_classic_interface_debug_print("mifare_classic: transfer failed.\n");
494 (void)mifare_classic_deinit(&gs_handle);
495
496 return 1;
497 }
498
499 res = mifare_classic_read(&gs_handle, 0x02, data_check);
500 if (res != 0)
501 {
502 mifare_classic_interface_debug_print("mifare_classic: read failed.\n");
503 (void)mifare_classic_deinit(&gs_handle);
504
505 return 1;
506 }
507 mifare_classic_interface_debug_print("mifare_classic: read block 2: ");
508 for (i = 0; i < 16; i++)
509 {
510 mifare_classic_interface_debug_print("0x%02X ", data_check[i]);
511 }
513
514 /* block to sector */
515 for (i = 0; i < 200; i += 15)
516 {
517 uint8_t sector;
518
519 res = mifare_classic_block_to_sector(&gs_handle, i, &sector);
520 if (res != 0)
521 {
522 mifare_classic_interface_debug_print("mifare_classic: block to sector failed.\n");
523 (void)mifare_classic_deinit(&gs_handle);
524
525 return 1;
526 }
527 mifare_classic_interface_debug_print("mifare_classic: block%d to sector is %d.\n", i, sector);
528 }
529
530 /* sector to block count */
531 for (i = 0; i < 40; i += 5)
532 {
533 uint8_t count;
534
535 res = mifare_classic_sector_block_count(&gs_handle, i, &count);
536 if (res != 0)
537 {
538 mifare_classic_interface_debug_print("mifare_classic: sector to block count failed.\n");
539 (void)mifare_classic_deinit(&gs_handle);
540
541 return 1;
542 }
543 mifare_classic_interface_debug_print("mifare_classic: sector%d block count is %d.\n", i, count);
544 }
545
546 /* sector to block count */
547 for (i = 0; i < 40; i += 5)
548 {
549 uint8_t first;
550 uint8_t last;
551
552 /* get the first block */
553 res = mifare_classic_sector_first_block(&gs_handle, i, &first);
554 if (res != 0)
555 {
556 mifare_classic_interface_debug_print("mifare_classic: first block failed.\n");
557 (void)mifare_classic_deinit(&gs_handle);
558
559 return 1;
560 }
561
562 /* get the last block */
563 res = mifare_classic_sector_last_block(&gs_handle, i, &last);
564 if (res != 0)
565 {
566 mifare_classic_interface_debug_print("mifare_classic: last block failed.\n");
567 (void)mifare_classic_deinit(&gs_handle);
568
569 return 1;
570 }
571 mifare_classic_interface_debug_print("mifare_classic: sector%d: block %d - %d.\n", i, first, last);
572 }
573
574 /* get the last block */
575 res = mifare_classic_sector_last_block(&gs_handle, 0, &addr);
576 if (res != 0)
577 {
578 mifare_classic_interface_debug_print("mifare_classic: last block failed.\n");
579 (void)mifare_classic_deinit(&gs_handle);
580
581 return 1;
582 }
583
584 /* authentication block 3 */
585 key[0] = 0xFF;
586 key[1] = 0xFF;
587 key[2] = 0xFF;
588 key[3] = 0xFF;
589 key[4] = 0xFF;
590 key[5] = 0xFF;
591 res = mifare_classic_authentication(&gs_handle, id, addr,
593 if (res != 0)
594 {
595 mifare_classic_interface_debug_print("mifare_classic: authentication failed.\n");
596 (void)mifare_classic_deinit(&gs_handle);
597
598 return 1;
599 }
600 mifare_classic_interface_debug_print("mifare_classic: authentication block 3 ok.\n");
601
602 /* get sector permission */
604 0, &block_0_0_4, &block_1_5_9,
605 &block_2_10_14, &block_3_15,
606 &user_data, key_b);
607 if (res != 0)
608 {
609 mifare_classic_interface_debug_print("mifare_classic: get sector permission failed.\n");
610 (void)mifare_classic_deinit(&gs_handle);
611
612 return 1;
613 }
614 mifare_classic_interface_debug_print("mifare_classic: permission block0 block1 block2 block3 0x%02X 0x%02X 0x%02X 0x%02X.\n",
615 block_0_0_4, block_1_5_9, block_2_10_14, block_3_15);
616 mifare_classic_interface_debug_print("mifare_classic: user data is 0x%02X.\n", user_data);
617 mifare_classic_interface_debug_print("mifare_classic: keyb is 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X.\n",
618 key_b[0], key_b[1], key_b[2], key_b[3], key_b[4], key_b[5]);
619
620 /* set sector permission */
621 res = mifare_classic_set_sector_permission(&gs_handle, 0, key, 0x0, 0x0, 0x0, 0x1, 0x00, key);
622 if (res != 0)
623 {
624 mifare_classic_interface_debug_print("mifare_classic: set sector permission failed.\n");
625 (void)mifare_classic_deinit(&gs_handle);
626
627 return 1;
628 }
629
630 /* halt */
631 res = mifare_classic_halt(&gs_handle);
632 if (res != 0)
633 {
634 mifare_classic_interface_debug_print("mifare_classic: halt failed.\n");
635 (void)mifare_classic_deinit(&gs_handle);
636
637 return 1;
638 }
639
640 /* finish register */
641 mifare_classic_interface_debug_print("mifare_classic: finish card test.\n");
642 (void)mifare_classic_deinit(&gs_handle);
643
644 return 0;
645}
driver mifare classic card test header file
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_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_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_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
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
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_TYPE_S50
@ MIFARE_CLASSIC_TYPE_S70
@ MIFARE_CLASSIC_AUTHENTICATION_KEY_A
uint8_t mifare_classic_interface_contactless_transceiver(uint8_t *in_buf, uint8_t in_len, uint8_t *out_buf, uint8_t *out_len)
interface contactless transceiver
uint8_t mifare_classic_interface_contactless_deinit(void)
interface contactless deinit
void mifare_classic_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mifare_classic_interface_contactless_init(void)
interface contactless init
void mifare_classic_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mifare_classic_card_test(void)
card test