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