9455b51c |
1 | // ISO15693 commons |
0546b4aa |
2 | // Adrian Dabrowski 2010 and others, GPLv2 |
9455b51c |
3 | |
4 | #ifndef ISO15693_H__ |
5 | #define ISO15693_H__ |
6 | |
7 | // ISO15693 CRC |
8 | #define ISO15_CRC_PRESET (uint16_t)0xFFFF |
9 | #define ISO15_CRC_POLY (uint16_t)0x8408 |
10 | #define ISO15_CRC_CHECK ((uint16_t)(~0xF0B8 & 0xFFFF)) // use this for checking of a correct crc |
11 | |
12 | // REQUEST FLAGS |
13 | |
14 | #define ISO15_REQ_SUBCARRIER_SINGLE 0x00 // Tag should respond using one subcarrier (ASK) |
15 | #define ISO15_REQ_SUBCARRIER_TWO 0x01 // Tag should respond using two subcarriers (FSK) |
16 | #define ISO15_REQ_DATARATE_LOW 0x00 // Tag should respond using low data rate |
17 | #define ISO15_REQ_DATARATE_HIGH 0x02 // Tag should respond using high data rate |
18 | #define ISO15_REQ_NONINVENTORY 0x00 |
19 | #define ISO15_REQ_INVENTORY 0x04 // This is an inventory request - see inventory flags |
20 | #define ISO15_REQ_PROTOCOL_NONEXT 0x00 |
21 | #define ISO15_REQ_PROTOCOL_EXT 0x08 // RFU |
22 | |
23 | // REQUEST FLAGS when INVENTORY is not set |
24 | |
25 | #define ISO15_REQ_SELECT 0x10 // only selected cards response |
26 | #define ISO15_REQ_ADDRESS 0x20 // this req contains an address |
27 | #define ISO15_REQ_OPTION 0x40 // Command specific option selector |
28 | |
29 | //REQUEST FLAGS when INVENTORY is set |
30 | |
31 | #define ISO15_REQINV_AFI 0x10 // AFI Field is present |
32 | #define ISO15_REQINV_SLOT1 0x20 // 1 Slot |
33 | #define ISO15_REQINV_SLOT16 0x00 // 16 Slots |
34 | #define ISO15_REQINV_OPTION 0x40 // Command specific option selector |
35 | |
36 | //RESPONSE FLAGS |
37 | #define ISO15_RES_ERROR 0x01 |
38 | #define ISO15_RES_EXT 0x08 // Protocol Extention |
39 | |
40 | // RESPONSE ERROR CODES |
41 | #define ISO15_NOERROR 0x00 |
42 | #define ISO15_ERROR_CMD_NOT_SUP 0x01 // Command not supported |
43 | #define ISO15_ERROR_CMD_NOT_REC 0x02 // Command not recognized (eg. parameter error) |
44 | #define ISO15_ERROR_CMD_OPTION 0x03 // Command option not supported |
45 | #define ISO15_ERROR_GENERIC 0x0F // No additional Info about this error |
46 | #define ISO15_ERROR_BLOCK_UNAVAILABLE 0x10 |
47 | #define ISO15_ERROR_BLOCK_LOCKED_ALREADY 0x11 // cannot lock again |
48 | #define ISO15_ERROR_BLOCK_LOCKED 0x12 // cannot be changed |
49 | #define ISO15_ERROR_BLOCK_WRITE 0x13 // Writing was unsuccessful |
50 | #define ISO15_ERROR_BLOCL_WRITELOCK 0x14 // Locking was unsuccessful |
51 | |
52 | // COMMAND CODES |
53 | #define ISO15_CMD_INVENTORY 0x01 |
54 | #define ISO15_CMD_STAYQUIET 0x02 |
55 | #define ISO15_CMD_READ 0x20 |
56 | #define ISO15_CMD_WRITE 0x21 |
57 | #define ISO15_CMD_LOCK 0x22 |
58 | #define ISO15_CMD_READMULTI 0x23 |
59 | #define ISO15_CMD_WRITEMULTI 0x24 |
60 | #define ISO15_CMD_SELECT 0x25 |
61 | #define ISO15_CMD_RESET 0x26 |
62 | #define ISO15_CMD_WRITEAFI 0x27 |
63 | #define ISO15_CMD_LOCKAFI 0x28 |
64 | #define ISO15_CMD_WRITEDSFID 0x29 |
65 | #define ISO15_CMD_LOCKDSFID 0x2A |
66 | #define ISO15_CMD_SYSINFO 0x2B |
67 | #define ISO15_CMD_SECSTATUS 0x2C |
68 | |
69 | |
70 | uint16_t Iso15693Crc(uint8_t *v, int n); |
71 | int Iso15693AddCrc(uint8_t *req, int n); |
72 | char* Iso15693sprintUID(char *target,uint8_t *uid); |
73 | |
74 | //----------------------------------------------------------------------------- |
75 | // Map a sequence of octets (~layer 2 command) into the set of bits to feed |
76 | // to the FPGA, to transmit that command to the tag. |
77 | // Mode: highspeed && one subcarrier (ASK) |
78 | //----------------------------------------------------------------------------- |
79 | |
80 | // The sampling rate is 106.353 ksps/s, for T = 18.8 us |
81 | |
82 | // SOF defined as |
83 | // 1) Unmodulated time of 56.64us |
84 | // 2) 24 pulses of 423.75khz |
85 | // 3) logic '1' (unmodulated for 18.88us followed by 8 pulses of 423.75khz) |
86 | |
87 | static const int Iso15693FrameSOF[] = { |
88 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
89 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
90 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
91 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
92 | -1, -1, -1, -1, |
93 | -1, -1, -1, -1, |
94 | 1, 1, 1, 1, |
95 | 1, 1, 1, 1 |
96 | }; |
97 | static const int Iso15693Logic0[] = { |
98 | 1, 1, 1, 1, |
99 | 1, 1, 1, 1, |
100 | -1, -1, -1, -1, |
101 | -1, -1, -1, -1 |
102 | }; |
103 | static const int Iso15693Logic1[] = { |
104 | -1, -1, -1, -1, |
105 | -1, -1, -1, -1, |
106 | 1, 1, 1, 1, |
107 | 1, 1, 1, 1 |
108 | }; |
109 | |
110 | // EOF defined as |
111 | // 1) logic '0' (8 pulses of 423.75khz followed by unmodulated for 18.88us) |
112 | // 2) 24 pulses of 423.75khz |
113 | // 3) Unmodulated time of 56.64us |
114 | |
115 | static const int Iso15693FrameEOF[] = { |
116 | 1, 1, 1, 1, |
117 | 1, 1, 1, 1, |
118 | -1, -1, -1, -1, |
119 | -1, -1, -1, -1, |
120 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
121 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
122 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
123 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 |
124 | }; |
125 | |
126 | |
127 | #endif |