Felícito Manzano
/
DTK_Guaria2_ABInBev
Proyecto ABInBev para la tarjeta Guaria 1/2.
Embed:
(wiki syntax)
Show/hide line numbers
New_GT521Fx.cpp
Go to the documentation of this file.
00001 /** 00002 * @file New_GT521Fx.cpp 00003 * @author Felícito Manzano (felicito.manzano@detektor.com.sv) 00004 * @brief 00005 * @version 0.1 00006 * @date 2021-02-13 00007 * 00008 * @copyright Copyright (c) 2021 00009 * 00010 */ 00011 00012 #include "New_GT521Fx.hpp " 00013 #include "BufferedSerial.h" 00014 #include "eeprom.h" 00015 #include "flash_eeprom.h" 00016 #include "teltonika_fmu130.hpp " 00017 #include "USBSerial.h" 00018 #include "flash_ee_exe.hpp " 00019 #include "eeprom_exe.hpp" 00020 #include <ctype.h> 00021 00022 extern BufferedSerial fingerprint; 00023 extern BufferedSerial avl_uart; 00024 extern DigitalOut out1_fingerprint; 00025 extern USBSerial myPC_debug; 00026 extern uint16_t VirtAddVarTab[]; 00027 extern uint16_t VarDataTab[]; 00028 extern uint32_t eprom_AddressArray[]; 00029 extern bool functionality_fingerprint_reader; 00030 extern bool fingerprint_flag_poweroff; 00031 extern EEPROM ep; 00032 extern const bool external_eeprom; 00033 00034 unsigned long return_para; 00035 unsigned short return_ack; 00036 const char TCA_ID_FP_FAILURE[] = "TCA|157|0"; 00037 const char TCA_ID_FP_DISABLE[] = "TCA|111|0"; 00038 const char GT521_ENGINE_UNLOCK[] = "setdigout 1?? ? ? ? ? ? ?"; 00039 char error_buffer[64]; 00040 00041 COMMAND_PACKAGE_STRUCTURE command_package; 00042 DATA_PACKAGE_STRUCTURE data_package; 00043 #define NEW_GT521FX_CPP 00044 00045 void SendCommand(unsigned char *ucData, unsigned int length) { 00046 unsigned int i; 00047 for(i = 0; i < length; i++) 00048 fingerprint.putc(*(ucData + i)); 00049 } 00050 00051 void SendData(unsigned char *ucData, unsigned int length) { 00052 unsigned int i; 00053 for(i = 0; i < length; i++) 00054 fingerprint.putc(*(ucData + i)); 00055 } 00056 00057 void ReceiveCommand(unsigned char *ucData,unsigned int length) { 00058 unsigned int i=0,time_out=0; 00059 do { 00060 if(fingerprint.readable()>0) { 00061 time_out = 0; 00062 if(i < length) { 00063 *(ucData + i) = (uint8_t)fingerprint.getc(); 00064 i++; //write command package from RX 00065 } 00066 } else { 00067 wait_us(1000); 00068 time_out++; 00069 if(time_out==5001) { 00070 if (!(fingerprint_flag_poweroff)) { 00071 #ifdef NEW_GT521FX_CPP 00072 myPC_debug.printf("ERROR - GT521Fx no responde\r\n"); 00073 #endif 00074 functionality_fingerprint_reader = false; 00075 if (external_eeprom) { 00076 //ep.write(eprom_AddressArray[EE_Address_FINGERPRINT], ((uint16_t) false)); 00077 } else { 00078 //EE_WriteVariable(VirtAddVarTab[AP_FINGERPRINT], ((uint16_t) false)); 00079 } 00080 memset(error_buffer, '\0', sizeof(error_buffer)); 00081 sprintf(error_buffer, "%s", TCA_ID_FP_FAILURE); 00082 tx_fmu130_message (error_buffer, &avl_uart); 00083 wait_us(1000000); 00084 00085 memset(error_buffer, '\0', sizeof(error_buffer)); 00086 sprintf(error_buffer, "%s", TCA_ID_FP_DISABLE); 00087 tx_fmu130_message (error_buffer, &avl_uart); 00088 wait_us(1000000); 00089 00090 tx_fmu130_command(GT521_ENGINE_UNLOCK, &avl_uart); 00091 out1_fingerprint = 1; 00092 wait_us(1000000); 00093 out1_fingerprint = 0; 00094 NVIC_SystemReset(); 00095 } 00096 } 00097 } 00098 } while(i<length); //check whether bytes 00099 } 00100 00101 void ReceiveData(unsigned char *ucData,unsigned int length) { 00102 unsigned int i=0,time_out=0; 00103 do { 00104 if(fingerprint.readable()>0) { 00105 if(i < length) { 00106 *(ucData + i) = (uint8_t)fingerprint.getc(); 00107 i++; //write command package from RX 00108 } 00109 } else { 00110 wait_us(100000); 00111 time_out++; 00112 if(time_out==5000) { 00113 #ifdef NEW_GT521FX_CPP 00114 myPC_debug.printf("ERROR - No fingerprint module!\n"); 00115 #endif 00116 } 00117 } 00118 } while(i<length); //check whether bytes 00119 } 00120 00121 00122 unsigned short CalcChkSumOfCmdAckPkt(COMMAND_PACKAGE_STRUCTURE *pPkt) 00123 { 00124 unsigned short wChkSum = 0; 00125 unsigned char *pBuf = (unsigned char*)pPkt; 00126 int i; 00127 00128 for(i=0;i<(sizeof(COMMAND_PACKAGE_STRUCTURE)-2);i++) 00129 wChkSum += pBuf[i]; 00130 00131 return wChkSum; 00132 } 00133 00134 unsigned short CalcChkSumOfDataPkt(DATA_PACKAGE_STRUCTURE *pPkt) 00135 { 00136 unsigned short wChkSum = 0; 00137 unsigned char *pBuf = (unsigned char*)pPkt; 00138 int i; 00139 00140 for(i=0;i<(sizeof(DATA_PACKAGE_STRUCTURE)-2);i++) 00141 wChkSum += pBuf[i]; 00142 00143 return wChkSum; 00144 } 00145 00146 00147 void send_receive_command() { 00148 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00149 ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00150 00151 return_para=command_package.nParam; 00152 return_ack=command_package.wCmd; 00153 } 00154 00155 00156 void send_NO_receive_command() { 00157 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00158 //ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00159 //return_para=command_package.nParam; 00160 //return_ack=command_package.wCmd; 00161 } 00162 00163 00164 void send_receive_data() { 00165 SendData(&data_package.DHead1,DATA_FP_PACKAGE_LENGTH); 00166 ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00167 00168 return_para=command_package.nParam; 00169 return_ack=command_package.wCmd; 00170 } 00171 00172 int FP_Open() { 00173 int i; 00174 unsigned int zero = 0x00; 00175 00176 for (i=0; i < CEROS_INICIO; i++) { 00177 fingerprint.putc(zero); 00178 } 00179 wait_us(TIEMPO_ESPERA); 00180 FP_Flush(); 00181 00182 int unsigned first_cmd[] = {0x55, 0xAA, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01}; 00183 00184 for (i=0; i < COMMAND_PACKAGE_LENGTH; i++){ 00185 fingerprint.putc(first_cmd[i]); 00186 } 00187 /* 00188 command_package.Head1=COMMAND_START_CODE1; 00189 command_package.Head2=COMMAND_START_CODE2; 00190 command_package.wDevId=DEVICE_ID; 00191 command_package.nParam=0x00000000; //didn't get information 00192 command_package.wCmd=OPEN; 00193 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00194 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH);*/ 00195 wait_us(TIEMPO_ESPERA); 00196 FP_Flush(); 00197 00198 command_package.Head1=COMMAND_START_CODE1; 00199 command_package.Head2=COMMAND_START_CODE2; 00200 command_package.wDevId=DEVICE_ID; 00201 command_package.nParam=0x00000000; //didn't get information 00202 command_package.wCmd=UNKNOW; 00203 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00204 SendCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00205 wait_us(TIEMPO_ESPERA); 00206 FP_Flush(); 00207 00208 //send_receive_command(); 00209 //if(return_ack == FP_ACK) { 00210 return 0; 00211 //} else { 00212 // return -1; 00213 //} 00214 } 00215 00216 void FP_Close() { 00217 command_package.Head1=COMMAND_START_CODE1; 00218 command_package.Head2=COMMAND_START_CODE2; 00219 command_package.wDevId=DEVICE_ID; 00220 command_package.nParam=0x00000000; //didn't get information 00221 command_package.wCmd=CLOSE; 00222 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00223 send_NO_receive_command(); 00224 wait_us(200000); 00225 FP_Flush(); 00226 00227 command_package.Head1=COMMAND_START_CODE1; 00228 command_package.Head2=COMMAND_START_CODE2; 00229 command_package.wDevId=DEVICE_ID; 00230 command_package.nParam=9600; //didn't get information 00231 command_package.wCmd=CHANGE_BAUD; 00232 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00233 send_NO_receive_command(); 00234 wait_us(200000); 00235 FP_Flush(); 00236 } 00237 00238 00239 int FP_LED_open() { 00240 command_package.Head1=COMMAND_START_CODE1; 00241 command_package.Head2=COMMAND_START_CODE2; 00242 command_package.wDevId=DEVICE_ID; 00243 command_package.nParam=0x00000001; //open LED 00244 command_package.wCmd=CMOSLED; 00245 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00246 00247 send_receive_command(); 00248 if(return_ack == FP_ACK) { 00249 return 0; 00250 } else { 00251 return -1; 00252 } 00253 } 00254 00255 int FP_LED_close() { 00256 command_package.Head1=COMMAND_START_CODE1; 00257 command_package.Head2=COMMAND_START_CODE2; 00258 command_package.wDevId=DEVICE_ID; 00259 command_package.nParam=0x00000000; //close LED 00260 command_package.wCmd=CMOSLED; 00261 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00262 00263 send_receive_command(); 00264 if(return_ack == FP_ACK) { 00265 return 0; 00266 } else { 00267 return -1; 00268 } 00269 } 00270 00271 int FP_GetEnrollCount() { 00272 command_package.Head1=COMMAND_START_CODE1; 00273 command_package.Head2=COMMAND_START_CODE2; 00274 command_package.wDevId=DEVICE_ID; 00275 command_package.nParam=0x00000000; 00276 command_package.wCmd=GETENROLLCOUNT; 00277 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00278 00279 send_receive_command(); 00280 if(return_ack == FP_ACK) { 00281 return ((int) return_para); 00282 } else { 00283 return -1; 00284 } 00285 } 00286 00287 int FP_CheckEnrolled(int thisID) { 00288 command_package.Head1=COMMAND_START_CODE1; 00289 command_package.Head2=COMMAND_START_CODE2; 00290 command_package.wDevId=DEVICE_ID; 00291 command_package.nParam=thisID; 00292 command_package.wCmd=CHECK_ENROLLED; 00293 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00294 00295 send_receive_command(); 00296 if(return_ack == FP_ACK) { 00297 return 1; // Segun definicion TCA 00298 } else { 00299 return 0; 00300 } 00301 } 00302 00303 void FP_EnrollStart(int specify_ID) 00304 { 00305 command_package.Head1=COMMAND_START_CODE1; 00306 command_package.Head2=COMMAND_START_CODE2; 00307 command_package.wDevId=DEVICE_ID; 00308 command_package.nParam=specify_ID; 00309 command_package.wCmd=ENROLLSTART; 00310 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00311 00312 send_receive_command(); 00313 } 00314 00315 void FP_Enroll(int Enroll_define) 00316 { 00317 unsigned short Enroll_command; 00318 00319 switch(Enroll_define) 00320 { 00321 case 1: 00322 Enroll_command=ENROLL1; 00323 break; 00324 case 2: 00325 Enroll_command=ENROLL2; 00326 break; 00327 case 3: 00328 Enroll_command=ENROLL3; 00329 break; 00330 } 00331 command_package.Head1=COMMAND_START_CODE1; 00332 command_package.Head2=COMMAND_START_CODE2; 00333 command_package.wDevId=DEVICE_ID; 00334 command_package.nParam=0x00000000; 00335 command_package.wCmd=Enroll_command; 00336 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00337 00338 send_receive_command(); 00339 } 00340 00341 int FP_IsPressFinger() { 00342 command_package.Head1=COMMAND_START_CODE1; 00343 command_package.Head2=COMMAND_START_CODE2; 00344 command_package.wDevId=DEVICE_ID; 00345 command_package.nParam=0x00000000; 00346 command_package.wCmd=ISPRESSFINGER; 00347 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00348 00349 send_receive_command(); 00350 if(return_ack == FP_ACK) { 00351 return ((int) return_para); 00352 } else { 00353 return -1; 00354 } 00355 } 00356 00357 void FP_CaptureFinger(unsigned long picture_quality) { //0:normal picture, 1:best picture 00358 command_package.Head1=COMMAND_START_CODE1; 00359 command_package.Head2=COMMAND_START_CODE2; 00360 command_package.wDevId=DEVICE_ID; 00361 command_package.nParam=picture_quality; 00362 command_package.wCmd=CAPTURE_FINGER; 00363 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00364 00365 send_receive_command(); 00366 } 00367 00368 int FP_DeleteAll() { 00369 command_package.Head1=COMMAND_START_CODE1; 00370 command_package.Head2=COMMAND_START_CODE2; 00371 command_package.wDevId=DEVICE_ID; 00372 command_package.nParam=0x00000000; 00373 command_package.wCmd=DELETEALL; 00374 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00375 00376 send_receive_command(); 00377 if(return_ack == FP_ACK) { 00378 return 0; 00379 } else { 00380 return -1; 00381 } 00382 } 00383 00384 int FP_DeleteID(int thisID) { 00385 command_package.Head1=COMMAND_START_CODE1; 00386 command_package.Head2=COMMAND_START_CODE2; 00387 command_package.wDevId=DEVICE_ID; 00388 command_package.nParam=thisID; 00389 command_package.wCmd=DELETEID; 00390 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00391 00392 send_receive_command(); 00393 if(return_ack == FP_ACK) { 00394 return 0; 00395 } else { 00396 return -1; 00397 } 00398 } 00399 00400 int FP_Identify() { 00401 command_package.Head1=COMMAND_START_CODE1; 00402 command_package.Head2=COMMAND_START_CODE2; 00403 command_package.wDevId=DEVICE_ID; 00404 command_package.nParam=0x00000000; 00405 command_package.wCmd=IDENTIFY; 00406 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00407 00408 send_receive_command(); 00409 if(return_ack == FP_ACK) { 00410 return ((int) return_para); 00411 } else { 00412 return -1; 00413 } 00414 } 00415 00416 void FP_Sleep() { 00417 command_package.Head1=COMMAND_START_CODE1; 00418 command_package.Head2=COMMAND_START_CODE2; 00419 command_package.wDevId=DEVICE_ID; 00420 command_package.nParam=0x00000000; 00421 command_package.wCmd=STANDBY_MODE; 00422 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00423 00424 send_receive_command(); 00425 } 00426 00427 int FP_SetTemplate(int thisID, char * fingerData) { 00428 00429 unsigned char thisData_package[504]; 00430 unsigned int thisSend_checksum = 0; 00431 int xyz; 00432 command_package.Head1=COMMAND_START_CODE1; 00433 command_package.Head2=COMMAND_START_CODE2; 00434 command_package.wDevId=DEVICE_ID; 00435 command_package.nParam=thisID; 00436 command_package.wCmd=SETTEMPLATE; 00437 command_package.wChkSum=CalcChkSumOfCmdAckPkt(&command_package); 00438 00439 send_receive_command(); 00440 if (return_ack != FP_ACK) { 00441 return -1; 00442 } 00443 00444 thisData_package[0] = DATA_START_CODE1; 00445 thisData_package[1] = DATA_START_CODE2; 00446 thisData_package[2] = 0x01; 00447 thisData_package[3] = 0x00; 00448 for (xyz = 4; xyz <= 501; xyz++) { 00449 thisData_package[xyz] = fingerData[xyz -4]; 00450 } 00451 for (xyz = 0; xyz < 502; xyz++) { 00452 thisSend_checksum = thisSend_checksum + thisData_package[xyz]; 00453 } 00454 thisData_package[502] = thisSend_checksum&0x00FF; 00455 thisData_package[503] = thisSend_checksum>>8; 00456 00457 for(xyz = 0; xyz < 504; xyz++) { 00458 fingerprint.putc(thisData_package[xyz]); 00459 } 00460 00461 ReceiveCommand(&command_package.Head1,COMMAND_PACKAGE_LENGTH); 00462 return_ack=command_package.wCmd; 00463 00464 if(return_ack == FP_ACK) { 00465 return 0; 00466 } else { 00467 return -1; 00468 } 00469 } 00470 00471 void FP_Flush() { 00472 if(fingerprint.readable()) { 00473 while(fingerprint.readable()){ 00474 fingerprint.getc(); 00475 } 00476 } 00477 }
Generated on Thu Jul 28 2022 19:27:02 by 1.7.2