CardReader_Basico

Dependencies:   mbed CardReader

Committer:
williequesada
Date:
Tue Jun 04 18:10:44 2019 +0000
Revision:
0:fe7857738499
pablo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
williequesada 0:fe7857738499 1 #include "mbed.h"
williequesada 0:fe7857738499 2
williequesada 0:fe7857738499 3 // Conector ZHR-6 de JST http://www.jst.com/
williequesada 0:fe7857738499 4 // _ _ _ _ _ _
williequesada 0:fe7857738499 5 // ! ! ! ! ! ! ! 1->CTS 2->TXD 3->DTR
williequesada 0:fe7857738499 6 // 6 5 4 3 2 1 4->RXD 5->GND 6->PWR
williequesada 0:fe7857738499 7
williequesada 0:fe7857738499 8
williequesada 0:fe7857738499 9 RawSerial Computer(USBTX, USBRX); // tx, rx
williequesada 0:fe7857738499 10 RawSerial CardReader(PC_12,PD_2,9600);
williequesada 0:fe7857738499 11
williequesada 0:fe7857738499 12 const char SOH=1;
williequesada 0:fe7857738499 13 const char EOT=4;
williequesada 0:fe7857738499 14 const char ESP=33;
williequesada 0:fe7857738499 15 const char ADDR=0;
williequesada 0:fe7857738499 16 const char LEN=0;
williequesada 0:fe7857738499 17 const char CARD_POSITION='8';
williequesada 0:fe7857738499 18 const char CARD_LOCK='{';
williequesada 0:fe7857738499 19 const char CARD_UNLOCK='}';
williequesada 0:fe7857738499 20 const char DEV_STATUS='$';
williequesada 0:fe7857738499 21 const char DEV_RESET=127;
williequesada 0:fe7857738499 22 const char ARM_MODE='P';
williequesada 0:fe7857738499 23 const char ARM_DEBUG='p';
williequesada 0:fe7857738499 24 const char ARM_ABORT=27;
williequesada 0:fe7857738499 25 const char SIG_START='?';
williequesada 0:fe7857738499 26 const char FCT_READ='R';
williequesada 0:fe7857738499 27 const char MAG_CUSTOM_T1='U';
williequesada 0:fe7857738499 28 const char MAG_CUSTOM_T2='V';
williequesada 0:fe7857738499 29 const char MAG_CUSTOM_T3='W';
williequesada 0:fe7857738499 30 const char MAG_ISO_T1='Q';
williequesada 0:fe7857738499 31 const char MAG_ISO_T2='R';
williequesada 0:fe7857738499 32 const char MAG_ISO_T3='S';
williequesada 0:fe7857738499 33 const char MAG_CUSTOM_F='4';
williequesada 0:fe7857738499 34 const char BBCA='=';
williequesada 0:fe7857738499 35 const char BBCB='~';
williequesada 0:fe7857738499 36 const char BBCC='x';
williequesada 0:fe7857738499 37 const char BBCD='!';
williequesada 0:fe7857738499 38 const char BBCE='U';
williequesada 0:fe7857738499 39 const char BBCF='u';
williequesada 0:fe7857738499 40 const char BBCG=30;
williequesada 0:fe7857738499 41 const char BBCH='d';
williequesada 0:fe7857738499 42 const char BBCI='z';
williequesada 0:fe7857738499 43 const char BBCJ='T';
williequesada 0:fe7857738499 44 const char BBCK='W';
williequesada 0:fe7857738499 45 const char BBCL='V';
williequesada 0:fe7857738499 46 const char BBCM=10;
williequesada 0:fe7857738499 47 const char R_ACTION='^';
williequesada 0:fe7857738499 48 const char R_ERROR='*';
williequesada 0:fe7857738499 49 const char R_INVALID='!';
williequesada 0:fe7857738499 50 const char R_NO_DATA='+';
williequesada 0:fe7857738499 51 const char R_COMAND_ERROR='?';
williequesada 0:fe7857738499 52 const char R_START=':';
williequesada 0:fe7857738499 53 const char R_POSITION1='q';
williequesada 0:fe7857738499 54 const char R_POSITION2='s';
williequesada 0:fe7857738499 55 const char R_NO_MAG_CARD='>';
williequesada 0:fe7857738499 56 const char R_MAG_DETECT_ON='(';
williequesada 0:fe7857738499 57 const char R_MAG_DETECT_OFF=')';
williequesada 0:fe7857738499 58 char inByte;
williequesada 0:fe7857738499 59 char Comando=' ';
williequesada 0:fe7857738499 60 char command[9];
williequesada 0:fe7857738499 61
williequesada 0:fe7857738499 62 uint8_t rx_buffer[255];
williequesada 0:fe7857738499 63
williequesada 0:fe7857738499 64 int Contador=0;
williequesada 0:fe7857738499 65
williequesada 0:fe7857738499 66 PwmOut led(LED1);
williequesada 0:fe7857738499 67 DigitalOut CardReaderPower(PF_3);
williequesada 0:fe7857738499 68 DigitalOut Max232(PC_8);
williequesada 0:fe7857738499 69
williequesada 0:fe7857738499 70
williequesada 0:fe7857738499 71 void Interrupt_CardReader()
williequesada 0:fe7857738499 72 {
williequesada 0:fe7857738499 73 rx_buffer[Contador]=CardReader.getc();
williequesada 0:fe7857738499 74 Contador++;
williequesada 0:fe7857738499 75 }
williequesada 0:fe7857738499 76
williequesada 0:fe7857738499 77 int main()
williequesada 0:fe7857738499 78 {
williequesada 0:fe7857738499 79 CardReader.attach(&Interrupt_CardReader);
williequesada 0:fe7857738499 80
williequesada 0:fe7857738499 81 Computer.printf("\n--------------------------");
williequesada 0:fe7857738499 82 Computer.printf("\n a--> On");
williequesada 0:fe7857738499 83 Computer.printf("\n A--> Card Position");
williequesada 0:fe7857738499 84 Computer.printf("\n B--> Card Lock");
williequesada 0:fe7857738499 85 Computer.printf("\n C--> Card Unlock");
williequesada 0:fe7857738499 86 Computer.printf("\n D--> Device Status");
williequesada 0:fe7857738499 87 Computer.printf("\n E--> Arm Mode");
williequesada 0:fe7857738499 88 Computer.printf("\n F--> Arm Debug");
williequesada 0:fe7857738499 89 Computer.printf("\n G--> Arm Abort");
williequesada 0:fe7857738499 90 Computer.printf("\n H--> Get Custom");
williequesada 0:fe7857738499 91 Computer.printf("\n I--> Reset");
williequesada 0:fe7857738499 92 Computer.printf("\n J--> Get Iso T1");
williequesada 0:fe7857738499 93 Computer.printf("\n K--> Get Iso T2");
williequesada 0:fe7857738499 94 Computer.printf("\n L--> Get Iso T3");
williequesada 0:fe7857738499 95 Computer.printf("\n--------------------------");
williequesada 0:fe7857738499 96 CardReaderPower=0;
williequesada 0:fe7857738499 97 Max232=0;
williequesada 0:fe7857738499 98
williequesada 0:fe7857738499 99 while(1) {
williequesada 0:fe7857738499 100 if (Computer.readable()) {
williequesada 0:fe7857738499 101 Comando=Computer.getc();
williequesada 0:fe7857738499 102 Contador=0;
williequesada 0:fe7857738499 103 if(Comando=='a') {
williequesada 0:fe7857738499 104 Computer.printf("\n a--> On");
williequesada 0:fe7857738499 105 CardReaderPower=1;
williequesada 0:fe7857738499 106 Max232=1; // 00111101 --> XOR bytes anteriores
williequesada 0:fe7857738499 107 }
williequesada 0:fe7857738499 108 if(Comando=='b') {
williequesada 0:fe7857738499 109 Computer.printf("\n a--> off max");
williequesada 0:fe7857738499 110 Max232=0; // 00111101 --> XOR bytes anteriores
williequesada 0:fe7857738499 111 }
williequesada 0:fe7857738499 112 if(Comando=='c') {
williequesada 0:fe7857738499 113 Computer.printf("\n a--> off card");
williequesada 0:fe7857738499 114 CardReaderPower=0; // 00111101 --> XOR bytes anteriores
williequesada 0:fe7857738499 115 }
williequesada 0:fe7857738499 116 if(Comando=='A') {
williequesada 0:fe7857738499 117 Computer.printf("\n A--> Card Position");// ENVIO S2 S1 S1
williequesada 0:fe7857738499 118 CardReader.putc(SOH); // 00000001 00000001 00000001
williequesada 0:fe7857738499 119 CardReader.putc(ADDR); // 00000000 00000000 00000000
williequesada 0:fe7857738499 120 CardReader.putc(LEN); // 00000000 00000000 00000000
williequesada 0:fe7857738499 121 CardReader.putc(LEN); // 00000000 00000001 00000001
williequesada 0:fe7857738499 122 CardReader.putc(CARD_POSITION); // 00111000 01110011 01110001
williequesada 0:fe7857738499 123 CardReader.putc(EOT); // 00000100 s q
williequesada 0:fe7857738499 124 CardReader.putc(BBCA); // 00111101 01110011 01110001
williequesada 0:fe7857738499 125 }
williequesada 0:fe7857738499 126 if(Comando=='B') {
williequesada 0:fe7857738499 127 Computer.printf("\n B--> Card Lock"); // ENVIO EXITO FALLO
williequesada 0:fe7857738499 128 CardReader.putc(SOH); // 00000001 00000001 00000001
williequesada 0:fe7857738499 129 CardReader.putc(ADDR); // 00000000 00000000 00000000
williequesada 0:fe7857738499 130 CardReader.putc(LEN); // 00000000 00000000 00000000
williequesada 0:fe7857738499 131 CardReader.putc(LEN); // 00000000 00000001 00000001
williequesada 0:fe7857738499 132 CardReader.putc(CARD_LOCK); // 01111011 01011110
williequesada 0:fe7857738499 133 CardReader.putc(EOT); // 00000100 ^
williequesada 0:fe7857738499 134 CardReader.putc(BBCB); // 01111110 01011110
williequesada 0:fe7857738499 135 }
williequesada 0:fe7857738499 136 if(Comando=='C') {
williequesada 0:fe7857738499 137 Computer.printf("\n C--> Card Unlock"); // ENVIO EXITO FALLO
williequesada 0:fe7857738499 138 CardReader.putc(SOH); // 00000001 00000001 00000001
williequesada 0:fe7857738499 139 CardReader.putc(ADDR); // 00000000 00000000 00000000
williequesada 0:fe7857738499 140 CardReader.putc(LEN); // 00000000 00000000 00000000
williequesada 0:fe7857738499 141 CardReader.putc(LEN); // 00000000 00000001 00000001
williequesada 0:fe7857738499 142 CardReader.putc(CARD_UNLOCK); // 01111101 01011110
williequesada 0:fe7857738499 143 CardReader.putc(EOT); // 00000100 ^
williequesada 0:fe7857738499 144 CardReader.putc(BBCC); // 01111000 01011110
williequesada 0:fe7857738499 145 }
williequesada 0:fe7857738499 146 if(Comando=='D') {
williequesada 0:fe7857738499 147 Computer.printf("\n D--> Device Status");// ENVIO
williequesada 0:fe7857738499 148 CardReader.putc(SOH); // 00000001
williequesada 0:fe7857738499 149 CardReader.putc(ADDR); // 00000000
williequesada 0:fe7857738499 150 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 151 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 152 CardReader.putc(DEV_STATUS); // 00100100
williequesada 0:fe7857738499 153 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 154 CardReader.putc(BBCD); // 00100001
williequesada 0:fe7857738499 155 }
williequesada 0:fe7857738499 156 if(Comando=='E') {
williequesada 0:fe7857738499 157 Computer.printf("\n E--> Arm Mode"); // ENVIO ACTIVADO ERROR
williequesada 0:fe7857738499 158 CardReader.putc(SOH); // 00000001 00000001 00000001
williequesada 0:fe7857738499 159 CardReader.putc(ADDR); // 00000000 00000000 00000000
williequesada 0:fe7857738499 160 CardReader.putc(LEN); // 00000000 00000000 00000000
williequesada 0:fe7857738499 161 CardReader.putc(LEN); // 00000000 00000001 00000001
williequesada 0:fe7857738499 162 CardReader.putc(ARM_MODE); // 01010000 01011110 00100001
williequesada 0:fe7857738499 163 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 164 CardReader.putc(BBCE); // 01010101 01011110 00100001
williequesada 0:fe7857738499 165 }
williequesada 0:fe7857738499 166 if(Comando=='F') {
williequesada 0:fe7857738499 167 Computer.printf("\n F--> Arm Debug"); // ENVIO EXITO NO_MAG_C DET_ON DET_OFF
williequesada 0:fe7857738499 168 CardReader.putc(SOH); // 00000001 00000001 00000001 00000001 00000001
williequesada 0:fe7857738499 169 CardReader.putc(ADDR); // 00000000 00000000 00000000 00000000 00000000
williequesada 0:fe7857738499 170 CardReader.putc(LEN); // 00000000 00000000 00000000 00000000 00000000
williequesada 0:fe7857738499 171 CardReader.putc(LEN); // 00000000 00000001 00000001 00000001 00000001
williequesada 0:fe7857738499 172 CardReader.putc(ARM_DEBUG); // 01110000 01011110 00111110 00101000 00101001
williequesada 0:fe7857738499 173 CardReader.putc(EOT); // 00000100 ^ > ( )
williequesada 0:fe7857738499 174 CardReader.putc(BBCF); // 01110101 01011110 00111110 00101000 00101001
williequesada 0:fe7857738499 175 }
williequesada 0:fe7857738499 176 if(Comando=='G') {
williequesada 0:fe7857738499 177 Computer.printf("\n G--> Arm Abort"); // ENVIO EXITO ERROR
williequesada 0:fe7857738499 178 CardReader.putc(SOH); // 00000001 00000001 00000001
williequesada 0:fe7857738499 179 CardReader.putc(ADDR); // 00000000 00000000 00000000
williequesada 0:fe7857738499 180 CardReader.putc(LEN); // 00000000 00000000 00000000
williequesada 0:fe7857738499 181 CardReader.putc(LEN); // 00000000 00000001 00000001
williequesada 0:fe7857738499 182 CardReader.putc(ARM_ABORT); // 00011010 01011110 01011110
williequesada 0:fe7857738499 183 CardReader.putc(EOT); // 00000100 ^ *
williequesada 0:fe7857738499 184 CardReader.putc(BBCG); // 00011111 01011110 00101010
williequesada 0:fe7857738499 185 }
williequesada 0:fe7857738499 186 if(Comando=='H') {
williequesada 0:fe7857738499 187 Computer.printf("\n H--> Get Custom");
williequesada 0:fe7857738499 188 CardReader.putc(SOH); // 00000001
williequesada 0:fe7857738499 189 CardReader.putc(ADDR); // 00000000
williequesada 0:fe7857738499 190 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 191 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 192 CardReader.putc(MAG_CUSTOM_T1); // 01010101
williequesada 0:fe7857738499 193 CardReader.putc(MAG_CUSTOM_F); // 00110100
williequesada 0:fe7857738499 194 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 195 CardReader.putc(BBCH); // 01100100 --> XOR bytes anteriores
williequesada 0:fe7857738499 196 }
williequesada 0:fe7857738499 197 if(Comando=='I') {
williequesada 0:fe7857738499 198 Computer.printf("\n I--> Reset");
williequesada 0:fe7857738499 199 CardReader.putc(SOH); // 00000001
williequesada 0:fe7857738499 200 CardReader.putc(ADDR); // 00000000
williequesada 0:fe7857738499 201 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 202 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 203 CardReader.putc(DEV_RESET); // 01111111
williequesada 0:fe7857738499 204 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 205 CardReader.putc(BBCI); // 01111010 --> XOR bytes anteriores
williequesada 0:fe7857738499 206 }
williequesada 0:fe7857738499 207 if(Comando=='J') {
williequesada 0:fe7857738499 208 Computer.printf("\n J--> Get Iso T1");
williequesada 0:fe7857738499 209 CardReader.putc(SOH); // 00000001
williequesada 0:fe7857738499 210 CardReader.putc(ADDR); // 00000000
williequesada 0:fe7857738499 211 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 212 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 213 CardReader.putc(MAG_ISO_T1); // 01010001
williequesada 0:fe7857738499 214 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 215 CardReader.putc(BBCJ); // 01010100 --> XOR bytes anteriores
williequesada 0:fe7857738499 216 }
williequesada 0:fe7857738499 217 if(Comando=='K') {
williequesada 0:fe7857738499 218 Computer.printf("\n K--> Get Iso T2");
williequesada 0:fe7857738499 219 CardReader.putc(SOH); // 00000001
williequesada 0:fe7857738499 220 CardReader.putc(ADDR); // 00000000
williequesada 0:fe7857738499 221 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 222 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 223 CardReader.putc(MAG_ISO_T2); // 01010010
williequesada 0:fe7857738499 224 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 225 CardReader.putc(BBCK); // 01010111 --> XOR bytes anteriores
williequesada 0:fe7857738499 226 }
williequesada 0:fe7857738499 227 if(Comando=='L') {
williequesada 0:fe7857738499 228 Computer.printf("\n L--> Get Iso T3");
williequesada 0:fe7857738499 229 CardReader.putc(SOH); // 00000001
williequesada 0:fe7857738499 230 CardReader.putc(ADDR); // 00000000
williequesada 0:fe7857738499 231 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 232 CardReader.putc(LEN); // 00000000
williequesada 0:fe7857738499 233 CardReader.putc(MAG_ISO_T3); // 01010011
williequesada 0:fe7857738499 234 CardReader.putc(EOT); // 00000100
williequesada 0:fe7857738499 235 CardReader.putc(BBCL); // 01010110 --> XOR bytes anteriores
williequesada 0:fe7857738499 236 }
williequesada 0:fe7857738499 237
williequesada 0:fe7857738499 238 Computer.printf("\n--------------------------");
williequesada 0:fe7857738499 239 Computer.printf("\n a--> On");
williequesada 0:fe7857738499 240 Computer.printf("\n A--> Card Position");
williequesada 0:fe7857738499 241 Computer.printf("\n B--> Card Lock");
williequesada 0:fe7857738499 242 Computer.printf("\n C--> Card Unlock");
williequesada 0:fe7857738499 243 Computer.printf("\n D--> Device Status");
williequesada 0:fe7857738499 244 Computer.printf("\n E--> Arm Mode");
williequesada 0:fe7857738499 245 Computer.printf("\n F--> Arm Debug");
williequesada 0:fe7857738499 246 Computer.printf("\n G--> Arm Abort");
williequesada 0:fe7857738499 247 Computer.printf("\n H--> Get Custom");
williequesada 0:fe7857738499 248 Computer.printf("\n I--> Reset");
williequesada 0:fe7857738499 249 Computer.printf("\n J--> Get Iso T1");
williequesada 0:fe7857738499 250 Computer.printf("\n K--> Get Iso T2");
williequesada 0:fe7857738499 251 Computer.printf("\n L--> Get Iso T3");
williequesada 0:fe7857738499 252 Computer.printf("\n--------------------------");
williequesada 0:fe7857738499 253 wait(5);
williequesada 0:fe7857738499 254 }
williequesada 0:fe7857738499 255
williequesada 0:fe7857738499 256 if(Contador!=0) {
williequesada 0:fe7857738499 257 for(int i=0; i<=Contador; i++) {
williequesada 0:fe7857738499 258 Computer.printf("-%#X-",rx_buffer[i]);
williequesada 0:fe7857738499 259 }
williequesada 0:fe7857738499 260 Computer.printf("--C--%i \n",Contador);
williequesada 0:fe7857738499 261 for(int i=0; i<=Contador; i++) {
williequesada 0:fe7857738499 262 Computer.printf("-%c-",rx_buffer[i]);
williequesada 0:fe7857738499 263 }
williequesada 0:fe7857738499 264 Computer.printf("--C--%i",Contador);
williequesada 0:fe7857738499 265 Contador=0;
williequesada 0:fe7857738499 266 }
williequesada 0:fe7857738499 267 }
williequesada 0:fe7857738499 268 }
williequesada 0:fe7857738499 269