Time Stamp using fingerprint with WIZwiki-W7500.
Dependencies: GT511C3 NTPClient SDFileSystem WIZnetInterface mbed-src
Fork of GT511C3_HelloWorld_WIZwiki-W7500 by
Revision 3:459a4f985a45, committed 2014-01-03
- Comitter:
- tosihisa
- Date:
- Fri Jan 03 12:56:03 2014 +0000
- Parent:
- 2:34a647292050
- Child:
- 4:3dd0f98e6f09
- Commit message:
- Add Enroll and Identify!;
Changed in this revision
--- a/GT511C3.cpp Fri Jan 03 07:24:39 2014 +0000
+++ b/GT511C3.cpp Fri Jan 03 12:56:03 2014 +0000
@@ -92,18 +92,76 @@
return 0;
}
-int GT511C3::WaitPress(void)
+int GT511C3::WaitPress(int press)
+{
+ while(IsPress() != press);
+ return 0;
+}
+
+int GT511C3::CmosLed(int onoff)
+{
+ unsigned long Parameter = onoff & 1;
+ unsigned short Response = 0;
+ int sts = 0;
+
+ sts = SendRecv(CMD_CmosLed,&Parameter,&Response);
+ if((sts != 0) || (Response != CMD_Ack))
+ return -1;
+ return 0;
+}
+
+int GT511C3::IsPress(void)
+{
+ unsigned long Parameter = 0;
+ unsigned short Response = 0;
+ int sts = 0;
+ sts = SendRecv(CMD_IsPressFinger,&Parameter,&Response);
+ if((sts != 0) || (Response != CMD_Ack))
+ return 0;
+ if(Parameter != 0)
+ return 0;
+ return 1;
+}
+
+int GT511C3::Capture(int best)
+{
+ unsigned long Parameter = best;
+ unsigned short Response = 0;
+ int sts = 0;
+
+ sts = SendRecv(CMD_CaptureFinger,&Parameter,&Response);
+ if((sts != 0) || (Response != CMD_Ack))
+ return -1;
+ return 0;
+}
+
+int GT511C3::Enroll_N(int N)
+{
+ unsigned long Parameter = 0;
+ unsigned short Response = 0;
+ int sts = 0;
+ enum Command cmd;
+
+ switch(N){
+ default:
+ case 1: cmd = CMD_Enroll1; break;
+ case 2: cmd = CMD_Enroll2; break;
+ case 3: cmd = CMD_Enroll3; break;
+ }
+ sts = SendRecv(cmd,&Parameter,&Response);
+ if((sts != 0) || (Response != CMD_Ack))
+ return -1;
+ return 0;
+}
+
+int GT511C3::Identify(void)
{
unsigned long Parameter = 0;
unsigned short Response = 0;
int sts = 0;
- while(1){
- sts = SendRecv(CMD_IsPressFinger,&Parameter,&Response);
- if(sts != 0)
- break;
- if((Response == CMD_Ack) && (Parameter == 0))
- break;
- }
- return sts;
+ sts = SendRecv(CMD_Identify,&Parameter,&Response);
+ if((sts != 0) || (Response != CMD_Ack))
+ return -1;
+ return Parameter;
}
--- a/GT511C3.h Fri Jan 03 07:24:39 2014 +0000
+++ b/GT511C3.h Fri Jan 03 12:56:03 2014 +0000
@@ -62,5 +62,10 @@
int RecvResponse(unsigned long *Parameter,unsigned short *Response);
int SendRecv(unsigned short Command,unsigned long *Parameter,unsigned short *Response);
int ClearLine(void);
- int WaitPress(void);
+ int WaitPress(int press);
+ int CmosLed(int onoff);
+ int IsPress(void);
+ int Capture(int best);
+ int Enroll_N(int N);
+ int Identify(void);
};
--- a/main.cpp Fri Jan 03 07:24:39 2014 +0000
+++ b/main.cpp Fri Jan 03 12:56:03 2014 +0000
@@ -13,16 +13,62 @@
unsigned short Response = 0;
int sts = 0;
- debug.printf("CMD_EnrollStart\n");
- Parameter = EnrollID;
- sts = finger.SendRecv(GT511C3::CMD_EnrollStart,&Parameter,&Response);
- debug.printf("sts = %d,Response=0x%04x Parameter=0x%08lx\n",sts,Response,Parameter);
- if(sts != 0)
- return sts;
- if(Response != GT511C3::CMD_Ack)
- return -100;
- //
- return sts;
+ debug.printf("EnrollStart\n");
+ finger.CmosLed(1);
+
+ while(1){
+ debug.printf("CMD_EnrollStart\n");
+ Parameter = EnrollID;
+ sts = finger.SendRecv(GT511C3::CMD_EnrollStart,&Parameter,&Response);
+ debug.printf("sts = %d,Response=0x%04x Parameter=0x%08lx\n",sts,Response,Parameter);
+ if(sts != 0)
+ return sts;
+ if(Response != GT511C3::CMD_Ack)
+ return -100;
+
+ debug.printf("Remove finger\n");
+ finger.WaitPress(0);
+
+ while(1){
+ debug.printf("Press finger to Enroll (1st)\n");
+ finger.WaitPress(1);
+ if(finger.Capture(1) == 0)
+ break;
+ }
+
+ debug.printf("Remove finger\n");
+ if(finger.Enroll_N(1) != 0)
+ continue;
+ finger.WaitPress(0);
+
+ while(1){
+ debug.printf("Press finger to Enroll (2nd)\n");
+ finger.WaitPress(1);
+ if(finger.Capture(1) == 0)
+ break;
+ }
+
+ debug.printf("Remove finger\n");
+ if(finger.Enroll_N(2) != 0)
+ continue;
+ finger.WaitPress(0);
+
+ while(1){
+ debug.printf("Press finger to Enroll (3rd)\n");
+ finger.WaitPress(1);
+ if(finger.Capture(1) == 0)
+ break;
+ }
+
+ debug.printf("Remove finger\n");
+ if(finger.Enroll_N(3) != 0)
+ continue;
+ finger.WaitPress(0);
+
+ debug.printf("Enroll OK!\n");
+ break;
+ }
+ return 0;
}
int main() {
@@ -31,6 +77,7 @@
int sts = 0;
int count = 0;
int ispress;
+ int ID;
debug.format(8,Serial::None,1);
debug.baud(115200);
@@ -42,18 +89,19 @@
sts = finger.SendRecv(GT511C3::CMD_Open,&Parameter,&Response);
debug.printf("sts = %d,Response=0x%04x\n",sts,Response);
- Parameter = 1;
- sts = finger.SendRecv(GT511C3::CMD_CmosLed,&Parameter,&Response);
- debug.printf("sts = %d,Response=0x%04x\n",sts,Response);
+ if(1){
+ Enroll();
+ }
+
+ finger.CmosLed(1);
while(1) {
- ispress = 0;
- Parameter = 0;
- sts = finger.SendRecv(GT511C3::CMD_IsPressFinger,&Parameter,&Response);
- debug.printf("sts = %d,Response=0x%04x Parameter=0x%08lx\n",sts,Response,Parameter);
- if(sts == 0){
- if((Response == GT511C3::CMD_Ack) && (Parameter == 0)){
- ispress = 1;
- }
+ ispress = finger.IsPress();
+ debug.printf("IsPressFinger=%d\n",ispress);
+ if(ispress){
+ if(finger.Capture(1) != 0)
+ continue;
+ ID = finger.Identify();
+ debug.printf("ID = %d\n",ID);
}
#if 0
myled = 1;
