a4af557c021f9212b7b553c917ad9f348add6529
[librfid] / include / librfid / rfid_layer2_iso14443a.h
1 #ifndef _RFID_ISO14443A_H
2 #define _RFID_ISO14443A_H
3
4 enum rfid_14443a_opt {
5         RFID_OPT_14443A_SPEED_RX        = 0x00010001,
6         RFID_OPT_14443A_SPEED_TX        = 0x00010002,
7         RFID_OPT_14443A_ATQA            = 0x00010003,
8         RFID_OPT_14443A_WUPA            = 0x00010004,
9 };
10
11 enum rfid_14443_opt_speed {
12         RFID_14443A_SPEED_106K  = 0x01,
13         RFID_14443A_SPEED_212K  = 0x02,
14         RFID_14443A_SPEED_424K  = 0x04,
15         RFID_14443A_SPEED_848K  = 0x08,
16 };
17
18 #ifdef __LIBRFID__
19
20 #include <sys/types.h>
21
22 /* protocol definitions */
23
24 /* ISO 14443-3, Chapter 6.3.1 */
25 enum iso14443a_sf_cmd {
26         ISO14443A_SF_CMD_REQA           = 0x26,
27         ISO14443A_SF_CMD_WUPA           = 0x52,
28         ISO14443A_SF_CMD_OPT_TIMESLOT   = 0x35,         /* Annex C */
29         /* 40 to 4f and 78 to 7f: proprietary */
30 };
31
32 struct iso14443a_atqa {
33 #ifndef RFID_BIG_ENDIAN_BITFIELD
34         u_int8_t bf_anticol:5,
35                  rfu1:1,
36                  uid_size:2;
37         u_int8_t proprietary:4,
38                  rfu2:4;
39 #else
40         u_int8_t uid_size:2,
41                  rfu1:1,
42                  bf_anticol:5;
43         u_int8_t rfu2:4,
44                  proprietary:4;
45 #endif
46 } __attribute__((packed));
47
48 #define ISO14443A_HLTA          0x5000
49
50 /* ISO 14443-3, Chapter 6.3.2 */
51 struct iso14443a_anticol_cmd {
52         unsigned char           sel_code;
53         unsigned char           nvb;
54         unsigned char           uid_bits[5];
55 } __attribute__((packed));
56
57 enum iso14443a_anticol_sel_code {
58         ISO14443A_AC_SEL_CODE_CL1       = 0x93,
59         ISO14443A_AC_SEL_CODE_CL2       = 0x95,
60         ISO14443A_AC_SEL_CODE_CL3       = 0x97,
61 };
62
63 #define ISO14443A_BITOFCOL_NONE         0xffffffff
64
65 struct iso14443a_handle {
66         unsigned int state;
67         unsigned int level;
68         unsigned int tcl_capable;
69         struct iso14443a_atqa atqa;
70 };
71
72 enum iso14443a_level {
73         ISO14443A_LEVEL_NONE,
74         ISO14443A_LEVEL_CL1,
75         ISO14443A_LEVEL_CL2,
76         ISO14443A_LEVEL_CL3,
77 };
78
79 enum iso14443a_state {
80         ISO14443A_STATE_ERROR,
81         ISO14443A_STATE_NONE,
82         ISO14443A_STATE_REQA_SENT,
83         ISO14443A_STATE_ATQA_RCVD,
84         ISO14443A_STATE_NO_BITFRAME_ANTICOL,
85         ISO14443A_STATE_ANTICOL_RUNNING,
86         ISO14443A_STATE_SELECTED,
87 };
88
89 /* Section 6.1.2 values in usec, rounded up to next usec */
90 #define ISO14443A_FDT_ANTICOL_LAST1     92      /* 1236 / fc = 91.15 usec */
91 #define ISO14443A_FDT_ANTICOL_LAST0     87      /* 1172 / fc = 86.43 usec */
92
93 #define ISO14443_CARRIER_FREQ   13560000
94 #define ISO14443A_FDT_OTHER_LAST1(n)    (((n*128+84)*1000000)/ISO14443_CARRIER_FREQ)
95
96
97 #include <librfid/rfid_layer2.h>
98 extern const struct rfid_layer2 rfid_layer2_iso14443a;
99
100 #endif /* __LIBRFID__ */
101
102
103 #endif /* _ISO14443A_H */