LibDriver MIFARE_CLASSIC
Loading...
Searching...
No Matches
driver_mifare_classic_basic.c
Go to the documentation of this file.
1
36
38
39static mifare_classic_handle_t gs_handle;
40static uint8_t gs_id[4];
41
47static void s_debug_print(const char *const fmt, ...)
48{
49 (void)fmt;
50
51 return;
52}
53
88
97{
98 uint8_t res;
99
100 /* deinit */
101 res = mifare_classic_deinit(&gs_handle);
102 if (res != 0)
103 {
104 return 1;
105 }
106
107 return 0;
108}
109
118{
119 uint8_t res;
120
121 /* halt */
122 res = mifare_classic_halt(&gs_handle);
123 if (res != 0)
124 {
125 return 1;
126 }
127
128 return 0;
129}
130
139{
140 uint8_t res;
142
143 /* wake up */
144 res = mifare_classic_wake_up(&gs_handle, &type);
145 if (res != 0)
146 {
147 return 1;
148 }
149
150 return 0;
151}
152
163uint8_t mifare_classic_basic_search(mifare_classic_type_t *type, uint8_t id[4], int32_t timeout)
164{
165 uint8_t res;
166
167 /* loop */
168 while (1)
169 {
170 /* request */
171 res = mifare_classic_request(&gs_handle, type);
172 if (res == 0)
173 {
174 /* anti collision_cl1 */
175 res = mifare_classic_anticollision_cl1(&gs_handle, id);
176 if (res == 0)
177 {
178 /* cl1 */
179 res = mifare_classic_select_cl1(&gs_handle, id);
180 if (res == 0)
181 {
182 memcpy(gs_id, id, 4);
183
184 return 0;
185 }
186 }
187 }
188
189 /* delay */
191
192 /* check the timeout */
193 if (timeout < 0)
194 {
195 /* never timeout */
196 continue;
197 }
198 else
199 {
200 /* timeout */
201 if (timeout == 0)
202 {
203 return 1;
204 }
205 else
206 {
207 /* timout-- */
208 timeout--;
209 }
210 }
211 }
212}
213
225uint8_t mifare_classic_basic_read(uint8_t block, uint8_t data[16],
226 mifare_classic_authentication_key_t key_type, uint8_t key[6])
227{
228 uint8_t res;
229 uint8_t sector;
230 uint8_t block_check;
231
232 /* check the block */
233 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
234 if (res != 0)
235 {
236 return 1;
237 }
238 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
239 if (res != 0)
240 {
241 return 1;
242 }
243 if (block == block_check)
244 {
245 return 1;
246 }
247
248 /* authentication */
249 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
250 if (res != 0)
251 {
252 return 1;
253 }
254
255 /* read */
256 res = mifare_classic_read(&gs_handle, block, data);
257 if (res != 0)
258 {
259 return 1;
260 }
261
262 return 0;
263}
264
276uint8_t mifare_classic_basic_write(uint8_t block, uint8_t data[16],
277 mifare_classic_authentication_key_t key_type, uint8_t key[6])
278{
279 uint8_t res;
280 uint8_t sector;
281 uint8_t block_check;
282
283 /* check the block */
284 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
285 if (res != 0)
286 {
287 return 1;
288 }
289 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
290 if (res != 0)
291 {
292 return 1;
293 }
294 if (block == block_check)
295 {
296 return 1;
297 }
298
299 /* authentication */
300 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
301 if (res != 0)
302 {
303 return 1;
304 }
305
306 /* write */
307 res = mifare_classic_write(&gs_handle, block, data);
308 if (res != 0)
309 {
310 return 1;
311 }
312
313 return 0;
314}
315
328uint8_t mifare_classic_basic_value_init(uint8_t block, int32_t value, uint8_t addr,
329 mifare_classic_authentication_key_t key_type, uint8_t key[6])
330{
331 uint8_t res;
332 uint8_t sector;
333 uint8_t block_check;
334
335 /* check the block */
336 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
337 if (res != 0)
338 {
339 return 1;
340 }
341 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
342 if (res != 0)
343 {
344 return 1;
345 }
346 if (block == block_check)
347 {
348 return 1;
349 }
350
351 /* authentication */
352 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
353 if (res != 0)
354 {
355 return 1;
356 }
357
358 /* value init */
359 res = mifare_classic_value_init(&gs_handle, block, value, addr);
360 if (res != 0)
361 {
362 return 1;
363 }
364
365 return 0;
366}
367
380uint8_t mifare_classic_basic_value_write(uint8_t block, int32_t value, uint8_t addr,
381 mifare_classic_authentication_key_t key_type, uint8_t key[6])
382{
383 uint8_t res;
384 uint8_t sector;
385 uint8_t block_check;
386
387 /* check the block */
388 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
389 if (res != 0)
390 {
391 return 1;
392 }
393 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
394 if (res != 0)
395 {
396 return 1;
397 }
398 if (block == block_check)
399 {
400 return 1;
401 }
402
403 /* authentication */
404 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
405 if (res != 0)
406 {
407 return 1;
408 }
409
410 /* value write */
411 res = mifare_classic_value_write(&gs_handle, block, value, addr);
412 if (res != 0)
413 {
414 return 1;
415 }
416
417 return 0;
418}
419
432uint8_t mifare_classic_basic_value_read(uint8_t block, int32_t *value, uint8_t *addr,
433 mifare_classic_authentication_key_t key_type, uint8_t key[6])
434{
435 uint8_t res;
436 uint8_t sector;
437 uint8_t block_check;
438
439 /* check the block */
440 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
441 if (res != 0)
442 {
443 return 1;
444 }
445 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
446 if (res != 0)
447 {
448 return 1;
449 }
450 if (block == block_check)
451 {
452 return 1;
453 }
454
455 /* authentication */
456 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
457 if (res != 0)
458 {
459 return 1;
460 }
461
462 /* value read */
463 res = mifare_classic_value_read(&gs_handle, block, value, addr);
464 if (res != 0)
465 {
466 return 1;
467 }
468
469 return 0;
470}
471
483uint8_t mifare_classic_basic_value_increment(uint8_t block, uint32_t value,
484 mifare_classic_authentication_key_t key_type, uint8_t key[6])
485{
486 uint8_t res;
487 uint8_t sector;
488 uint8_t block_check;
489
490 /* check the block */
491 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
492 if (res != 0)
493 {
494 return 1;
495 }
496 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
497 if (res != 0)
498 {
499 return 1;
500 }
501 if (block == block_check)
502 {
503 return 1;
504 }
505
506 /* authentication */
507 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
508 if (res != 0)
509 {
510 return 1;
511 }
512
513 /* increment */
514 res = mifare_classic_increment(&gs_handle, block, value);
515 if (res != 0)
516 {
517 return 1;
518 }
519 res = mifare_classic_transfer(&gs_handle, block);
520 if (res != 0)
521 {
522 return 1;
523 }
524
525 return 0;
526}
527
539uint8_t mifare_classic_basic_value_decrement(uint8_t block, uint32_t value,
540 mifare_classic_authentication_key_t key_type, uint8_t key[6])
541{
542 uint8_t res;
543 uint8_t sector;
544 uint8_t block_check;
545
546 /* check the block */
547 res = mifare_classic_block_to_sector(&gs_handle, block, &sector);
548 if (res != 0)
549 {
550 return 1;
551 }
552 res = mifare_classic_sector_last_block(&gs_handle, sector, &block_check);
553 if (res != 0)
554 {
555 return 1;
556 }
557 if (block == block_check)
558 {
559 return 1;
560 }
561
562 /* authentication */
563 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
564 if (res != 0)
565 {
566 return 1;
567 }
568
569 /* decrement */
570 res = mifare_classic_decrement(&gs_handle, block, value);
571 if (res != 0)
572 {
573 return 1;
574 }
575 res = mifare_classic_transfer(&gs_handle, block);
576 if (res != 0)
577 {
578 return 1;
579 }
580
581 return 0;
582}
583
622 uint8_t sector, uint8_t key_a[6], uint8_t block_0_0_4, uint8_t block_1_5_9,
623 uint8_t block_2_10_14, uint8_t block_3_15, uint8_t user_data, uint8_t key_b[6])
624{
625 uint8_t res;
626 uint8_t block;
627
628 /* get the last block */
629 res = mifare_classic_sector_last_block(&gs_handle, sector, &block);
630 if (res != 0)
631 {
632 return 1;
633 }
634
635 /* authentication */
636 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
637 if (res != 0)
638 {
639 return 1;
640 }
641
642 /* set sector permission */
643 res = mifare_classic_set_sector_permission(&gs_handle, sector, key_a, block_0_0_4, block_1_5_9,
644 block_2_10_14, block_3_15, user_data, key_b);
645 if (res != 0)
646 {
647 return 1;
648 }
649
650 return 0;
651}
652
670 uint8_t sector, uint8_t *block_0_0_4, uint8_t *block_1_5_9,
671 uint8_t *block_2_10_14, uint8_t *block_3_15, uint8_t *user_data, uint8_t key_b[6])
672{
673 uint8_t res;
674 uint8_t block;
675
676 /* get the last block */
677 res = mifare_classic_sector_last_block(&gs_handle, sector, &block);
678 if (res != 0)
679 {
680 return 1;
681 }
682
683 /* authentication */
684 res = mifare_classic_authentication(&gs_handle, gs_id, block, key_type, key);
685 if (res != 0)
686 {
687 return 1;
688 }
689
690 /* set sector permission */
691 res = mifare_classic_get_sector_permission(&gs_handle, sector, block_0_0_4, block_1_5_9,
692 block_2_10_14, block_3_15, user_data, key_b);
693 if (res != 0)
694 {
695 return 1;
696 }
697
698 return 0;
699}
driver mifare classic basic 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
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_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_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
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_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_init(mifare_classic_handle_t *handle)
initialize the chip
mifare_classic_authentication_key_t
mifare_classic authentication key enumeration definition
uint8_t mifare_classic_basic_value_increment(uint8_t block, uint32_t value, mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example increment value
uint8_t mifare_classic_basic_value_decrement(uint8_t block, uint32_t value, mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example decrement value
uint8_t mifare_classic_basic_value_init(uint8_t block, int32_t value, uint8_t addr, mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example init as a value
uint8_t mifare_classic_basic_search(mifare_classic_type_t *type, uint8_t id[4], int32_t timeout)
basic example search
uint8_t mifare_classic_basic_write(uint8_t block, uint8_t data[16], mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example write
uint8_t mifare_classic_basic_value_read(uint8_t block, int32_t *value, uint8_t *addr, mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example read value
uint8_t mifare_classic_basic_init(void)
basic example init
uint8_t mifare_classic_basic_read(uint8_t block, uint8_t data[16], mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example read
uint8_t mifare_classic_basic_halt(void)
basic example halt
uint8_t mifare_classic_basic_set_permission(mifare_classic_authentication_key_t key_type, uint8_t key[6], 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])
basic example set the sector permission
uint8_t mifare_classic_basic_value_write(uint8_t block, int32_t value, uint8_t addr, mifare_classic_authentication_key_t key_type, uint8_t key[6])
basic example write value
#define MIFARE_CLASSIC_BASIC_DEFAULT_SEARCH_DELAY_MS
mifare classic basic example default definition
uint8_t mifare_classic_basic_get_permission(mifare_classic_authentication_key_t key_type, uint8_t key[6], 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])
basic example get the sector permission
uint8_t mifare_classic_basic_wake_up(void)
basic example wake up
uint8_t mifare_classic_basic_deinit(void)
basic example deinit
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