forked from Sucareto/Arduino-Aime-Reader
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTest_Reader.h
More file actions
135 lines (131 loc) · 4.49 KB
/
Test_Reader.h
File metadata and controls
135 lines (131 loc) · 4.49 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
uint8_t IDm[8];
uint8_t PMm[8];
uint16_t SystemCode;
const uint16_t blockList[4] = {0x8082,0x8086,0x8090,0x8091};
const uint16_t serviceCodeList[1] = {0x000b};
uint8_t block[16];
extern uint8_t switch_flag;
void Test_Reader_Loop()
{
LED_show(255,255,0);
uint8_t cmd_switch = 0;
while(SerialDevice.available()){
uint8_t c = SerialDevice.read();
if(c == 0xaf){
cmd_switch++;
}else{
cmd_switch=0;
}
if(cmd_switch == 30){
system_mode = 0;
switch_flag = 1;
return;
}
}
uint8_t uid[4], uL;
if(Nesica_Read(&nesica_card_buffer)){
SerialDevice.println("Nesica card!");
SerialDevice.print("Card Serial:");
SerialDevice.print((char*)nesica_card_buffer.card_serial);
delay(1000);
return;
}else if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL) && nfc.mifareclassic_AuthenticateBlock(uid, uL, 1, 1, AimeKey)) {
SerialDevice.println("Aime card!");
SerialDevice.print("UID Value:");
nfc.PrintHex(uid, uL);
SerialDevice.print("Block 2 Data:");
if (nfc.mifareclassic_ReadDataBlock(2, block)) {
nfc.PrintHex(block, 16);
}
delay(1000);
return;
}
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL) && nfc.mifareclassic_AuthenticateBlock(uid, uL, 1, 0, BanaKey)) {
SerialDevice.println("Banapassport card!");
SerialDevice.print("UID Value:");
nfc.PrintHex(uid, uL);
uint8_t block[16];
SerialDevice.print("Block 0 Data:");
if (nfc.mifareclassic_ReadDataBlock(0, block)) {
nfc.PrintHex(block, 16);
}
SerialDevice.print("Block 1 Data:");
if (nfc.mifareclassic_ReadDataBlock(1, block)) {
nfc.PrintHex(block, 16);
}
SerialDevice.print("Block 2 Data:");
if (nfc.mifareclassic_ReadDataBlock(2, block)) {
nfc.PrintHex(block, 16);
}
SerialDevice.print("Block 3 Data:");
if (nfc.mifareclassic_ReadDataBlock(3, block)) {
nfc.PrintHex(block, 16);
}
delay(1000);
return;
}
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL) && nfc.mifareclassic_AuthenticateBlock(uid, uL, 1, 0, MifareKey)) {
SerialDevice.println("Default Key Mifare!");
SerialDevice.print("UID Value:");
nfc.PrintHex(uid, uL);
// SerialDevice.print("Block 2 Data:");
// if (nfc.mifareclassic_ReadDataBlock(2, card.block)) {
// nfc.PrintHex(card.block, 16);
// }
delay(1000);
return;
}
// if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL)) {
// SerialDevice.println("Unknown key Mifare.");
// SerialDevice.print("UID Value:");
// nfc.PrintHex(uid, uL);
// delay(1000);
// return;
// }
uint16_t SystemCode;
if (nfc.felica_Polling(0xFFFF, 0x01, IDm, PMm, &SystemCode, 200) == 1) {
SerialDevice.println("FeliCa card!");
SerialDevice.print("IDm:");
nfc.PrintHex(IDm, 8);
SerialDevice.print("PMm:");
nfc.PrintHex(PMm, 8);
uint8_t sc[2];
SerialDevice.print("SystemCode:");
uint8_t systemCodeBytes[2] = { (uint8_t)(SystemCode >> 8), (uint8_t)(SystemCode & 0xFF) };
nfc.PrintHex(systemCodeBytes, 2);
/*----身份验证--------*/
uint8_t write_data[16];
for(uint8_t i=0;i<16;i++){
write_data[i] = i;
}
Serial.println("RC Write to FeliCa Block 8080:");
nfc.PrintHex(write_data, 16);
uint16_t serviceCodeList1 = 0x0009;
uint16_t blocklist1 = 0x8080;
nfc.felica_WriteWithoutEncryption(1, &serviceCodeList1, 1, &blocklist1, &write_data);
uint8_t blockData_[4][16];
nfc.felica_ReadWithoutEncryption(1, serviceCodeList,4, blockList, blockData_);
blocklist1 = 0x8092;
uint8_t mac_data[16] = {0xC9,0x93,0x0B,0x8F,0x0F,0x41,0x36,0x69 ,00 ,00 ,00 ,00 ,00 ,00 ,00 ,00};
nfc.felica_WriteWithoutEncryption(1, &serviceCodeList1, 1, &blocklist1, &mac_data);
/*----身份验证--------*/
uint16_t blockList_sp[4] = {0x8001,0x8002,0x8003,0x8004};
uint8_t blockData_sp[4][16];
int8_t result = nfc.felica_ReadWithoutEncryption(1, serviceCodeList,4, blockList_sp, blockData_sp);
Serial.println("FeliCa Block:");
for (uint8_t i = 0; i < sizeof(blockList_sp)/2; i++) {
if (result == 1) {
Serial.println(blockList_sp[i], HEX);
nfc.PrintHex(blockData_sp[i], 16);
} else{
Serial.println(blockList_sp[i], HEX);
Serial.print("error!");
Serial.println(result, HEX);
}
}
delay(1000);
return;
}
SerialDevice.println("Didn't find card");
delay(1000);
}