11 #include "../Common.h"
13 #define ISO15693_CMD_INVENTORY 0x01
14 #define ISO15693_CMD_STAY_QUIET 0x02
15 #define ISO15693_CMD_READ_SINGLE 0x20
16 #define ISO15693_CMD_WRITE_SINGLE 0x21
17 #define ISO15693_CMD_LOCK_BLOCK 0x22
18 #define ISO15693_CMD_READ_MULTIPLE 0x23
19 #define ISO15693_CMD_WRITE_MULTIPLE 0x24
20 #define ISO15693_CMD_SELECT 0x25
21 #define ISO15693_CMD_RESET_TO_READY 0x26
22 #define ISO15693_CMD_WRITE_AFI 0x27
23 #define ISO15693_CMD_LOCK_AFI 0x28
24 #define ISO15693_CMD_WRITE_DSFID 0x29
25 #define ISO15693_CMD_LOCK_DSFID 0x2A
26 #define ISO15693_CMD_GET_SYS_INFO 0x2B
27 #define ISO15693_CMD_GET_BLOCK_SEC 0x2C
29 #define ISO15693_REQ_FLAG_SUBCARRIER 0x01
30 #define ISO15693_REQ_FLAG_DATARATE 0x02
31 #define ISO15693_REQ_FLAG_INVENTORY 0x04
32 #define ISO15693_REQ_FLAG_PROT_EXT 0x08
33 #define ISO15693_REQ_FLAG_OPTION 0x40
34 #define ISO15693_REQ_FLAG_RFU 0x80
36 #define ISO15693_REQ_FLAG_SELECT 0x10
37 #define ISO15693_REQ_FLAG_ADDRESS 0x20
39 #define ISO15693_REQ_FLAG_AFI 0x10
40 #define ISO15693_REQ_FLAG_NB_SLOTS 0x20
42 #define ISO15693_RES_FLAG_ERROR 0x01
43 #define ISO15693_RES_FLAG_PROT_EXT 0x08
45 #define ISO15693_CRC_SIZE 2
47 typedef uint8_t ISO15693UidType[8];
49 void ISO15693AppendCRC(
void* Buffer, uint16_t ByteCount);
50 bool ISO15693CheckCRC(
void* Buffer, uint16_t ByteCount);
53 bool ISO15693CompareUid(uint8_t* Uid1, uint8_t* Uid2)
55 if ( (Uid1[0] == Uid2[0])
56 && (Uid1[1] == Uid2[1])
57 && (Uid1[2] == Uid2[2])
58 && (Uid1[3] == Uid2[3])
59 && (Uid1[4] == Uid2[4])
60 && (Uid1[5] == Uid2[5])
61 && (Uid1[6] == Uid2[6])
62 && (Uid1[7] == Uid2[7]) ) {
70 void ISO15693CopyUid(uint8_t* DstUid, uint8_t* SrcUid)
72 DstUid[0] = SrcUid[0];
73 DstUid[1] = SrcUid[1];
74 DstUid[2] = SrcUid[2];
75 DstUid[3] = SrcUid[3];
76 DstUid[4] = SrcUid[4];
77 DstUid[5] = SrcUid[5];
78 DstUid[6] = SrcUid[6];
79 DstUid[7] = SrcUid[7];
83 bool ISO15693Addressed(uint8_t* Buffer, uint8_t* MyUid) {
84 if (Buffer[0] & ISO15693_REQ_FLAG_ADDRESS) {
86 if ( ISO15693CompareUid(&Buffer[2], MyUid) ) {