Time Stamp using fingerprint with WIZwiki-W7500.
Dependencies: GT511C3 NTPClient SDFileSystem WIZnetInterface mbed-src
Fork of GT511C3_HelloWorld_WIZwiki-W7500 by
GT511C3.cpp@3:459a4f985a45, 2014-01-03 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
