CardReader
CardReader.cpp
- Committer:
- williequesada
- Date:
- 2019-06-04
- Revision:
- 0:e5dbf1e75384
File content as of revision 0:e5dbf1e75384:
#include "CardReader.h" #include "mbed.h" #include "stdio.h" #define START 0x30 #define COMMAND 0x31 #define ERROR 0x32 #define INVALID 0x33 #define NOTHING 0x34 const char SOH=1; const char EOT=4; const char ESP=33; const char ADDR=0; const char LEN=0; const char CARD_POSITION='8'; const char CARD_LOCK='{'; const char CARD_UNLOCK='}'; const char DEV_STATUS='$'; const char DEV_RESET=127; const char ARM_MODE='P'; const char ARM_DEBUG='p'; const char ARM_ABORT=27; const char SIG_START='?'; const char FCT_READ='R'; const char MAG_CUSTOM_T1='U'; const char MAG_CUSTOM_T2='V'; const char MAG_CUSTOM_T3='W'; const char MAG_ISO_T1='Q'; const char MAG_ISO_T2='R'; const char MAG_ISO_T3='S'; const char MAG_CUSTOM_F='4'; const char BBCA='='; const char BBCB='~'; const char BBCC='x'; const char BBCD='!'; const char BBCE='U'; const char BBCF='u'; const char BBCG=30; const char BBCH='d'; const char BBCI='z'; const char BBCJ='T'; const char BBCK='W'; const char BBCL='V'; const char BBCM=10; const char R_ACTION='^'; const char R_ERROR='*'; const char R_INVALID='!'; const char R_NO_DATA='+'; const char R_COMAND_ERROR='?'; const char R_START=':'; const char R_POSITION1='q'; const char R_POSITION2='s'; const char R_NO_MAG_CARD='>'; const char R_MAG_DETECT_ON='('; const char R_MAG_DETECT_OFF=')'; char StateReader[7]= {'0','0','0','0','0','0','0'}; char CardReader_Buffer[255]; int CardReader_Counter=0; unsigned long Inicio, Fin, Transcurrido; Timer TimeOutClock; READER::READER(PinName TX, PinName RX) : CardReader(TX,RX) { CardReader.attach(this,&READER::Interrupt); } void READER::Interrupt() { CardReader_Buffer[CardReader_Counter]=CardReader.getc(); CardReader_Counter++; } uint8_t READER::Reset() { CardReader_Counter=0; StateReader[0]='S'; CardReader.putc(SOH); // 00000001 CardReader.putc(ADDR); // 00000000 CardReader.putc(LEN); // 00000000 CardReader.putc(LEN); // 00000000 CardReader.putc(DEV_RESET); // 01111111 CardReader.putc(EOT); // 00000100 CardReader.putc(BBCI); // 01111010 wait_ms(3000); for(int i=0; i<=CardReader_Counter; i++) { if(CardReader_Buffer[i]==R_START) { //Computer.printf("\n START"); // Encendido StateReader[0]='A'; return START; } if(CardReader_Buffer[i]==R_INVALID) { //Computer.printf("\n INVALID "); // Comando Invalido StateReader[1]='N'; return INVALID; } if(CardReader_Buffer[i]==R_ERROR) { //Computer.printf("\n ERROR "); // Error StateReader[1]='E'; return ERROR; } if(CardReader_Buffer[i]==R_COMAND_ERROR) { //Computer.printf("\n COMAND ERROR "); // Error en comando StateReader[1]='C'; return COMMAND; } } return NOTHING; }; uint8_t READER::Detection() { CardReader_Counter=0; StateReader[1]='S'; StateReader[2]='S'; StateReader[3]='S'; if(StateReader[0]=='A') { // Se envia el comando Arm Debug //Computer.printf("\n Introducir Tarjeta"); CardReader.putc(SOH); CardReader.putc(ADDR); CardReader.putc(LEN); CardReader.putc(LEN); CardReader.putc(ARM_DEBUG); CardReader.putc(EOT); CardReader.putc(BBCF); wait_ms(500); for(int i=0; i<=CardReader_Counter; i++) { if(CardReader_Buffer[i]==R_ACTION) { //Computer.printf("\n ACTION "); // Accion ejecutada StateReader[1]='A'; } if(CardReader_Buffer[i]==R_INVALID) { //Computer.printf("\n INVALID "); // Comando Invalido StateReader[1]='N'; } if(CardReader_Buffer[i]==R_ERROR) { //Computer.printf("\n ERROR "); // Error StateReader[1]='E'; } if(CardReader_Buffer[i]==R_COMAND_ERROR) { //Computer.printf("\n COMAND ERROR ");// Error en comando StateReader[1]='C'; } } CardReader_Counter=0; Inicio=TimeOutClock.read_ms(); while(CardReader_Counter==0) { // Esperando introduccion de tarjeta Fin=TimeOutClock.read_ms(); Transcurrido=Fin-Inicio; if(StateReader[1]=='C'||StateReader[1]=='E'||StateReader[1]=='N') { //Computer.printf("\n Error en comando"); break; } if(StateReader[1]=='S') { //Computer.printf("\n Sin Respuesta"); break; } if(Transcurrido>40000) { //Computer.printf("\n Tiempo de respuesta"); CardReader.putc(SOH); CardReader.putc(ADDR); CardReader.putc(LEN); CardReader.putc(LEN); CardReader.putc(ARM_ABORT); CardReader.putc(EOT); CardReader.putc(BBCG); break; } } wait_ms(1000); for(int i=0; i<=CardReader_Counter; i++) { if(CardReader_Buffer[i]==R_NO_MAG_CARD) { //Computer.printf("\n Deteccion Nula "); // No se detecta banda magnetica StateReader[2]='N'; StateReader[3]='N'; } if(CardReader_Buffer[i]==R_MAG_DETECT_ON) { //Computer.printf("\n Deteccion On "); // Se inicia verificacion de banda StateReader[2]='A'; } if(CardReader_Buffer[i]==R_MAG_DETECT_OFF) { //Computer.printf("\n Deteccion Off "); // Se termina verificacion de banda StateReader[3]='A'; } if(CardReader_Buffer[i]==R_ACTION) { //Computer.printf("\n Action Arm Abort "); // Accion ejecutada StateReader[1]='T'; } } } return 0x00; }; uint8_t READER::Position() { return 0x00; }; uint8_t READER::Read() { return 0x00; }; char * READER::Data() { return 0x00; };