Time Stamp using fingerprint with WIZwiki-W7500.

Dependencies:   GT511C3 NTPClient SDFileSystem WIZnetInterface mbed-src

Fork of GT511C3_HelloWorld_WIZwiki-W7500 by WIZnet

Committer:
tosihisa
Date:
Fri Jan 03 12:56:03 2014 +0000
Revision:
3:459a4f985a45
Parent:
2:34a647292050
Child:
4:3dd0f98e6f09
Add Enroll and Identify!;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tosihisa 0:b11b455d4997 1
tosihisa 0:b11b455d4997 2 #include "mbed.h"
tosihisa 0:b11b455d4997 3 #include "GT511C3.h"
tosihisa 0:b11b455d4997 4
tosihisa 0:b11b455d4997 5 #define SET_AND_SUMADD(idx,val) sendbuf[idx]=((unsigned char)(val));sum += sendbuf[idx]
tosihisa 0:b11b455d4997 6
tosihisa 0:b11b455d4997 7 int GT511C3::Init(void)
tosihisa 0:b11b455d4997 8 {
tosihisa 0:b11b455d4997 9 baud(9600);
tosihisa 0:b11b455d4997 10 ClearLine();
tosihisa 0:b11b455d4997 11 return 0;
tosihisa 0:b11b455d4997 12 }
tosihisa 0:b11b455d4997 13
tosihisa 0:b11b455d4997 14 int GT511C3::SendCommand(unsigned long Parameter,unsigned short Command)
tosihisa 0:b11b455d4997 15 {
tosihisa 0:b11b455d4997 16 unsigned char sendbuf[12];
tosihisa 0:b11b455d4997 17 unsigned short sum = 0;
tosihisa 0:b11b455d4997 18 int idx = 0;
tosihisa 0:b11b455d4997 19 int i;
tosihisa 0:b11b455d4997 20
tosihisa 0:b11b455d4997 21 SET_AND_SUMADD(idx,0x55); idx++;
tosihisa 0:b11b455d4997 22 SET_AND_SUMADD(idx,0xAA); idx++;
tosihisa 0:b11b455d4997 23 SET_AND_SUMADD(idx,0x01); idx++;
tosihisa 0:b11b455d4997 24 SET_AND_SUMADD(idx,0x00); idx++;
tosihisa 0:b11b455d4997 25 SET_AND_SUMADD(idx,Parameter & 0xff); idx++;
tosihisa 0:b11b455d4997 26 SET_AND_SUMADD(idx,(Parameter >> 8) & 0xff); idx++;
tosihisa 0:b11b455d4997 27 SET_AND_SUMADD(idx,(Parameter >> 16) & 0xff); idx++;
tosihisa 0:b11b455d4997 28 SET_AND_SUMADD(idx,(Parameter >> 24) & 0xff); idx++;
tosihisa 0:b11b455d4997 29 SET_AND_SUMADD(idx,Command & 0xff); idx++;
tosihisa 0:b11b455d4997 30 SET_AND_SUMADD(idx,(Command >> 8) & 0xff); idx++;
tosihisa 0:b11b455d4997 31 sendbuf[idx] = sum & 0xff; idx++;
tosihisa 0:b11b455d4997 32 sendbuf[idx] = (sum >> 8) & 0xff; idx++;
tosihisa 0:b11b455d4997 33
tosihisa 0:b11b455d4997 34 for(i = 0;i < idx;i++){
tosihisa 0:b11b455d4997 35 while(!writeable());
tosihisa 0:b11b455d4997 36 putc(sendbuf[i]);
tosihisa 0:b11b455d4997 37 }
tosihisa 2:34a647292050 38 return 0;
tosihisa 0:b11b455d4997 39 }
tosihisa 0:b11b455d4997 40
tosihisa 0:b11b455d4997 41 int GT511C3::RecvResponse(unsigned long *Parameter,unsigned short *Response)
tosihisa 0:b11b455d4997 42 {
tosihisa 0:b11b455d4997 43 unsigned char buf[12];
tosihisa 0:b11b455d4997 44 unsigned short sum = 0;
tosihisa 0:b11b455d4997 45 int i;
tosihisa 0:b11b455d4997 46
tosihisa 0:b11b455d4997 47 *Parameter = 0;
tosihisa 0:b11b455d4997 48 *Response = CMD_Nack;
tosihisa 0:b11b455d4997 49
tosihisa 0:b11b455d4997 50 for(i = 0;i < sizeof(buf);i++){
tosihisa 0:b11b455d4997 51 while(!readable());
tosihisa 0:b11b455d4997 52 buf[i] = getc();
tosihisa 0:b11b455d4997 53 if(i < 9){
tosihisa 0:b11b455d4997 54 sum += buf[i];
tosihisa 0:b11b455d4997 55 }
tosihisa 0:b11b455d4997 56 if((i == 0) && (buf[i] != 0x55))
tosihisa 0:b11b455d4997 57 return -1;
tosihisa 0:b11b455d4997 58 if((i == 1) && (buf[i] != 0xAA))
tosihisa 0:b11b455d4997 59 return -1;
tosihisa 0:b11b455d4997 60 }
tosihisa 0:b11b455d4997 61 if(buf[10] != (sum & 0xff))
tosihisa 0:b11b455d4997 62 return -2;
tosihisa 0:b11b455d4997 63 if(buf[11] != ((sum >> 8) & 0xff))
tosihisa 0:b11b455d4997 64 return -2;
tosihisa 0:b11b455d4997 65
tosihisa 0:b11b455d4997 66 *Parameter = buf[7];
tosihisa 0:b11b455d4997 67 *Parameter = (*Parameter << 8) | buf[6];
tosihisa 0:b11b455d4997 68 *Parameter = (*Parameter << 8) | buf[5];
tosihisa 0:b11b455d4997 69 *Parameter = (*Parameter << 8) | buf[4];
tosihisa 0:b11b455d4997 70
tosihisa 0:b11b455d4997 71 *Response = buf[9];
tosihisa 0:b11b455d4997 72 *Response = (*Response << 8) | buf[8];
tosihisa 0:b11b455d4997 73
tosihisa 0:b11b455d4997 74 return 0;
tosihisa 0:b11b455d4997 75 }
tosihisa 0:b11b455d4997 76
tosihisa 2:34a647292050 77 int GT511C3::SendRecv(unsigned short Command,unsigned long *Parameter,unsigned short *Response)
tosihisa 2:34a647292050 78 {
tosihisa 2:34a647292050 79 int sts;
tosihisa 2:34a647292050 80 sts = SendCommand(*Parameter,Command);
tosihisa 2:34a647292050 81 if(sts == 0){
tosihisa 2:34a647292050 82 sts = RecvResponse(Parameter,Response);
tosihisa 2:34a647292050 83 }
tosihisa 2:34a647292050 84 return sts;
tosihisa 2:34a647292050 85 }
tosihisa 2:34a647292050 86
tosihisa 0:b11b455d4997 87 int GT511C3::ClearLine(void)
tosihisa 0:b11b455d4997 88 {
tosihisa 0:b11b455d4997 89 while(readable()){
tosihisa 0:b11b455d4997 90 (void)getc();
tosihisa 0:b11b455d4997 91 }
tosihisa 0:b11b455d4997 92 return 0;
tosihisa 0:b11b455d4997 93 }
tosihisa 0:b11b455d4997 94
tosihisa 3:459a4f985a45 95 int GT511C3::WaitPress(int press)
tosihisa 3:459a4f985a45 96 {
tosihisa 3:459a4f985a45 97 while(IsPress() != press);
tosihisa 3:459a4f985a45 98 return 0;
tosihisa 3:459a4f985a45 99 }
tosihisa 3:459a4f985a45 100
tosihisa 3:459a4f985a45 101 int GT511C3::CmosLed(int onoff)
tosihisa 3:459a4f985a45 102 {
tosihisa 3:459a4f985a45 103 unsigned long Parameter = onoff & 1;
tosihisa 3:459a4f985a45 104 unsigned short Response = 0;
tosihisa 3:459a4f985a45 105 int sts = 0;
tosihisa 3:459a4f985a45 106
tosihisa 3:459a4f985a45 107 sts = SendRecv(CMD_CmosLed,&Parameter,&Response);
tosihisa 3:459a4f985a45 108 if((sts != 0) || (Response != CMD_Ack))
tosihisa 3:459a4f985a45 109 return -1;
tosihisa 3:459a4f985a45 110 return 0;
tosihisa 3:459a4f985a45 111 }
tosihisa 3:459a4f985a45 112
tosihisa 3:459a4f985a45 113 int GT511C3::IsPress(void)
tosihisa 3:459a4f985a45 114 {
tosihisa 3:459a4f985a45 115 unsigned long Parameter = 0;
tosihisa 3:459a4f985a45 116 unsigned short Response = 0;
tosihisa 3:459a4f985a45 117 int sts = 0;
tosihisa 3:459a4f985a45 118 sts = SendRecv(CMD_IsPressFinger,&Parameter,&Response);
tosihisa 3:459a4f985a45 119 if((sts != 0) || (Response != CMD_Ack))
tosihisa 3:459a4f985a45 120 return 0;
tosihisa 3:459a4f985a45 121 if(Parameter != 0)
tosihisa 3:459a4f985a45 122 return 0;
tosihisa 3:459a4f985a45 123 return 1;
tosihisa 3:459a4f985a45 124 }
tosihisa 3:459a4f985a45 125
tosihisa 3:459a4f985a45 126 int GT511C3::Capture(int best)
tosihisa 3:459a4f985a45 127 {
tosihisa 3:459a4f985a45 128 unsigned long Parameter = best;
tosihisa 3:459a4f985a45 129 unsigned short Response = 0;
tosihisa 3:459a4f985a45 130 int sts = 0;
tosihisa 3:459a4f985a45 131
tosihisa 3:459a4f985a45 132 sts = SendRecv(CMD_CaptureFinger,&Parameter,&Response);
tosihisa 3:459a4f985a45 133 if((sts != 0) || (Response != CMD_Ack))
tosihisa 3:459a4f985a45 134 return -1;
tosihisa 3:459a4f985a45 135 return 0;
tosihisa 3:459a4f985a45 136 }
tosihisa 3:459a4f985a45 137
tosihisa 3:459a4f985a45 138 int GT511C3::Enroll_N(int N)
tosihisa 3:459a4f985a45 139 {
tosihisa 3:459a4f985a45 140 unsigned long Parameter = 0;
tosihisa 3:459a4f985a45 141 unsigned short Response = 0;
tosihisa 3:459a4f985a45 142 int sts = 0;
tosihisa 3:459a4f985a45 143 enum Command cmd;
tosihisa 3:459a4f985a45 144
tosihisa 3:459a4f985a45 145 switch(N){
tosihisa 3:459a4f985a45 146 default:
tosihisa 3:459a4f985a45 147 case 1: cmd = CMD_Enroll1; break;
tosihisa 3:459a4f985a45 148 case 2: cmd = CMD_Enroll2; break;
tosihisa 3:459a4f985a45 149 case 3: cmd = CMD_Enroll3; break;
tosihisa 3:459a4f985a45 150 }
tosihisa 3:459a4f985a45 151 sts = SendRecv(cmd,&Parameter,&Response);
tosihisa 3:459a4f985a45 152 if((sts != 0) || (Response != CMD_Ack))
tosihisa 3:459a4f985a45 153 return -1;
tosihisa 3:459a4f985a45 154 return 0;
tosihisa 3:459a4f985a45 155 }
tosihisa 3:459a4f985a45 156
tosihisa 3:459a4f985a45 157 int GT511C3::Identify(void)
tosihisa 2:34a647292050 158 {
tosihisa 2:34a647292050 159 unsigned long Parameter = 0;
tosihisa 2:34a647292050 160 unsigned short Response = 0;
tosihisa 2:34a647292050 161 int sts = 0;
tosihisa 2:34a647292050 162
tosihisa 3:459a4f985a45 163 sts = SendRecv(CMD_Identify,&Parameter,&Response);
tosihisa 3:459a4f985a45 164 if((sts != 0) || (Response != CMD_Ack))
tosihisa 3:459a4f985a45 165 return -1;
tosihisa 3:459a4f985a45 166 return Parameter;
tosihisa 2:34a647292050 167 }