Skip to content

Commit f91ff7c

Browse files
committed
Recup ATR stable
1 parent 90a5fbf commit f91ff7c

File tree

1 file changed

+83
-9
lines changed

1 file changed

+83
-9
lines changed

essai_1/essai_1.ino

Lines changed: 83 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,36 @@
1010
#define PRES 5
1111

1212
// création d'un objet Software Serial
13-
SoftwareSerial serialCard (RX, TX);
13+
SoftwareSerial serialCard (RX, TX, false);
14+
1415

1516
//Variable de détection de la présence de la carte
1617
bool isntCardPresente = digitalRead(PRES); // carte présente = 0 & carte absente = 1
1718

1819

20+
String transmitAPDU_T0(String apdu) {
21+
22+
String sub;
23+
char buf[3];
24+
25+
serialCard.stopListening();
26+
27+
for(int i = 0; i < apdu.length()+1; i += 2){
28+
sub = apdu.substring(i, i+2);
29+
sub.toCharArray(buf, 3);
30+
byte b = (byte)strtol(buf, 0, 16);
31+
serialCard.write(b);
32+
}
33+
serialCard.listen();
34+
String response1 = read_response();
35+
36+
return response1;
37+
38+
39+
}
40+
41+
42+
1943

2044
String read_response() {
2145
String result = "";
@@ -28,32 +52,40 @@ String read_response() {
2852
byte c = serialCard.read();
2953
if(c < 0x10) result += '0';
3054
result += String(c, HEX) + ' ';
31-
//Serial.println(String(c));
3255
}
3356
}
3457

35-
//pinMode(RX, OUTPUT);
36-
if(result.length() < 2)
58+
//pinMode(TX, OUTPUT);
59+
if(result.length() < 2) {
3760
Serial.println("No responses.");
61+
}
62+
3863
return result;
3964

4065
}
4166

4267

68+
69+
4370
void card_activate () {
4471
digitalWrite(VCC, HIGH);
4572
pinMode(CLK, OUTPUT);
73+
pinMode(RX, INPUT_PULLUP);
74+
pinMode(TX, INPUT_PULLUP);
4675
delay(1);
4776
digitalWrite(RST, HIGH);
77+
serialCard.stopListening();
4878
serialCard.listen();
4979
while(!serialCard.isListening());
80+
Serial.println("Card Activate");
5081
}
5182

5283
void card_desactivate() {
5384
digitalWrite(VCC, LOW);
5485
digitalWrite(RST, LOW);
5586
pinMode(CLK, INPUT);
5687
serialCard.stopListening();
88+
5789

5890
}
5991

@@ -74,11 +106,15 @@ void setup() {
74106
pinMode(PRES, INPUT_PULLUP);
75107
pinMode(VCC, OUTPUT);
76108
pinMode(RST, OUTPUT);
109+
digitalWrite(VCC, LOW);
110+
digitalWrite(RST, LOW);
77111

78112
//Ouverture liaisons séries
79113
Serial.begin(9600);
80114
while (!Serial);
81115
serialCard.begin(10753);
116+
while (!serialCard);
117+
82118
Serial.println("Prêt");
83119

84120

@@ -96,12 +132,50 @@ void loop() {
96132
};
97133

98134
// on sort de la boucle donc une carte est présente
99-
Serial.println("Carte présente");
100-
if (serialCard.overflow()) {
101-
Serial.println("portOne overflow!");
102-
}
135+
//Serial.println("Carte présente");
136+
//if (serialCard.overflow()) {
137+
// Serial.println("portOne overflow!");
138+
// }
139+
//delay(1000);
140+
//card_desactivate();
141+
//delay(1000);
103142
card_activate ();
104-
Serial.print(read_response());
143+
144+
145+
String ATR = read_response();
146+
Serial.println("ATR = " + ATR);
147+
148+
String _atr = ATR;
149+
_atr.replace(" ","");
150+
Serial.println("_atr = " + _atr);
151+
String ts = _atr.substring(0, 2);
152+
String t0 = _atr.substring(2, 4);
153+
String ta1 = _atr.substring(4, 6);
154+
Serial.println("ts = " + ts);
155+
Serial.println("t0 = " + t0);
156+
Serial.println("ta1 = " + ta1);
157+
158+
// convertion en binaire
159+
byte buffer[t0.length()+1];
160+
t0.toCharArray(buffer, t0.length()+1);
161+
byte _t0 = (byte)strtol(buffer, 0, 16);
162+
Serial.println(_t0, BIN);
163+
164+
//TA1 exist ?
165+
if((_t0 & 0x80)) {
166+
Serial.println("Présence de TA1");
167+
}
168+
169+
/*
170+
serialCard.begin(125000);
171+
String GO_TO_DF = "00 A4 04 0C 06 FF 54 41 43";
172+
String EF_ICC = "00 02";
173+
String mess_apdu = GO_TO_DF + " " + EF_ICC ;
174+
//mess_apdu = mess_apdu.replace(" ","");
175+
Serial.println(mess_apdu);
176+
String result = "";
177+
result = transmitAPDU_T0(mess_apdu);
178+
*/
105179

106180
while (!isntCardPresente) {
107181
isntCardPresente = digitalRead(PRES);

0 commit comments

Comments
 (0)