Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Thu Jul 07 16:17:25 2022 +0000
Revision:
19:5580a9a54ad5
Parent:
17:c53ea16f75c0
Sincronizacion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:9e821e640117 1 /**
fmanzano_dtk 1:9e821e640117 2 * @file New_GT521Fx.cpp
fmanzano_dtk 1:9e821e640117 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 1:9e821e640117 4 * @brief
fmanzano_dtk 1:9e821e640117 5 * @version 0.1
fmanzano_dtk 1:9e821e640117 6 * @date 2021-02-13
fmanzano_dtk 1:9e821e640117 7 *
fmanzano_dtk 1:9e821e640117 8 * @copyright Copyright (c) 2021
fmanzano_dtk 1:9e821e640117 9 *
fmanzano_dtk 1:9e821e640117 10 */
fmanzano_dtk 1:9e821e640117 11
fmanzano_dtk 1:9e821e640117 12 #include "New_GT521Fx.hpp"
fmanzano_dtk 1:9e821e640117 13 #include "BufferedSerial.h"
fmanzano_dtk 17:c53ea16f75c0 14 #include "eeprom.h"
fmanzano_dtk 16:772ea817ec43 15 #include "flash_eeprom.h"
fmanzano_dtk 1:9e821e640117 16 #include "teltonika_fmu130.hpp"
fmanzano_dtk 1:9e821e640117 17 #include "USBSerial.h"
fmanzano_dtk 10:a0005a4116ae 18 #include "flash_ee_exe.hpp"
fmanzano_dtk 5:07720e3f99d2 19 #include "eeprom_exe.hpp"
fmanzano_dtk 1:9e821e640117 20 #include <ctype.h>
fmanzano_dtk 1:9e821e640117 21
fmanzano_dtk 19:5580a9a54ad5 22 extern BufferedSerial fingerprint;
fmanzano_dtk 19:5580a9a54ad5 23 extern BufferedSerial avl_uart;
fmanzano_dtk 19:5580a9a54ad5 24 extern DigitalOut out1_fingerprint;
fmanzano_dtk 19:5580a9a54ad5 25 extern USBSerial myPC_debug;
fmanzano_dtk 19:5580a9a54ad5 26 extern uint16_t VirtAddVarTab[];
fmanzano_dtk 19:5580a9a54ad5 27 extern uint16_t VarDataTab[];
fmanzano_dtk 1:9e821e640117 28 extern uint32_t eprom_AddressArray[];
fmanzano_dtk 19:5580a9a54ad5 29 extern bool functionality_fingerprint_reader;
fmanzano_dtk 1:9e821e640117 30 extern bool fingerprint_flag_poweroff;
fmanzano_dtk 1:9e821e640117 31 extern EEPROM ep;
fmanzano_dtk 10:a0005a4116ae 32 extern const bool external_eeprom;
fmanzano_dtk 1:9e821e640117 33
fmanzano_dtk 1:9e821e640117 34 unsigned long return_para;
fmanzano_dtk 1:9e821e640117 35 unsigned short return_ack;
fmanzano_dtk 17:c53ea16f75c0 36 const char TCA_ID_FP_FAILURE[] = "TCA|157|0";
fmanzano_dtk 1:9e821e640117 37 const char TCA_ID_FP_DISABLE[] = "TCA|111|0";
fmanzano_dtk 1:9e821e640117 38 const char GT521_ENGINE_UNLOCK[] = "setdigout 1?? ? ? ? ? ? ?";
fmanzano_dtk 17:c53ea16f75c0 39 char error_buffer[64];
fmanzano_dtk 1:9e821e640117 40
fmanzano_dtk 1:9e821e640117 41 COMMAND_PACKAGE_STRUCTURE command_package;
fmanzano_dtk 1:9e821e640117 42 DATA_PACKAGE_STRUCTURE data_package;
fmanzano_dtk 1:9e821e640117 43 #define NEW_GT521FX_CPP
fmanzano_dtk 1:9e821e640117 44
fmanzano_dtk 1:9e821e640117 45 void SendCommand(unsigned char *ucData, unsigned int length) {
fmanzano_dtk 1:9e821e640117 46 unsigned int i;
fmanzano_dtk 1:9e821e640117 47 for(i = 0; i < length; i++)
fmanzano_dtk 1:9e821e640117 48 fingerprint.putc(*(ucData + i));
fmanzano_dtk 1:9e821e640117 49 }
fmanzano_dtk 1:9e821e640117 50
fmanzano_dtk 1:9e821e640117 51 void SendData(unsigned char *ucData, unsigned int length) {
fmanzano_dtk 1:9e821e640117 52 unsigned int i;
fmanzano_dtk 1:9e821e640117 53 for(i = 0; i < length; i++)
fmanzano_dtk 1:9e821e640117 54 fingerprint.putc(*(ucData + i));
fmanzano_dtk 1:9e821e640117 55 }
fmanzano_dtk 1:9e821e640117 56
fmanzano_dtk 1:9e821e640117 57 void ReceiveCommand(unsigned char *ucData,unsigned int length) {
fmanzano_dtk 1:9e821e640117 58 unsigned int i=0,time_out=0;
fmanzano_dtk 1:9e821e640117 59 do {
fmanzano_dtk 1:9e821e640117 60 if(fingerprint.readable()>0) {
fmanzano_dtk 1:9e821e640117 61 time_out = 0;
fmanzano_dtk 1:9e821e640117 62 if(i < length) {
fmanzano_dtk 1:9e821e640117 63 *(ucData + i) = (uint8_t)fingerprint.getc();
fmanzano_dtk 1:9e821e640117 64 i++; //write command package from RX
fmanzano_dtk 1:9e821e640117 65 }
fmanzano_dtk 1:9e821e640117 66 } else {
fmanzano_dtk 1:9e821e640117 67 wait_us(1000);
fmanzano_dtk 1:9e821e640117 68 time_out++;
fmanzano_dtk 1:9e821e640117 69 if(time_out==5001) {
fmanzano_dtk 1:9e821e640117 70 if (!(fingerprint_flag_poweroff)) {
fmanzano_dtk 1:9e821e640117 71 #ifdef NEW_GT521FX_CPP
fmanzano_dtk 1:9e821e640117 72 myPC_debug.printf("ERROR - GT521Fx no responde\r\n");
fmanzano_dtk 1:9e821e640117 73 #endif
fmanzano_dtk 1:9e821e640117 74 functionality_fingerprint_reader = false;
fmanzano_dtk 10:a0005a4116ae 75 if (external_eeprom) {
fmanzano_dtk 16:772ea817ec43 76 //ep.write(eprom_AddressArray[EE_Address_FINGERPRINT], ((uint16_t) false));
fmanzano_dtk 10:a0005a4116ae 77 } else {
fmanzano_dtk 16:772ea817ec43 78 //EE_WriteVariable(VirtAddVarTab[AP_FINGERPRINT], ((uint16_t) false));
fmanzano_dtk 10:a0005a4116ae 79 }
fmanzano_dtk 1:9e821e640117 80 memset(error_buffer, '\0', sizeof(error_buffer));
fmanzano_dtk 1:9e821e640117 81 sprintf(error_buffer, "%s", TCA_ID_FP_FAILURE);
fmanzano_dtk 1:9e821e640117 82 tx_fmu130_message(error_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 83 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 84
fmanzano_dtk 1:9e821e640117 85 memset(error_buffer, '\0', sizeof(error_buffer));
fmanzano_dtk 1:9e821e640117 86 sprintf(error_buffer, "%s", TCA_ID_FP_DISABLE);
fmanzano_dtk 1:9e821e640117 87 tx_fmu130_message(error_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 88 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 89
fmanzano_dtk 1:9e821e640117 90 tx_fmu130_command(GT521_ENGINE_UNLOCK, &avl_uart);
fmanzano_dtk 1:9e821e640117 91 out1_fingerprint = 1;
fmanzano_dtk 1:9e821e640117 92 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 93 out1_fingerprint = 0;
fmanzano_dtk 1:9e821e640117 94 NVIC_SystemReset();
fmanzano_dtk 1:9e821e640117 95 }
fmanzano_dtk 1:9e821e640117 96 }
fmanzano_dtk 1:9e821e640117 97 }
fmanzano_dtk 1:9e821e640117 98 } while(i<length); //check whether bytes
fmanzano_dtk 1:9e821e640117 99 }
fmanzano_dtk 1:9e821e640117 100
fmanzano_dtk 1:9e821e640117 101 void ReceiveData(unsigned char *ucData,unsigned int length) {
fmanzano_dtk 1:9e821e640117 102 unsigned int i=0,time_out=0;
fmanzano_dtk 1:9e821e640117 103 do {
fmanzano_dtk 1:9e821e640117 104 if(fingerprint.readable()>0) {
fmanzano_dtk 1:9e821e640117 105 if(i < length) {
fmanzano_dtk 1:9e821e640117 106 *(ucData + i) = (uint8_t)fingerprint.getc();
fmanzano_dtk 1:9e821e640117 107 i++; //write command package from RX
fmanzano_dtk 1:9e821e640117 108 }
fmanzano_dtk 1:9e821e640117 109 } else {
fmanzano_dtk 1:9e821e640117 110 wait_us(100000);
fmanzano_dtk 1:9e821e640117 111 time_out++;
fmanzano_dtk 1:9e821e640117 112 if(time_out==5000) {
fmanzano_dtk 1:9e821e640117 113 #ifdef NEW_GT521FX_CPP
fmanzano_dtk 1:9e821e640117 114 myPC_debug.printf("ERROR - No fingerprint module!\n");
fmanzano_dtk 1:9e821e640117 115 #endif
fmanzano_dtk 1:9e821e640117 116 }
fmanzano_dtk 1:9e821e640117 117 }
fmanzano_dtk 1:9e821e640117 118 } while(i<length); //check whether bytes
fmanzano_dtk 1:9e821e640117 119 }
fmanzano_dtk 1:9e821e640117 120
fmanzano_dtk 1:9e821e640117 121
fmanzano_dtk 1:9e821e640117 122 unsigned short CalcChkSumOfCmdAckPkt(COMMAND_PACKAGE_STRUCTURE *pPkt)
fmanzano_dtk 1:9e821e640117 123 {
fmanzano_dtk 1:9e821e640117 124 unsigned short wChkSum = 0;
fmanzano_dtk 1:9e821e640117 125 unsigned char *pBuf = (unsigned char*)pPkt;
fmanzano_dtk 1:9e821e640117 126 int i;
fmanzano_dtk 1:9e821e640117 127
fmanzano_dtk 1:9e821e640117 128 for(i=0;i<(sizeof(COMMAND_PACKAGE_STRUCTURE)-2);i++)
fmanzano_dtk 1:9e821e640117 129 wChkSum += pBuf[i];
fmanzano_dtk 1:9e821e640117 130
fmanzano_dtk 1:9e821e640117 131 return wChkSum;
fmanzano_dtk 1:9e821e640117 132 }
fmanzano_dtk 1:9e821e640117 133
fmanzano_dtk 1:9e821e640117 134 unsigned short CalcChkSumOfDataPkt(DATA_PACKAGE_STRUCTURE *pPkt)
fmanzano_dtk 1:9e821e640117 135 {
fmanzano_dtk 1:9e821e640117 136 unsigned short wChkSum = 0;
fmanzano_dtk 1:9e821e640117 137 unsigned char *pBuf = (unsigned char*)pPkt;
fmanzano_dtk 1:9e821e640117 138 int i;
fmanzano_dtk 1:9e821e640117 139
fmanzano_dtk 1:9e821e640117 140 for(i=0;i<(sizeof(DATA_PACKAGE_STRUCTURE)-2);i++)
fmanzano_dtk 1:9e821e640117 141 wChkSum += pBuf[i];
fmanzano_dtk 1:9e821e640117 142
fmanzano_dtk 1:9e821e640117 143 return wChkSum;
fmanzano_dtk 1:9e821e640117 144 }
fmanzano_dtk 1:9e821e640117 145
fmanzano_dtk 1:9e821e640117 146
fmanzano_dtk 1:9e821e640117 147 void send_receive_command() {
fmanzano_dtk 1:9e821e640117 148 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 149 ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 150
fmanzano_dtk 1:9e821e640117 151 return_para=command_package.nParam;
fmanzano_dtk 1:9e821e640117 152 return_ack=command_package.wCmd;
fmanzano_dtk 1:9e821e640117 153 }
fmanzano_dtk 1:9e821e640117 154
fmanzano_dtk 1:9e821e640117 155
fmanzano_dtk 1:9e821e640117 156 void send_NO_receive_command() {
fmanzano_dtk 1:9e821e640117 157 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 158 //ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 159 //return_para=command_package.nParam;
fmanzano_dtk 1:9e821e640117 160 //return_ack=command_package.wCmd;
fmanzano_dtk 1:9e821e640117 161 }
fmanzano_dtk 1:9e821e640117 162
fmanzano_dtk 1:9e821e640117 163
fmanzano_dtk 1:9e821e640117 164 void send_receive_data() {
fmanzano_dtk 1:9e821e640117 165 SendData(&data_package.DHead1,DATA_FP_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 166 ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 167
fmanzano_dtk 1:9e821e640117 168 return_para=command_package.nParam;
fmanzano_dtk 1:9e821e640117 169 return_ack=command_package.wCmd;
fmanzano_dtk 1:9e821e640117 170 }
fmanzano_dtk 1:9e821e640117 171
fmanzano_dtk 1:9e821e640117 172 int FP_Open() {
fmanzano_dtk 1:9e821e640117 173 int i;
fmanzano_dtk 1:9e821e640117 174 unsigned int zero = 0x00;
fmanzano_dtk 1:9e821e640117 175
fmanzano_dtk 1:9e821e640117 176 for (i=0; i < CEROS_INICIO; i++) {
fmanzano_dtk 1:9e821e640117 177 fingerprint.putc(zero);
fmanzano_dtk 1:9e821e640117 178 }
fmanzano_dtk 1:9e821e640117 179 wait_us(TIEMPO_ESPERA);
fmanzano_dtk 1:9e821e640117 180 FP_Flush();
fmanzano_dtk 1:9e821e640117 181
fmanzano_dtk 1:9e821e640117 182 int unsigned first_cmd[] = {0x55, 0xAA, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01};
fmanzano_dtk 1:9e821e640117 183
fmanzano_dtk 1:9e821e640117 184 for (i=0; i < COMMAND_PACKAGE_LENGTH; i++){
fmanzano_dtk 1:9e821e640117 185 fingerprint.putc(first_cmd[i]);
fmanzano_dtk 1:9e821e640117 186 }
fmanzano_dtk 1:9e821e640117 187 /*
fmanzano_dtk 1:9e821e640117 188 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 189 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 190 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 191 command_package.nParam=0x00000000; //didn't get information
fmanzano_dtk 1:9e821e640117 192 command_package.wCmd=OPEN;
fmanzano_dtk 1:9e821e640117 193 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 194 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);*/
fmanzano_dtk 1:9e821e640117 195 wait_us(TIEMPO_ESPERA);
fmanzano_dtk 1:9e821e640117 196 FP_Flush();
fmanzano_dtk 1:9e821e640117 197
fmanzano_dtk 1:9e821e640117 198 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 199 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 200 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 201 command_package.nParam=0x00000000; //didn't get information
fmanzano_dtk 1:9e821e640117 202 command_package.wCmd=UNKNOW;
fmanzano_dtk 1:9e821e640117 203 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 204 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 205 wait_us(TIEMPO_ESPERA);
fmanzano_dtk 1:9e821e640117 206 FP_Flush();
fmanzano_dtk 1:9e821e640117 207
fmanzano_dtk 1:9e821e640117 208 //send_receive_command();
fmanzano_dtk 15:6033d2f3d819 209 //if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 210 return 0;
fmanzano_dtk 1:9e821e640117 211 //} else {
fmanzano_dtk 1:9e821e640117 212 // return -1;
fmanzano_dtk 1:9e821e640117 213 //}
fmanzano_dtk 1:9e821e640117 214 }
fmanzano_dtk 1:9e821e640117 215
fmanzano_dtk 1:9e821e640117 216 void FP_Close() {
fmanzano_dtk 1:9e821e640117 217 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 218 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 219 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 220 command_package.nParam=0x00000000; //didn't get information
fmanzano_dtk 1:9e821e640117 221 command_package.wCmd=CLOSE;
fmanzano_dtk 1:9e821e640117 222 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 223 send_NO_receive_command();
fmanzano_dtk 1:9e821e640117 224 wait_us(200000);
fmanzano_dtk 1:9e821e640117 225 FP_Flush();
fmanzano_dtk 1:9e821e640117 226
fmanzano_dtk 1:9e821e640117 227 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 228 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 229 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 230 command_package.nParam=9600; //didn't get information
fmanzano_dtk 1:9e821e640117 231 command_package.wCmd=CHANGE_BAUD;
fmanzano_dtk 1:9e821e640117 232 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 233 send_NO_receive_command();
fmanzano_dtk 1:9e821e640117 234 wait_us(200000);
fmanzano_dtk 1:9e821e640117 235 FP_Flush();
fmanzano_dtk 1:9e821e640117 236 }
fmanzano_dtk 1:9e821e640117 237
fmanzano_dtk 1:9e821e640117 238
fmanzano_dtk 1:9e821e640117 239 int FP_LED_open() {
fmanzano_dtk 1:9e821e640117 240 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 241 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 242 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 243 command_package.nParam=0x00000001; //open LED
fmanzano_dtk 1:9e821e640117 244 command_package.wCmd=CMOSLED;
fmanzano_dtk 1:9e821e640117 245 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 246
fmanzano_dtk 1:9e821e640117 247 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 248 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 249 return 0;
fmanzano_dtk 1:9e821e640117 250 } else {
fmanzano_dtk 1:9e821e640117 251 return -1;
fmanzano_dtk 1:9e821e640117 252 }
fmanzano_dtk 1:9e821e640117 253 }
fmanzano_dtk 1:9e821e640117 254
fmanzano_dtk 1:9e821e640117 255 int FP_LED_close() {
fmanzano_dtk 1:9e821e640117 256 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 257 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 258 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 259 command_package.nParam=0x00000000; //close LED
fmanzano_dtk 1:9e821e640117 260 command_package.wCmd=CMOSLED;
fmanzano_dtk 1:9e821e640117 261 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 262
fmanzano_dtk 1:9e821e640117 263 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 264 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 265 return 0;
fmanzano_dtk 1:9e821e640117 266 } else {
fmanzano_dtk 1:9e821e640117 267 return -1;
fmanzano_dtk 1:9e821e640117 268 }
fmanzano_dtk 1:9e821e640117 269 }
fmanzano_dtk 1:9e821e640117 270
fmanzano_dtk 1:9e821e640117 271 int FP_GetEnrollCount() {
fmanzano_dtk 1:9e821e640117 272 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 273 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 274 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 275 command_package.nParam=0x00000000;
fmanzano_dtk 1:9e821e640117 276 command_package.wCmd=GETENROLLCOUNT;
fmanzano_dtk 1:9e821e640117 277 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 278
fmanzano_dtk 1:9e821e640117 279 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 280 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 281 return ((int) return_para);
fmanzano_dtk 1:9e821e640117 282 } else {
fmanzano_dtk 1:9e821e640117 283 return -1;
fmanzano_dtk 1:9e821e640117 284 }
fmanzano_dtk 1:9e821e640117 285 }
fmanzano_dtk 1:9e821e640117 286
fmanzano_dtk 1:9e821e640117 287 int FP_CheckEnrolled(int thisID) {
fmanzano_dtk 1:9e821e640117 288 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 289 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 290 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 291 command_package.nParam=thisID;
fmanzano_dtk 1:9e821e640117 292 command_package.wCmd=CHECK_ENROLLED;
fmanzano_dtk 1:9e821e640117 293 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 294
fmanzano_dtk 1:9e821e640117 295 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 296 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 297 return 1; // Segun definicion TCA
fmanzano_dtk 1:9e821e640117 298 } else {
fmanzano_dtk 1:9e821e640117 299 return 0;
fmanzano_dtk 1:9e821e640117 300 }
fmanzano_dtk 1:9e821e640117 301 }
fmanzano_dtk 1:9e821e640117 302
fmanzano_dtk 1:9e821e640117 303 void FP_EnrollStart(int specify_ID)
fmanzano_dtk 1:9e821e640117 304 {
fmanzano_dtk 1:9e821e640117 305 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 306 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 307 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 308 command_package.nParam=specify_ID;
fmanzano_dtk 1:9e821e640117 309 command_package.wCmd=ENROLLSTART;
fmanzano_dtk 1:9e821e640117 310 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 311
fmanzano_dtk 1:9e821e640117 312 send_receive_command();
fmanzano_dtk 1:9e821e640117 313 }
fmanzano_dtk 1:9e821e640117 314
fmanzano_dtk 1:9e821e640117 315 void FP_Enroll(int Enroll_define)
fmanzano_dtk 1:9e821e640117 316 {
fmanzano_dtk 1:9e821e640117 317 unsigned short Enroll_command;
fmanzano_dtk 1:9e821e640117 318
fmanzano_dtk 1:9e821e640117 319 switch(Enroll_define)
fmanzano_dtk 1:9e821e640117 320 {
fmanzano_dtk 1:9e821e640117 321 case 1:
fmanzano_dtk 1:9e821e640117 322 Enroll_command=ENROLL1;
fmanzano_dtk 1:9e821e640117 323 break;
fmanzano_dtk 1:9e821e640117 324 case 2:
fmanzano_dtk 1:9e821e640117 325 Enroll_command=ENROLL2;
fmanzano_dtk 1:9e821e640117 326 break;
fmanzano_dtk 1:9e821e640117 327 case 3:
fmanzano_dtk 1:9e821e640117 328 Enroll_command=ENROLL3;
fmanzano_dtk 1:9e821e640117 329 break;
fmanzano_dtk 1:9e821e640117 330 }
fmanzano_dtk 1:9e821e640117 331 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 332 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 333 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 334 command_package.nParam=0x00000000;
fmanzano_dtk 1:9e821e640117 335 command_package.wCmd=Enroll_command;
fmanzano_dtk 1:9e821e640117 336 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 337
fmanzano_dtk 1:9e821e640117 338 send_receive_command();
fmanzano_dtk 1:9e821e640117 339 }
fmanzano_dtk 1:9e821e640117 340
fmanzano_dtk 1:9e821e640117 341 int FP_IsPressFinger() {
fmanzano_dtk 1:9e821e640117 342 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 343 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 344 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 345 command_package.nParam=0x00000000;
fmanzano_dtk 1:9e821e640117 346 command_package.wCmd=ISPRESSFINGER;
fmanzano_dtk 1:9e821e640117 347 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 348
fmanzano_dtk 1:9e821e640117 349 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 350 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 351 return ((int) return_para);
fmanzano_dtk 1:9e821e640117 352 } else {
fmanzano_dtk 1:9e821e640117 353 return -1;
fmanzano_dtk 1:9e821e640117 354 }
fmanzano_dtk 1:9e821e640117 355 }
fmanzano_dtk 1:9e821e640117 356
fmanzano_dtk 1:9e821e640117 357 void FP_CaptureFinger(unsigned long picture_quality) { //0:normal picture, 1:best picture
fmanzano_dtk 1:9e821e640117 358 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 359 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 360 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 361 command_package.nParam=picture_quality;
fmanzano_dtk 1:9e821e640117 362 command_package.wCmd=CAPTURE_FINGER;
fmanzano_dtk 1:9e821e640117 363 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 364
fmanzano_dtk 1:9e821e640117 365 send_receive_command();
fmanzano_dtk 1:9e821e640117 366 }
fmanzano_dtk 1:9e821e640117 367
fmanzano_dtk 1:9e821e640117 368 int FP_DeleteAll() {
fmanzano_dtk 1:9e821e640117 369 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 370 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 371 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 372 command_package.nParam=0x00000000;
fmanzano_dtk 1:9e821e640117 373 command_package.wCmd=DELETEALL;
fmanzano_dtk 1:9e821e640117 374 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 375
fmanzano_dtk 1:9e821e640117 376 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 377 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 378 return 0;
fmanzano_dtk 1:9e821e640117 379 } else {
fmanzano_dtk 1:9e821e640117 380 return -1;
fmanzano_dtk 1:9e821e640117 381 }
fmanzano_dtk 1:9e821e640117 382 }
fmanzano_dtk 1:9e821e640117 383
fmanzano_dtk 1:9e821e640117 384 int FP_DeleteID(int thisID) {
fmanzano_dtk 1:9e821e640117 385 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 386 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 387 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 388 command_package.nParam=thisID;
fmanzano_dtk 1:9e821e640117 389 command_package.wCmd=DELETEID;
fmanzano_dtk 1:9e821e640117 390 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 391
fmanzano_dtk 1:9e821e640117 392 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 393 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 394 return 0;
fmanzano_dtk 1:9e821e640117 395 } else {
fmanzano_dtk 1:9e821e640117 396 return -1;
fmanzano_dtk 1:9e821e640117 397 }
fmanzano_dtk 1:9e821e640117 398 }
fmanzano_dtk 1:9e821e640117 399
fmanzano_dtk 1:9e821e640117 400 int FP_Identify() {
fmanzano_dtk 1:9e821e640117 401 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 402 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 403 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 404 command_package.nParam=0x00000000;
fmanzano_dtk 1:9e821e640117 405 command_package.wCmd=IDENTIFY;
fmanzano_dtk 1:9e821e640117 406 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 407
fmanzano_dtk 1:9e821e640117 408 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 409 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 410 return ((int) return_para);
fmanzano_dtk 1:9e821e640117 411 } else {
fmanzano_dtk 1:9e821e640117 412 return -1;
fmanzano_dtk 1:9e821e640117 413 }
fmanzano_dtk 1:9e821e640117 414 }
fmanzano_dtk 1:9e821e640117 415
fmanzano_dtk 1:9e821e640117 416 void FP_Sleep() {
fmanzano_dtk 1:9e821e640117 417 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 418 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 419 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 420 command_package.nParam=0x00000000;
fmanzano_dtk 1:9e821e640117 421 command_package.wCmd=STANDBY_MODE;
fmanzano_dtk 1:9e821e640117 422 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 423
fmanzano_dtk 1:9e821e640117 424 send_receive_command();
fmanzano_dtk 1:9e821e640117 425 }
fmanzano_dtk 1:9e821e640117 426
fmanzano_dtk 1:9e821e640117 427 int FP_SetTemplate(int thisID, char * fingerData) {
fmanzano_dtk 1:9e821e640117 428
fmanzano_dtk 1:9e821e640117 429 unsigned char thisData_package[504];
fmanzano_dtk 1:9e821e640117 430 unsigned int thisSend_checksum = 0;
fmanzano_dtk 1:9e821e640117 431 int xyz;
fmanzano_dtk 1:9e821e640117 432 command_package.Head1=COMMAND_START_CODE1;
fmanzano_dtk 1:9e821e640117 433 command_package.Head2=COMMAND_START_CODE2;
fmanzano_dtk 1:9e821e640117 434 command_package.wDevId=DEVICE_ID;
fmanzano_dtk 1:9e821e640117 435 command_package.nParam=thisID;
fmanzano_dtk 1:9e821e640117 436 command_package.wCmd=SETTEMPLATE;
fmanzano_dtk 1:9e821e640117 437 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package);
fmanzano_dtk 1:9e821e640117 438
fmanzano_dtk 1:9e821e640117 439 send_receive_command();
fmanzano_dtk 15:6033d2f3d819 440 if (return_ack != FP_ACK) {
fmanzano_dtk 1:9e821e640117 441 return -1;
fmanzano_dtk 1:9e821e640117 442 }
fmanzano_dtk 1:9e821e640117 443
fmanzano_dtk 1:9e821e640117 444 thisData_package[0] = DATA_START_CODE1;
fmanzano_dtk 1:9e821e640117 445 thisData_package[1] = DATA_START_CODE2;
fmanzano_dtk 1:9e821e640117 446 thisData_package[2] = 0x01;
fmanzano_dtk 1:9e821e640117 447 thisData_package[3] = 0x00;
fmanzano_dtk 1:9e821e640117 448 for (xyz = 4; xyz <= 501; xyz++) {
fmanzano_dtk 1:9e821e640117 449 thisData_package[xyz] = fingerData[xyz -4];
fmanzano_dtk 1:9e821e640117 450 }
fmanzano_dtk 1:9e821e640117 451 for (xyz = 0; xyz < 502; xyz++) {
fmanzano_dtk 1:9e821e640117 452 thisSend_checksum = thisSend_checksum + thisData_package[xyz];
fmanzano_dtk 1:9e821e640117 453 }
fmanzano_dtk 1:9e821e640117 454 thisData_package[502] = thisSend_checksum&0x00FF;
fmanzano_dtk 1:9e821e640117 455 thisData_package[503] = thisSend_checksum>>8;
fmanzano_dtk 1:9e821e640117 456
fmanzano_dtk 1:9e821e640117 457 for(xyz = 0; xyz < 504; xyz++) {
fmanzano_dtk 1:9e821e640117 458 fingerprint.putc(thisData_package[xyz]);
fmanzano_dtk 1:9e821e640117 459 }
fmanzano_dtk 1:9e821e640117 460
fmanzano_dtk 1:9e821e640117 461 ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);
fmanzano_dtk 1:9e821e640117 462 return_ack=command_package.wCmd;
fmanzano_dtk 1:9e821e640117 463
fmanzano_dtk 15:6033d2f3d819 464 if(return_ack == FP_ACK) {
fmanzano_dtk 1:9e821e640117 465 return 0;
fmanzano_dtk 1:9e821e640117 466 } else {
fmanzano_dtk 1:9e821e640117 467 return -1;
fmanzano_dtk 1:9e821e640117 468 }
fmanzano_dtk 1:9e821e640117 469 }
fmanzano_dtk 1:9e821e640117 470
fmanzano_dtk 1:9e821e640117 471 void FP_Flush() {
fmanzano_dtk 1:9e821e640117 472 if(fingerprint.readable()) {
fmanzano_dtk 1:9e821e640117 473 while(fingerprint.readable()){
fmanzano_dtk 1:9e821e640117 474 fingerprint.getc();
fmanzano_dtk 1:9e821e640117 475 }
fmanzano_dtk 1:9e821e640117 476 }
fmanzano_dtk 1:9e821e640117 477 }