Library for R306 fingerprint module
Dependents: R306_fingerprintmodule_WizwikiW7500
Fork of GT511C3 by
FPC_R306.cpp
- Committer:
- Albinarackal
- Date:
- 2018-07-16
- Revision:
- 2:12ca31a7364e
File content as of revision 2:12ca31a7364e:
//......Created by the CDI KENGERI TEAM (CHRIST(Deemed to be University)) Bangalore, Karnataka, India..........// #include "mbed.h" #include "FPC_R306.hpp" Serial FPC(PA_13,PA_14); Serial lib(USBTX,USBRX); #define SET_AND_SUMADD(idx,val) sendbuf[idx]=((unsigned char)(val));//sum += sendbuf[idx] /*int FPC_R306::Init(void) { baud(57600); ClearLine(); return 0; }*/ int FPC_R306::CMD_GETIMG() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type FPC.putc(0x00); //length FPC.putc(0x03); //length FPC.putc(0x01); //command FPC.putc(0x00); //Checksum FPC.putc(0x05); //Checksum uint8_t resp = RecvResponse(); return resp; } int FPC_R306::CMD_IMG2Tz1() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x04); //datalength FPC.putc(0x02); //command FPC.putc(0x01); //slot number FPC.putc(0x00); //Checksum FPC.putc(0x08); //Checksum uint8_t resp = RecvResponse(); return resp; } int FPC_R306::CMD_IMG2Tz2() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x04); //datalength FPC.putc(0x02); //command FPC.putc(0x02); //slot number FPC.putc(0x00); //Checksum FPC.putc(0x09); //Checksum uint8_t resp = RecvResponse(); return resp; } int FPC_R306::createModel() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x03); //datalength FPC.putc(0x05); //command FPC.putc(0x00); //Checksum FPC.putc(0x09); //Checksum uint8_t resp = RecvResponse(); return resp; } int FPC_R306:: STORE_MODEL(uint16_t id) { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x06); //datalength FPC.putc(0x06); //command FPC.putc(0x01); //bufferID uint8_t sum = 0x0E; //type + datalength + command + BufferID FPC.putc((uint8_t)(id >> 8)); FPC.putc((uint8_t)(id & 0xFF)); uint16_t checksum = ((uint8_t)(sum & 0xFF) + (uint8_t)(id >> 8) + (uint8_t)(id & 0xFF)); //checkssum = type + datalength + command + BufferID + ID FPC.putc((uint8_t)(checksum >> 8)); //Checksum FPC.putc((uint8_t) (checksum & 0xFF)); //Checksum uint8_t resp = RecvResponse(); return resp; } uint8_t FPC_R306::RecvResponse() { FPC.baud(57600); //lib.printf("Waiting for response\n"); uint8_t byte[12]; int i=0; for(i=0;i<12;i++) { byte[i] = FPC.getc(); } //lib.printf("Reading Done\n"); return byte[9]; } uint8_t FPC_R306 :: FAST_SEARCH() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x08); //datalength FPC.putc(0x1B); //command FPC.putc(0x01); //CharBuffer FPC.putc(0x00); //Start Page FPC.putc(0x00); //Start Page FPC.putc(0x00); //Page Num FPC.putc(0xA3); //Page Num FPC.putc(0x00); //Checksum FPC.putc(0xC8); //Checksum uint8_t resp = Recv_FAST_SEARCH(); return resp; } uint8_t FPC_R306 :: TMPL_COUNT() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x03); //datalength FPC.putc(0x1D); //command FPC.putc(0x00); //Checksum FPC.putc(0x21); //Checksum uint8_t resp = Recv_TMPL_COUNT(); return resp; } uint8_t FPC_R306 :: DELETE_ID(uint16_t id) { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x07); //datalength FPC.putc(0x0C); //command FPC.putc((uint8_t) id >>8 ); //ID num (Page Num) FPC.putc((uint8_t) id & 0xFF); //ID num (Page Num) FPC.putc(0x00); //Number of templates FPC.putc(0x01); //Number of templates uint8_t sum = 0x15; // sum = type + datalength + command + no. of templates uint16_t checksum = ((uint8_t)(sum & 0xFF) + (uint8_t)(id >> 8) + (uint8_t)(id & 0xFF)); FPC.putc((uint8_t)(checksum >> 8)); //Checksum FPC.putc((uint8_t)(checksum & 0xFF)); //Checksum uint8_t resp = RecvResponse(); return resp; } uint8_t FPC_R306 :: EMPTY_LIB() { FPC.baud(57600); FPC.putc(0xEF); //start_code FPC.putc(0x01); //start_code FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0xFF); //address FPC.putc(0x01); //type (package identifier) FPC.putc(0x00); //datalength FPC.putc(0x03); //datalength FPC.putc(0x0D); //command FPC.putc(0x00); //Checksum FPC.putc(0x11); //Checksum uint8_t resp = RecvResponse(); return resp; } uint8_t FPC_R306 :: Recv_TMPL_COUNT() { FPC.baud(57600); //lib.printf("Waiting for response\n"); uint8_t byte[14]; int i=0; for(i=0;i<14;i++) { byte[i] = FPC.getc(); } templatecount = byte[10]; templatecount <<=8; templatecount |= byte[11]; return byte[9]; } uint8_t FPC_R306:: Recv_FAST_SEARCH() { FPC.baud(57600); //lib.printf("Waiting for response\n"); uint8_t byte[16]; int i=0; for(i=0;i<16;i++) { byte[i] = FPC.getc(); } fingerID = byte[10]; fingerID <<=8; fingerID |= byte[11]; MatchScore = byte[12]; MatchScore <<=8; MatchScore |= byte[13]; return byte[9]; }