freefare_sys/
lib.rs

1#![allow(dead_code, non_camel_case_types, non_upper_case_globals, non_snake_case)]
2
3extern crate libc;
4extern crate nfc_sys;
5
6use libc::{off_t, size_t, ssize_t};
7
8use nfc_sys::{nfc_device, nfc_target, nfc_iso14443a_info};
9
10#[derive(Copy, Clone)]
11#[repr(u32)]
12pub enum Enum_freefare_tag_type {
13    FELICA = 0,
14    MIFARE_CLASSIC_1K = 1,
15    MIFARE_CLASSIC_4K = 2,
16    MIFARE_DESFIRE = 3,
17    MIFARE_ULTRALIGHT = 4,
18    MIFARE_ULTRALIGHT_C = 5,
19}
20pub enum Struct_freefare_tag {
21}
22pub type FreefareTag = *mut Struct_freefare_tag;
23pub type MifareTag = *mut Struct_freefare_tag;
24pub enum Struct_mifare_desfire_key {
25}
26pub type MifareDESFireKey = *mut Struct_mifare_desfire_key;
27pub type MifareUltralightPageNumber = u8;
28pub type MifareUltralightPage = [::std::os::raw::c_uchar; 4usize];
29pub type MifareClassicBlock = [::std::os::raw::c_uchar; 16usize];
30pub type MifareClassicSectorNumber = u8;
31pub type MifareClassicBlockNumber = ::std::os::raw::c_uchar;
32#[derive(Copy, Clone)]
33#[repr(u32)]
34pub enum Enum_Unnamed1 {
35    MFC_KEY_A = 0,
36    MFC_KEY_B = 1,
37}
38pub type MifareClassicKeyType = Enum_Unnamed1;
39pub type MifareClassicKey = [::std::os::raw::c_uchar; 6usize];
40#[repr(C)]
41#[derive(Copy, Clone)]
42pub struct Struct_mad_aid {
43    pub application_code: u8,
44    pub function_cluster_code: u8,
45}
46impl ::std::default::Default for Struct_mad_aid {
47    fn default() -> Self {
48        unsafe { ::std::mem::zeroed() }
49    }
50}
51pub type MadAid = Struct_mad_aid;
52pub enum Struct_mad {
53}
54pub type Mad = *mut Struct_mad;
55#[derive(Copy, Clone)]
56#[repr(u32)]
57pub enum Enum_mifare_desfire_file_types {
58    MDFT_STANDARD_DATA_FILE = 0,
59    MDFT_BACKUP_DATA_FILE = 1,
60    MDFT_VALUE_FILE_WITH_BACKUP = 2,
61    MDFT_LINEAR_RECORD_FILE_WITH_BACKUP = 3,
62    MDFT_CYCLIC_RECORD_FILE_WITH_BACKUP = 4,
63}
64pub enum Struct_mifare_desfire_aid {
65}
66pub type MifareDESFireAID = *mut Struct_mifare_desfire_aid;
67#[repr(C)]
68#[derive(Copy, Clone)]
69pub struct Struct_mifare_desfire_df {
70    pub aid: u32,
71    pub fid: u16,
72    pub df_name: [u8; 16usize],
73    pub df_name_len: size_t,
74}
75impl ::std::default::Default for Struct_mifare_desfire_df {
76    fn default() -> Self {
77        unsafe { ::std::mem::zeroed() }
78    }
79}
80pub type MifareDESFireDF = Struct_mifare_desfire_df;
81#[repr(C)]
82#[derive(Copy, Clone)]
83pub struct Struct_mifare_desfire_version_info {
84    pub hardware: Struct_Unnamed2,
85    pub software: Struct_Unnamed3,
86    pub uid: [u8; 7usize],
87    pub batch_number: [u8; 5usize],
88    pub production_week: u8,
89    pub production_year: u8,
90}
91impl ::std::default::Default for Struct_mifare_desfire_version_info {
92    fn default() -> Self {
93        unsafe { ::std::mem::zeroed() }
94    }
95}
96#[repr(C)]
97#[derive(Copy, Clone)]
98pub struct Struct_Unnamed2 {
99    pub vendor_id: u8,
100    pub _type: u8,
101    pub subtype: u8,
102    pub version_major: u8,
103    pub version_minor: u8,
104    pub storage_size: u8,
105    pub protocol: u8,
106}
107impl ::std::default::Default for Struct_Unnamed2 {
108    fn default() -> Self {
109        unsafe { ::std::mem::zeroed() }
110    }
111}
112#[repr(C)]
113#[derive(Copy, Clone)]
114pub struct Struct_Unnamed3 {
115    pub vendor_id: u8,
116    pub _type: u8,
117    pub subtype: u8,
118    pub version_major: u8,
119    pub version_minor: u8,
120    pub storage_size: u8,
121    pub protocol: u8,
122}
123impl ::std::default::Default for Struct_Unnamed3 {
124    fn default() -> Self {
125        unsafe { ::std::mem::zeroed() }
126    }
127}
128#[repr(C)]
129#[derive(Copy, Clone)]
130pub struct Struct_mifare_desfire_file_settings {
131    pub file_type: u8,
132    pub communication_settings: u8,
133    pub access_rights: u16,
134    pub settings: Union_Unnamed4,
135}
136impl ::std::default::Default for Struct_mifare_desfire_file_settings {
137    fn default() -> Self {
138        unsafe { ::std::mem::zeroed() }
139    }
140}
141#[repr(C)]
142#[derive(Copy, Clone)]
143pub struct Union_Unnamed4 {
144    pub _bindgen_data_: [u32; 4usize],
145}
146impl Union_Unnamed4 {
147    pub unsafe fn standard_file(&mut self) -> *mut Struct_Unnamed5 {
148        let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
149        ::std::mem::transmute(raw.offset(0))
150    }
151    pub unsafe fn value_file(&mut self) -> *mut Struct_Unnamed6 {
152        let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
153        ::std::mem::transmute(raw.offset(0))
154    }
155    pub unsafe fn linear_record_file(&mut self) -> *mut Struct_Unnamed7 {
156        let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
157        ::std::mem::transmute(raw.offset(0))
158    }
159}
160impl ::std::default::Default for Union_Unnamed4 {
161    fn default() -> Self {
162        unsafe { ::std::mem::zeroed() }
163    }
164}
165#[repr(C)]
166#[derive(Copy, Clone)]
167pub struct Struct_Unnamed5 {
168    pub file_size: u32,
169}
170impl ::std::default::Default for Struct_Unnamed5 {
171    fn default() -> Self {
172        unsafe { ::std::mem::zeroed() }
173    }
174}
175#[repr(C)]
176#[derive(Copy, Clone)]
177pub struct Struct_Unnamed6 {
178    pub lower_limit: i32,
179    pub upper_limit: i32,
180    pub limited_credit_value: i32,
181    pub limited_credit_enabled: u8,
182}
183impl ::std::default::Default for Struct_Unnamed6 {
184    fn default() -> Self {
185        unsafe { ::std::mem::zeroed() }
186    }
187}
188#[repr(C)]
189#[derive(Copy, Clone)]
190pub struct Struct_Unnamed7 {
191    pub record_size: u32,
192    pub max_number_of_records: u32,
193    pub current_number_of_records: u32,
194}
195impl ::std::default::Default for Struct_Unnamed7 {
196    fn default() -> Self {
197        unsafe { ::std::mem::zeroed() }
198    }
199}
200#[repr(C)]
201#[derive(Debug, Copy, Clone)]
202pub struct ntag21x_key {
203    _unused: [u8; 0],
204}
205pub type NTAG21xKey = *mut ntag21x_key;
206
207pub const ntag_tag_subtype_NTAG_213: ntag_tag_subtype = 0;
208pub const ntag_tag_subtype_NTAG_215: ntag_tag_subtype = 1;
209pub const ntag_tag_subtype_NTAG_216: ntag_tag_subtype = 2;
210pub type ntag_tag_subtype = u32;
211
212#[link(name = "freefare", kind = "dylib")]
213extern "C" {
214    pub static mifare_classic_nfcforum_public_key_a: MifareClassicKey;
215    pub static mad_public_key_a: MifareClassicKey;
216    pub static mad_free_aid: MadAid;
217    pub static mad_defect_aid: MadAid;
218    pub static mad_reserved_aid: MadAid;
219    pub static mad_card_holder_aid: MadAid;
220    pub static mad_not_applicable_aid: MadAid;
221    pub static mad_nfcforum_aid: MadAid;
222}
223#[link(name = "freefare", kind = "dylib")]
224extern "C" {
225    pub fn freefare_get_tags(device: *mut nfc_device) -> *mut FreefareTag;
226    pub fn freefare_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
227    pub fn freefare_get_tag_type(tag: FreefareTag) -> Enum_freefare_tag_type;
228    pub fn freefare_get_tag_friendly_name(tag: FreefareTag) -> *const ::std::os::raw::c_char;
229    pub fn freefare_get_tag_uid(tag: MifareTag) -> *mut ::std::os::raw::c_char;
230    pub fn freefare_free_tag(tag: FreefareTag);
231    pub fn freefare_free_tags(tags: *mut FreefareTag);
232    pub fn freefare_selected_tag_is_present(device: *mut nfc_device) -> u8;
233    pub fn freefare_strerror(tag: FreefareTag) -> *const ::std::os::raw::c_char;
234    pub fn freefare_strerror_r(
235        tag: FreefareTag,
236        buffer: *mut ::std::os::raw::c_char,
237        len: size_t,
238    ) -> ::std::os::raw::c_int;
239    pub fn freefare_perror(tag: FreefareTag, string: *const ::std::os::raw::c_char);
240    pub fn felica_taste(device: *mut nfc_device, target: nfc_target) -> u8;
241    pub fn felica_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
242    pub fn felica_tag_free(tag: FreefareTag);
243    pub fn felica_read(
244        tag: FreefareTag,
245        service: u16,
246        block: u8,
247        data: *mut u8,
248        length: size_t,
249    ) -> ssize_t;
250    pub fn felica_read_ex(
251        tag: FreefareTag,
252        service: u16,
253        block_count: u8,
254        blocks: *mut u8,
255        data: *mut u8,
256        length: size_t,
257    ) -> ssize_t;
258    pub fn felica_write(
259        tag: FreefareTag,
260        service: u16,
261        block: u8,
262        data: *mut u8,
263        length: size_t,
264    ) -> ssize_t;
265    pub fn felica_write_ex(
266        tag: FreefareTag,
267        service: u16,
268        block_count: u8,
269        blocks: *mut u8,
270        data: *mut u8,
271        length: size_t,
272    ) -> ssize_t;
273    pub fn mifare_ultralight_taste(device: *mut nfc_device, target: nfc_target) -> u8;
274    pub fn mifare_ultralightc_taste(device: *mut nfc_device, target: nfc_target) -> u8;
275    pub fn mifare_ultralight_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
276    pub fn mifare_ultralightc_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
277    pub fn mifare_ultralight_tag_free(tag: FreefareTag);
278    pub fn mifare_ultralightc_tag_free(tag: FreefareTag);
279    pub fn mifare_ultralight_connect(tag: FreefareTag) -> ::std::os::raw::c_int;
280    pub fn mifare_ultralight_disconnect(tag: FreefareTag) -> ::std::os::raw::c_int;
281    pub fn mifare_ultralight_read(
282        tag: FreefareTag,
283        page: MifareUltralightPageNumber,
284        data: *mut MifareUltralightPage,
285    ) -> ::std::os::raw::c_int;
286    
287    pub fn mifare_ultralight_write(
288        tag: FreefareTag,
289        page: MifareUltralightPageNumber,
290        data: *const MifareUltralightPage,
291    ) -> ::std::os::raw::c_int;
292    pub fn mifare_ultralightc_authenticate(
293        tag: FreefareTag,
294        key: MifareDESFireKey,
295    ) -> ::std::os::raw::c_int;
296    pub fn is_mifare_ultralight(tag: FreefareTag) -> u8;
297    pub fn is_mifare_ultralightc(tag: FreefareTag) -> u8;
298    pub fn is_mifare_ultralightc_on_reader(device: *mut nfc_device, nai: nfc_iso14443a_info) -> u8;
299    pub fn mifare_classic1k_taste(device: *mut nfc_device, target: nfc_target) -> u8;
300    pub fn mifare_classic4k_taste(device: *mut nfc_device, target: nfc_target) -> u8;
301    pub fn mifare_classic1k_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
302    pub fn mifare_classic4k_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
303    pub fn mifare_classic_tag_free(tag: FreefareTag);
304    pub fn mifare_classic_connect(tag: FreefareTag) -> ::std::os::raw::c_int;
305    pub fn mifare_classic_disconnect(tag: FreefareTag) -> ::std::os::raw::c_int;
306    pub fn mifare_classic_authenticate(
307        tag: FreefareTag,
308        block: MifareClassicBlockNumber,
309        key: *const MifareClassicKey,
310        key_type: MifareClassicKeyType,
311    ) -> ::std::os::raw::c_int;
312    pub fn mifare_classic_read(
313        tag: FreefareTag,
314        block: MifareClassicBlockNumber,
315        data: *mut MifareClassicBlock,
316    ) -> ::std::os::raw::c_int;
317    pub fn mifare_classic_init_value(
318        tag: FreefareTag,
319        block: MifareClassicBlockNumber,
320        value: i32,
321        adr: MifareClassicBlockNumber,
322    ) -> ::std::os::raw::c_int;
323    pub fn mifare_classic_read_value(
324        tag: FreefareTag,
325        block: MifareClassicBlockNumber,
326        value: *mut i32,
327        adr: *mut MifareClassicBlockNumber,
328    ) -> ::std::os::raw::c_int;
329    pub fn mifare_classic_write(
330        tag: FreefareTag,
331        block: MifareClassicBlockNumber,
332        data: *const MifareClassicBlock,
333    ) -> ::std::os::raw::c_int;
334    pub fn mifare_classic_increment(
335        tag: FreefareTag,
336        block: MifareClassicBlockNumber,
337        amount: u32,
338    ) -> ::std::os::raw::c_int;
339    pub fn mifare_classic_decrement(
340        tag: FreefareTag,
341        block: MifareClassicBlockNumber,
342        amount: u32,
343    ) -> ::std::os::raw::c_int;
344    pub fn mifare_classic_restore(
345        tag: FreefareTag,
346        block: MifareClassicBlockNumber,
347    ) -> ::std::os::raw::c_int;
348    pub fn mifare_classic_transfer(
349        tag: FreefareTag,
350        block: MifareClassicBlockNumber,
351    ) -> ::std::os::raw::c_int;
352    pub fn mifare_classic_get_trailer_block_permission(
353        tag: FreefareTag,
354        block: MifareClassicBlockNumber,
355        permission: u16,
356        key_type: MifareClassicKeyType,
357    ) -> ::std::os::raw::c_int;
358    pub fn mifare_classic_get_data_block_permission(
359        tag: FreefareTag,
360        block: MifareClassicBlockNumber,
361        permission: ::std::os::raw::c_uchar,
362        key_type: MifareClassicKeyType,
363    ) -> ::std::os::raw::c_int;
364    pub fn mifare_classic_format_sector(
365        tag: FreefareTag,
366        sector: MifareClassicSectorNumber,
367    ) -> ::std::os::raw::c_int;
368    pub fn mifare_classic_trailer_block(
369        block: *mut MifareClassicBlock,
370        key_a: *const MifareClassicKey,
371        ab_0: u8,
372        ab_1: u8,
373        ab_2: u8,
374        ab_tb: u8,
375        gpb: u8,
376        key_b: *const MifareClassicKey,
377    );
378    pub fn mifare_classic_block_sector(
379        block: MifareClassicBlockNumber,
380    ) -> MifareClassicSectorNumber;
381    pub fn mifare_classic_sector_first_block(
382        sector: MifareClassicSectorNumber,
383    ) -> MifareClassicBlockNumber;
384    pub fn mifare_classic_sector_block_count(sector: MifareClassicSectorNumber) -> size_t;
385    pub fn mifare_classic_sector_last_block(
386        sector: MifareClassicSectorNumber,
387    ) -> MifareClassicBlockNumber;
388    pub fn mad_new(version: u8) -> Mad;
389    pub fn mad_read(tag: FreefareTag) -> Mad;
390    pub fn mad_write(
391        tag: FreefareTag,
392        mad: Mad,
393        key_b_sector_00: *const MifareClassicKey,
394        key_b_sector_10: *const MifareClassicKey,
395    ) -> ::std::os::raw::c_int;
396    pub fn mad_get_version(mad: Mad) -> ::std::os::raw::c_int;
397    pub fn mad_set_version(mad: Mad, version: u8);
398    pub fn mad_get_card_publisher_sector(mad: Mad) -> MifareClassicSectorNumber;
399    pub fn mad_set_card_publisher_sector(
400        mad: Mad,
401        cps: MifareClassicSectorNumber,
402    ) -> ::std::os::raw::c_int;
403    pub fn mad_get_aid(
404        mad: Mad,
405        sector: MifareClassicSectorNumber,
406        aid: *mut MadAid,
407    ) -> ::std::os::raw::c_int;
408    pub fn mad_set_aid(
409        mad: Mad,
410        sector: MifareClassicSectorNumber,
411        aid: MadAid,
412    ) -> ::std::os::raw::c_int;
413    pub fn mad_sector_reserved(sector: MifareClassicSectorNumber) -> u8;
414    pub fn mad_free(mad: Mad);
415    pub fn mifare_application_alloc(
416        mad: Mad,
417        aid: MadAid,
418        size: size_t,
419    ) -> *mut MifareClassicSectorNumber;
420    pub fn mifare_application_read(
421        tag: FreefareTag,
422        mad: Mad,
423        aid: MadAid,
424        buf: *mut ::std::os::raw::c_void,
425        nbytes: size_t,
426        key: *const MifareClassicKey,
427        key_type: MifareClassicKeyType,
428    ) -> ssize_t;
429    pub fn mifare_application_write(
430        tag: FreefareTag,
431        mad: Mad,
432        aid: MadAid,
433        buf: *const ::std::os::raw::c_void,
434        nbytes: size_t,
435        key: *const MifareClassicKey,
436        key_type: MifareClassicKeyType,
437    ) -> ssize_t;
438    pub fn mifare_application_free(mad: Mad, aid: MadAid) -> ::std::os::raw::c_int;
439    pub fn mifare_application_find(mad: Mad, aid: MadAid) -> *mut MifareClassicSectorNumber;
440    pub fn mifare_desfire_taste(device: *mut nfc_device, target: nfc_target) -> u8;
441    pub fn mifare_desfire_aid_new(aid: u32) -> MifareDESFireAID;
442    pub fn mifare_desfire_aid_new_with_mad_aid(mad_aid: MadAid, n: u8) -> MifareDESFireAID;
443    pub fn mifare_desfire_aid_get_aid(aid: MifareDESFireAID) -> u32;
444    pub fn mifare_desfire_last_pcd_error(tag: FreefareTag) -> u8;
445    pub fn mifare_desfire_last_picc_error(tag: FreefareTag) -> u8;
446    pub fn mifare_desfire_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
447    pub fn mifare_desfire_tag_free(tags: FreefareTag);
448    pub fn mifare_desfire_connect(tag: FreefareTag) -> ::std::os::raw::c_int;
449    pub fn mifare_desfire_disconnect(tag: FreefareTag) -> ::std::os::raw::c_int;
450    pub fn mifare_desfire_authenticate(
451        tag: FreefareTag,
452        key_no: u8,
453        key: MifareDESFireKey,
454    ) -> ::std::os::raw::c_int;
455    pub fn mifare_desfire_authenticate_iso(
456        tag: FreefareTag,
457        key_no: u8,
458        key: MifareDESFireKey,
459    ) -> ::std::os::raw::c_int;
460    pub fn mifare_desfire_authenticate_aes(
461        tag: FreefareTag,
462        key_no: u8,
463        key: MifareDESFireKey,
464    ) -> ::std::os::raw::c_int;
465    pub fn mifare_desfire_change_key_settings(
466        tag: FreefareTag,
467        settings: u8,
468    ) -> ::std::os::raw::c_int;
469    pub fn mifare_desfire_get_key_settings(
470        tag: FreefareTag,
471        settings: *mut u8,
472        max_keys: *mut u8,
473    ) -> ::std::os::raw::c_int;
474    pub fn mifare_desfire_change_key(
475        tag: FreefareTag,
476        key_no: u8,
477        new_key: MifareDESFireKey,
478        old_key: MifareDESFireKey,
479    ) -> ::std::os::raw::c_int;
480    pub fn mifare_desfire_get_key_version(
481        tag: FreefareTag,
482        key_no: u8,
483        version: *mut u8,
484    ) -> ::std::os::raw::c_int;
485    pub fn mifare_desfire_create_application(
486        tag: FreefareTag,
487        aid: MifareDESFireAID,
488        settings: u8,
489        key_no: u8,
490    ) -> ::std::os::raw::c_int;
491    pub fn mifare_desfire_create_application_3k3des(
492        tag: FreefareTag,
493        aid: MifareDESFireAID,
494        settings: u8,
495        key_no: u8,
496    ) -> ::std::os::raw::c_int;
497    pub fn mifare_desfire_create_application_aes(
498        tag: FreefareTag,
499        aid: MifareDESFireAID,
500        settings: u8,
501        key_no: u8,
502    ) -> ::std::os::raw::c_int;
503    pub fn mifare_desfire_create_application_iso(
504        tag: FreefareTag,
505        aid: MifareDESFireAID,
506        settings: u8,
507        key_no: u8,
508        want_iso_file_identifiers: ::std::os::raw::c_int,
509        iso_file_id: u16,
510        iso_file_name: *mut u8,
511        iso_file_name_len: size_t,
512    ) -> ::std::os::raw::c_int;
513    pub fn mifare_desfire_create_application_3k3des_iso(
514        tag: FreefareTag,
515        aid: MifareDESFireAID,
516        settings: u8,
517        key_no: u8,
518        want_iso_file_identifiers: ::std::os::raw::c_int,
519        iso_file_id: u16,
520        iso_file_name: *mut u8,
521        iso_file_name_len: size_t,
522    ) -> ::std::os::raw::c_int;
523    pub fn mifare_desfire_create_application_aes_iso(
524        tag: FreefareTag,
525        aid: MifareDESFireAID,
526        settings: u8,
527        key_no: u8,
528        want_iso_file_identifiers: ::std::os::raw::c_int,
529        iso_file_id: u16,
530        iso_file_name: *mut u8,
531        iso_file_name_len: size_t,
532    ) -> ::std::os::raw::c_int;
533    pub fn mifare_desfire_delete_application(
534        tag: FreefareTag,
535        aid: MifareDESFireAID,
536    ) -> ::std::os::raw::c_int;
537    pub fn mifare_desfire_get_application_ids(
538        tag: FreefareTag,
539        aids: *mut *mut MifareDESFireAID,
540        count: *mut size_t,
541    ) -> ::std::os::raw::c_int;
542    pub fn mifare_desfire_get_df_names(
543        tag: FreefareTag,
544        dfs: *mut *mut MifareDESFireDF,
545        count: *mut size_t,
546    ) -> ::std::os::raw::c_int;
547    pub fn mifare_desfire_free_application_ids(aids: *mut MifareDESFireAID);
548    pub fn mifare_desfire_select_application(
549        tag: FreefareTag,
550        aid: MifareDESFireAID,
551    ) -> ::std::os::raw::c_int;
552    pub fn mifare_desfire_format_picc(tag: FreefareTag) -> ::std::os::raw::c_int;
553    pub fn mifare_desfire_get_version(
554        tag: FreefareTag,
555        version_info: *mut Struct_mifare_desfire_version_info,
556    ) -> ::std::os::raw::c_int;
557    pub fn mifare_desfire_free_mem(tag: FreefareTag, size: *mut u32) -> ::std::os::raw::c_int;
558    pub fn mifare_desfire_set_configuration(
559        tag: FreefareTag,
560        disable_format: u8,
561        enable_random_uid: u8,
562    ) -> ::std::os::raw::c_int;
563    pub fn mifare_desfire_set_default_key(
564        tag: FreefareTag,
565        key: MifareDESFireKey,
566    ) -> ::std::os::raw::c_int;
567    pub fn mifare_desfire_set_ats(tag: FreefareTag, ats: *mut u8) -> ::std::os::raw::c_int;
568    pub fn mifare_desfire_get_card_uid(
569        tag: FreefareTag,
570        uid: *mut *mut ::std::os::raw::c_char,
571    ) -> ::std::os::raw::c_int;
572    pub fn mifare_desfire_get_file_ids(
573        tag: FreefareTag,
574        files: *mut *mut u8,
575        count: *mut size_t,
576    ) -> ::std::os::raw::c_int;
577    pub fn mifare_desfire_get_iso_file_ids(
578        tag: FreefareTag,
579        files: *mut *mut u16,
580        count: *mut size_t,
581    ) -> ::std::os::raw::c_int;
582    pub fn mifare_desfire_get_file_settings(
583        tag: FreefareTag,
584        file_no: u8,
585        settings: *mut Struct_mifare_desfire_file_settings,
586    ) -> ::std::os::raw::c_int;
587    pub fn mifare_desfire_change_file_settings(
588        tag: FreefareTag,
589        file_no: u8,
590        communication_settings: u8,
591        access_rights: u16,
592    ) -> ::std::os::raw::c_int;
593    pub fn mifare_desfire_create_std_data_file(
594        tag: FreefareTag,
595        file_no: u8,
596        communication_settings: u8,
597        access_rights: u16,
598        file_size: u32,
599    ) -> ::std::os::raw::c_int;
600    pub fn mifare_desfire_create_std_data_file_iso(
601        tag: FreefareTag,
602        file_no: u8,
603        communication_settings: u8,
604        access_rights: u16,
605        file_size: u32,
606        iso_file_id: u16,
607    ) -> ::std::os::raw::c_int;
608    pub fn mifare_desfire_create_backup_data_file(
609        tag: FreefareTag,
610        file_no: u8,
611        communication_settings: u8,
612        access_rights: u16,
613        file_size: u32,
614    ) -> ::std::os::raw::c_int;
615    pub fn mifare_desfire_create_backup_data_file_iso(
616        tag: FreefareTag,
617        file_no: u8,
618        communication_settings: u8,
619        access_rights: u16,
620        file_size: u32,
621        iso_file_id: u16,
622    ) -> ::std::os::raw::c_int;
623    pub fn mifare_desfire_create_value_file(
624        tag: FreefareTag,
625        file_no: u8,
626        communication_settings: u8,
627        access_rights: u16,
628        lower_limit: i32,
629        upper_limit: i32,
630        value: i32,
631        limited_credit_enable: u8,
632    ) -> ::std::os::raw::c_int;
633    pub fn mifare_desfire_create_linear_record_file(
634        tag: FreefareTag,
635        file_no: u8,
636        communication_settings: u8,
637        access_rights: u16,
638        record_size: u32,
639        max_number_of_records: u32,
640    ) -> ::std::os::raw::c_int;
641    pub fn mifare_desfire_create_linear_record_file_iso(
642        tag: FreefareTag,
643        file_no: u8,
644        communication_settings: u8,
645        access_rights: u16,
646        record_size: u32,
647        max_number_of_records: u32,
648        iso_file_id: u16,
649    ) -> ::std::os::raw::c_int;
650    pub fn mifare_desfire_create_cyclic_record_file(
651        tag: FreefareTag,
652        file_no: u8,
653        communication_settings: u8,
654        access_rights: u16,
655        record_size: u32,
656        max_number_of_records: u32,
657    ) -> ::std::os::raw::c_int;
658    pub fn mifare_desfire_create_cyclic_record_file_iso(
659        tag: FreefareTag,
660        file_no: u8,
661        communication_settings: u8,
662        access_rights: u16,
663        record_size: u32,
664        max_number_of_records: u32,
665        iso_file_id: u16,
666    ) -> ::std::os::raw::c_int;
667    pub fn mifare_desfire_delete_file(tag: FreefareTag, file_no: u8) -> ::std::os::raw::c_int;
668    pub fn mifare_desfire_read_data(
669        tag: FreefareTag,
670        file_no: u8,
671        offset: off_t,
672        length: size_t,
673        data: *mut ::std::os::raw::c_void,
674    ) -> ssize_t;
675    pub fn mifare_desfire_read_data_ex(
676        tag: FreefareTag,
677        file_no: u8,
678        offset: off_t,
679        length: size_t,
680        data: *mut ::std::os::raw::c_void,
681        cs: ::std::os::raw::c_int,
682    ) -> ssize_t;
683    pub fn mifare_desfire_write_data(
684        tag: FreefareTag,
685        file_no: u8,
686        offset: off_t,
687        length: size_t,
688        data: *const ::std::os::raw::c_void,
689    ) -> ssize_t;
690    pub fn mifare_desfire_write_data_ex(
691        tag: FreefareTag,
692        file_no: u8,
693        offset: off_t,
694        length: size_t,
695        data: *const ::std::os::raw::c_void,
696        cs: ::std::os::raw::c_int,
697    ) -> ssize_t;
698    pub fn mifare_desfire_get_value(
699        tag: FreefareTag,
700        file_no: u8,
701        value: *mut i32,
702    ) -> ::std::os::raw::c_int;
703    pub fn mifare_desfire_get_value_ex(
704        tag: FreefareTag,
705        file_no: u8,
706        value: *mut i32,
707        cs: ::std::os::raw::c_int,
708    ) -> ::std::os::raw::c_int;
709    pub fn mifare_desfire_credit(
710        tag: FreefareTag,
711        file_no: u8,
712        amount: i32,
713    ) -> ::std::os::raw::c_int;
714    pub fn mifare_desfire_credit_ex(
715        tag: FreefareTag,
716        file_no: u8,
717        amount: i32,
718        cs: ::std::os::raw::c_int,
719    ) -> ::std::os::raw::c_int;
720    pub fn mifare_desfire_debit(
721        tag: FreefareTag,
722        file_no: u8,
723        amount: i32,
724    ) -> ::std::os::raw::c_int;
725    pub fn mifare_desfire_debit_ex(
726        tag: FreefareTag,
727        file_no: u8,
728        amount: i32,
729        cs: ::std::os::raw::c_int,
730    ) -> ::std::os::raw::c_int;
731    pub fn mifare_desfire_limited_credit(
732        tag: FreefareTag,
733        file_no: u8,
734        amount: i32,
735    ) -> ::std::os::raw::c_int;
736    pub fn mifare_desfire_limited_credit_ex(
737        tag: FreefareTag,
738        file_no: u8,
739        amount: i32,
740        cs: ::std::os::raw::c_int,
741    ) -> ::std::os::raw::c_int;
742    pub fn mifare_desfire_write_record(
743        tag: FreefareTag,
744        file_no: u8,
745        offset: off_t,
746        length: size_t,
747        data: *mut ::std::os::raw::c_void,
748    ) -> ssize_t;
749    pub fn mifare_desfire_write_record_ex(
750        tag: FreefareTag,
751        file_no: u8,
752        offset: off_t,
753        length: size_t,
754        data: *mut ::std::os::raw::c_void,
755        cs: ::std::os::raw::c_int,
756    ) -> ssize_t;
757    pub fn mifare_desfire_read_records(
758        tag: FreefareTag,
759        file_no: u8,
760        offset: off_t,
761        length: size_t,
762        data: *mut ::std::os::raw::c_void,
763    ) -> ssize_t;
764    pub fn mifare_desfire_read_records_ex(
765        tag: FreefareTag,
766        file_no: u8,
767        offset: off_t,
768        length: size_t,
769        data: *mut ::std::os::raw::c_void,
770        cs: ::std::os::raw::c_int,
771    ) -> ssize_t;
772    pub fn mifare_desfire_clear_record_file(
773        tag: FreefareTag,
774        file_no: u8,
775    ) -> ::std::os::raw::c_int;
776    pub fn mifare_desfire_commit_transaction(tag: FreefareTag) -> ::std::os::raw::c_int;
777    pub fn mifare_desfire_abort_transaction(tag: FreefareTag) -> ::std::os::raw::c_int;
778    pub fn mifare_desfire_des_key_new(value: *mut u8) -> MifareDESFireKey;
779    pub fn mifare_desfire_3des_key_new(value: *mut u8) -> MifareDESFireKey;
780    pub fn mifare_desfire_des_key_new_with_version(value: *mut u8) -> MifareDESFireKey;
781    pub fn mifare_desfire_3des_key_new_with_version(value: *mut u8) -> MifareDESFireKey;
782    pub fn mifare_desfire_3k3des_key_new(value: *mut u8) -> MifareDESFireKey;
783    pub fn mifare_desfire_3k3des_key_new_with_version(value: *mut u8) -> MifareDESFireKey;
784    pub fn mifare_desfire_aes_key_new(value: *mut u8) -> MifareDESFireKey;
785    pub fn mifare_desfire_aes_key_new_with_version(
786        value: *mut u8,
787        version: u8,
788    ) -> MifareDESFireKey;
789    pub fn mifare_desfire_key_get_version(key: MifareDESFireKey) -> u8;
790    pub fn mifare_desfire_key_set_version(key: MifareDESFireKey, version: u8);
791    pub fn mifare_desfire_key_free(key: MifareDESFireKey);
792    pub fn tlv_encode(
793        _type: u8,
794        istream: *const u8,
795        isize: u16,
796        osize: *mut size_t,
797    ) -> *mut u8;
798    pub fn tlv_decode(
799        istream: *const u8,
800        _type: *mut u8,
801        size: *mut u16,
802    ) -> *mut u8;
803    pub fn tlv_record_length(
804        istream: *const u8,
805        field_length_size: *mut size_t,
806        field_value_size: *mut size_t,
807    ) -> size_t;
808    pub fn tlv_append(a: *mut u8, b: *mut u8) -> *mut u8;
809
810    pub fn ntag21x_taste(device: *mut nfc_device, target: nfc_target) -> bool;
811
812    pub fn ntag21x_tag_new(device: *mut nfc_device, target: nfc_target) -> FreefareTag;
813
814    pub fn ntag21x_tag_reuse(tag: FreefareTag) -> FreefareTag;
815
816    pub fn ntag21x_key_new(data: *const u8, pack: *const u8) -> NTAG21xKey;
817
818    pub fn ntag21x_key_free(key: NTAG21xKey);
819
820    pub fn ntag21x_tag_free(tag: FreefareTag);
821
822    pub fn ntag21x_connect(tag: FreefareTag) -> ::std::os::raw::c_int;
823
824    pub fn ntag21x_disconnect(tag: FreefareTag) -> ::std::os::raw::c_int;
825
826    pub fn ntag21x_get_info(tag: FreefareTag) -> ::std::os::raw::c_int;
827
828    pub fn ntag21x_get_subtype(tag: FreefareTag) -> ntag_tag_subtype;
829
830    pub fn ntag21x_get_last_page(tag: FreefareTag) -> u8;
831
832    pub fn ntag21x_read_signature(tag: FreefareTag, data: *mut u8) -> ::std::os::raw::c_int;
833
834    pub fn ntag21x_set_pwd(tag: FreefareTag, data: *mut u8) -> ::std::os::raw::c_int;
835
836    pub fn ntag21x_set_pack(tag: FreefareTag, data: *mut u8) -> ::std::os::raw::c_int;
837
838    pub fn ntag21x_set_key(tag: FreefareTag, key: NTAG21xKey) -> ::std::os::raw::c_int;
839
840    pub fn ntag21x_set_auth(tag: FreefareTag, byte: u8) -> ::std::os::raw::c_int;
841
842    pub fn ntag21x_get_auth(tag: FreefareTag, byte: *mut u8) -> ::std::os::raw::c_int;
843
844    pub fn ntag21x_access_enable(tag: FreefareTag, byte: u8) -> ::std::os::raw::c_int;
845
846    pub fn ntag21x_access_disable(tag: FreefareTag, byte: u8) -> ::std::os::raw::c_int;
847
848    pub fn ntag21x_get_access(tag: FreefareTag, byte: *mut u8) -> ::std::os::raw::c_int;
849
850    pub fn ntag21x_check_access(
851        tag: FreefareTag,
852        byte: u8,
853        result: *mut bool,
854    ) -> ::std::os::raw::c_int;
855
856    pub fn ntag21x_get_authentication_limit(
857        tag: FreefareTag,
858        byte: *mut u8,
859    ) -> ::std::os::raw::c_int;
860
861    pub fn ntag21x_set_authentication_limit(tag: FreefareTag, byte: u8) -> ::std::os::raw::c_int;
862
863    pub fn ntag21x_read(tag: FreefareTag, page: u8, data: *mut u8) -> ::std::os::raw::c_int;
864
865    pub fn ntag21x_read4(tag: FreefareTag, page: u8, data: *mut u8) -> ::std::os::raw::c_int;
866
867    pub fn ntag21x_fast_read(
868        tag: FreefareTag,
869        start_page: u8,
870        end_page: u8,
871        data: *mut u8,
872    ) -> ::std::os::raw::c_int;
873
874    pub fn ntag21x_fast_read4(tag: FreefareTag, page: u8, data: *mut u8) -> ::std::os::raw::c_int;
875
876    pub fn ntag21x_read_cnt(tag: FreefareTag, data: *mut u8) -> ::std::os::raw::c_int;
877
878    pub fn ntag21x_write(tag: FreefareTag, page: u8, data: *mut u8) -> ::std::os::raw::c_int;
879
880    pub fn ntag21x_compatibility_write(
881        tag: FreefareTag,
882        page: u8,
883        data: *mut u8,
884    ) -> ::std::os::raw::c_int;
885
886    pub fn ntag21x_authenticate(tag: FreefareTag, key: NTAG21xKey) -> ::std::os::raw::c_int;
887
888    pub fn is_ntag21x(tag: FreefareTag) -> bool;
889
890    pub fn ntag21x_is_auth_supported(device: *mut nfc_device, nai: nfc_iso14443a_info) -> bool;
891
892}