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