GT511C3

Dependents:   Identification_GT-521F52

Committer:
ROUCHDI
Date:
Wed Jun 24 15:21:17 2020 +0000
Revision:
3:51e164839c0d
Parent:
2:8fa6daf39d91
Projet GT-521F52

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tosihisa 0:90c64cb9db58 1 /**
tosihisa 0:90c64cb9db58 2 * @section LICENSE
tosihisa 0:90c64cb9db58 3 *
tosihisa 0:90c64cb9db58 4 * Copyright (c) 2013 @tosihisa, MIT License
tosihisa 0:90c64cb9db58 5 *
ROUCHDI 3:51e164839c0d 6 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
ROUCHDI 3:51e164839c0d 7 * and associated documentation files (the "Software"), to deal in the Software without restriction,
ROUCHDI 3:51e164839c0d 8 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
ROUCHDI 3:51e164839c0d 9 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
tosihisa 0:90c64cb9db58 10 * furnished to do so, subject to the following conditions:
tosihisa 0:90c64cb9db58 11 *
ROUCHDI 3:51e164839c0d 12 * The above copyright notice and this permission notice shall be included in all copies or
tosihisa 0:90c64cb9db58 13 * substantial portions of the Software.
tosihisa 0:90c64cb9db58 14 *
ROUCHDI 3:51e164839c0d 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
ROUCHDI 3:51e164839c0d 16 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
ROUCHDI 3:51e164839c0d 17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
ROUCHDI 3:51e164839c0d 18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
tosihisa 0:90c64cb9db58 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
tosihisa 0:90c64cb9db58 20 *
tosihisa 0:90c64cb9db58 21 * @section DESCRIPTION
tosihisa 0:90c64cb9db58 22 *
tosihisa 0:90c64cb9db58 23 * Fingerprint reader module "GT-511C3" class.
tosihisa 0:90c64cb9db58 24 *
tosihisa 0:90c64cb9db58 25 * http://www.adh-tech.com.tw/?22,gt-511c3-gt-511c31
tosihisa 0:90c64cb9db58 26 * http://www.adh-tech.com.tw/files/GT-511C3_datasheet_V1%201_20131127[1].pdf
tosihisa 0:90c64cb9db58 27 * https://www.sparkfun.com/products/11792
ROUCHDI 3:51e164839c0d 28 * https://github.com/sparkfun/Fingerprint_Scanner-TTL/
tosihisa 0:90c64cb9db58 29 */
tosihisa 0:90c64cb9db58 30
tosihisa 0:90c64cb9db58 31 #include "mbed.h"
tosihisa 0:90c64cb9db58 32 #include "GT511C3.hpp"
tosihisa 0:90c64cb9db58 33
ROUCHDI 3:51e164839c0d 34 #include "stm32746g_discovery_lcd.h"
ROUCHDI 3:51e164839c0d 35 #include "stm32746g_discovery_ts.h"
ROUCHDI 3:51e164839c0d 36
tosihisa 0:90c64cb9db58 37 #define SET_AND_SUMADD(idx,val) sendbuf[idx]=((unsigned char)(val));sum += sendbuf[idx]
tosihisa 0:90c64cb9db58 38
tosihisa 0:90c64cb9db58 39 int GT511C3::Init(void)
tosihisa 0:90c64cb9db58 40 {
tosihisa 0:90c64cb9db58 41 baud(9600);
tosihisa 0:90c64cb9db58 42 ClearLine();
tosihisa 0:90c64cb9db58 43 return 0;
tosihisa 0:90c64cb9db58 44 }
tosihisa 0:90c64cb9db58 45
tosihisa 0:90c64cb9db58 46 int GT511C3::SendCommand(unsigned long Parameter,unsigned short Command)
tosihisa 0:90c64cb9db58 47 {
tosihisa 0:90c64cb9db58 48 unsigned char sendbuf[12];
tosihisa 0:90c64cb9db58 49 unsigned short sum = 0;
tosihisa 0:90c64cb9db58 50 int idx = 0;
tosihisa 0:90c64cb9db58 51 int i;
tosihisa 0:90c64cb9db58 52
ROUCHDI 3:51e164839c0d 53 SET_AND_SUMADD(idx,0x55);
ROUCHDI 3:51e164839c0d 54 idx++;
ROUCHDI 3:51e164839c0d 55 SET_AND_SUMADD(idx,0xAA);
ROUCHDI 3:51e164839c0d 56 idx++;
ROUCHDI 3:51e164839c0d 57 SET_AND_SUMADD(idx,0x01);
ROUCHDI 3:51e164839c0d 58 idx++;
ROUCHDI 3:51e164839c0d 59 SET_AND_SUMADD(idx,0x00);
ROUCHDI 3:51e164839c0d 60 idx++;
ROUCHDI 3:51e164839c0d 61 SET_AND_SUMADD(idx,Parameter & 0xff);
ROUCHDI 3:51e164839c0d 62 idx++;
ROUCHDI 3:51e164839c0d 63 SET_AND_SUMADD(idx,(Parameter >> 8) & 0xff);
ROUCHDI 3:51e164839c0d 64 idx++;
ROUCHDI 3:51e164839c0d 65 SET_AND_SUMADD(idx,(Parameter >> 16) & 0xff);
ROUCHDI 3:51e164839c0d 66 idx++;
ROUCHDI 3:51e164839c0d 67 SET_AND_SUMADD(idx,(Parameter >> 24) & 0xff);
ROUCHDI 3:51e164839c0d 68 idx++;
ROUCHDI 3:51e164839c0d 69 SET_AND_SUMADD(idx,Command & 0xff);
ROUCHDI 3:51e164839c0d 70 idx++;
ROUCHDI 3:51e164839c0d 71 SET_AND_SUMADD(idx,(Command >> 8) & 0xff);
ROUCHDI 3:51e164839c0d 72 idx++;
ROUCHDI 3:51e164839c0d 73 sendbuf[idx] = sum & 0xff;
ROUCHDI 3:51e164839c0d 74 idx++;
ROUCHDI 3:51e164839c0d 75 sendbuf[idx] = (sum >> 8) & 0xff;
ROUCHDI 3:51e164839c0d 76 idx++;
tosihisa 0:90c64cb9db58 77
ROUCHDI 3:51e164839c0d 78 for(i = 0; i < idx; i++) {
tosihisa 0:90c64cb9db58 79 while(!writeable());
tosihisa 0:90c64cb9db58 80 putc(sendbuf[i]);
tosihisa 0:90c64cb9db58 81 }
tosihisa 0:90c64cb9db58 82 return 0;
tosihisa 0:90c64cb9db58 83 }
tosihisa 0:90c64cb9db58 84
tosihisa 0:90c64cb9db58 85 int GT511C3::RecvResponse(unsigned long *Parameter,unsigned short *Response)
tosihisa 0:90c64cb9db58 86 {
tosihisa 0:90c64cb9db58 87 const unsigned char fixedbuf[4] = { 0x55,0xAA,0x01,0x00 };
tosihisa 0:90c64cb9db58 88 unsigned char buf[12];
tosihisa 0:90c64cb9db58 89 unsigned short sum = 0;
tosihisa 0:90c64cb9db58 90 int i;
tosihisa 0:90c64cb9db58 91
tosihisa 0:90c64cb9db58 92 *Parameter = 0;
tosihisa 0:90c64cb9db58 93 *Response = CMD_Nack;
tosihisa 0:90c64cb9db58 94
ROUCHDI 3:51e164839c0d 95 for(i = 0; i < sizeof(buf); i++) {
tosihisa 0:90c64cb9db58 96 while(!readable());
tosihisa 0:90c64cb9db58 97 buf[i] = getc();
ROUCHDI 3:51e164839c0d 98 if(i < 9) {
tosihisa 0:90c64cb9db58 99 sum += buf[i];
tosihisa 0:90c64cb9db58 100 }
ROUCHDI 3:51e164839c0d 101 if(i < 4) {
ROUCHDI 3:51e164839c0d 102 if(buf[i] != fixedbuf[i]) {
tosihisa 0:90c64cb9db58 103 return -1;
tosihisa 0:90c64cb9db58 104 }
tosihisa 0:90c64cb9db58 105 }
tosihisa 0:90c64cb9db58 106 }
tosihisa 0:90c64cb9db58 107 if(buf[10] != (sum & 0xff))
tosihisa 0:90c64cb9db58 108 return -2;
tosihisa 0:90c64cb9db58 109 if(buf[11] != ((sum >> 8) & 0xff))
tosihisa 0:90c64cb9db58 110 return -2;
tosihisa 0:90c64cb9db58 111
tosihisa 0:90c64cb9db58 112 *Parameter = buf[7];
tosihisa 0:90c64cb9db58 113 *Parameter = (*Parameter << 8) | buf[6];
tosihisa 0:90c64cb9db58 114 *Parameter = (*Parameter << 8) | buf[5];
tosihisa 0:90c64cb9db58 115 *Parameter = (*Parameter << 8) | buf[4];
tosihisa 0:90c64cb9db58 116
tosihisa 0:90c64cb9db58 117 *Response = buf[9];
tosihisa 0:90c64cb9db58 118 *Response = (*Response << 8) | buf[8];
tosihisa 0:90c64cb9db58 119
tosihisa 0:90c64cb9db58 120 return 0;
tosihisa 0:90c64cb9db58 121 }
tosihisa 0:90c64cb9db58 122
beanmachine44 1:aa0bd9bd1c56 123 int GT511C3::SendData(unsigned char *data,unsigned long size)
beanmachine44 1:aa0bd9bd1c56 124 {
beanmachine44 1:aa0bd9bd1c56 125 const unsigned char fixedbuf[4] = { 0x5A,0xA5,0x01,0x00 };
beanmachine44 1:aa0bd9bd1c56 126 unsigned short sum = 0;
beanmachine44 1:aa0bd9bd1c56 127 int i;
beanmachine44 1:aa0bd9bd1c56 128
ROUCHDI 3:51e164839c0d 129 for(i = 0; i < 4; i++) {
beanmachine44 1:aa0bd9bd1c56 130 while(!writeable());
beanmachine44 1:aa0bd9bd1c56 131 putc(fixedbuf[i]);
beanmachine44 1:aa0bd9bd1c56 132 sum += fixedbuf[i];
ROUCHDI 3:51e164839c0d 133 }
ROUCHDI 3:51e164839c0d 134
ROUCHDI 3:51e164839c0d 135 for(i = 0; i < size; i++) {
beanmachine44 1:aa0bd9bd1c56 136 while(!writeable());
beanmachine44 1:aa0bd9bd1c56 137 putc(data[i]);
beanmachine44 1:aa0bd9bd1c56 138 sum += data[i];
beanmachine44 1:aa0bd9bd1c56 139 }
ROUCHDI 3:51e164839c0d 140
beanmachine44 1:aa0bd9bd1c56 141 while(!writeable());
beanmachine44 1:aa0bd9bd1c56 142 putc((unsigned char)(sum & 0xff));
beanmachine44 1:aa0bd9bd1c56 143 while(!writeable());
beanmachine44 1:aa0bd9bd1c56 144 putc((unsigned char)((sum >> 8) & 0xff));
ROUCHDI 3:51e164839c0d 145
beanmachine44 1:aa0bd9bd1c56 146 return 0;
beanmachine44 1:aa0bd9bd1c56 147 }
beanmachine44 1:aa0bd9bd1c56 148
tosihisa 0:90c64cb9db58 149 int GT511C3::RecvData(unsigned char *data,unsigned long size)
tosihisa 0:90c64cb9db58 150 {
tosihisa 0:90c64cb9db58 151 const unsigned char fixedbuf[4] = { 0x5A,0xA5,0x01,0x00 };
beanmachine44 2:8fa6daf39d91 152 unsigned short sum = 0x5A + 0xA5 + 0x01 + 0x00;
tosihisa 0:90c64cb9db58 153 int i;
tosihisa 0:90c64cb9db58 154
ROUCHDI 3:51e164839c0d 155
ROUCHDI 3:51e164839c0d 156 for(i = 0; i < 4; i++) {
beanmachine44 2:8fa6daf39d91 157 while(!readable());
beanmachine44 2:8fa6daf39d91 158 if (getc() != fixedbuf[i])
beanmachine44 2:8fa6daf39d91 159 return -1;
ROUCHDI 3:51e164839c0d 160 }
ROUCHDI 3:51e164839c0d 161
ROUCHDI 3:51e164839c0d 162 for(i = 0; i < size; i++) {
tosihisa 0:90c64cb9db58 163 while(!readable());
beanmachine44 2:8fa6daf39d91 164 data[i] = getc();
beanmachine44 2:8fa6daf39d91 165 sum += data[i];
tosihisa 0:90c64cb9db58 166 }
ROUCHDI 3:51e164839c0d 167
beanmachine44 2:8fa6daf39d91 168 while(!readable());
beanmachine44 2:8fa6daf39d91 169 if(getc() != (sum & 0xff))
tosihisa 0:90c64cb9db58 170 return -2;
beanmachine44 2:8fa6daf39d91 171 while(!readable());
beanmachine44 2:8fa6daf39d91 172 if(getc() != ((sum >> 8) & 0xff))
tosihisa 0:90c64cb9db58 173 return -2;
tosihisa 0:90c64cb9db58 174 return 0;
tosihisa 0:90c64cb9db58 175 }
tosihisa 0:90c64cb9db58 176
tosihisa 0:90c64cb9db58 177 int GT511C3::SendRecv(unsigned short Command,unsigned long *Parameter,unsigned short *Response)
tosihisa 0:90c64cb9db58 178 {
tosihisa 0:90c64cb9db58 179 int sts;
ROUCHDI 3:51e164839c0d 180 if((sts = SendCommand(*Parameter,Command)) == 0) {
tosihisa 0:90c64cb9db58 181 *Parameter = 0;
ROUCHDI 3:51e164839c0d 182 if((sts = RecvResponse(Parameter,Response)) != 0) {
tosihisa 0:90c64cb9db58 183 *Response = CMD_Nack;
tosihisa 0:90c64cb9db58 184 *Parameter = NACK_IO_ERR;
tosihisa 0:90c64cb9db58 185 }
tosihisa 0:90c64cb9db58 186 }
ROUCHDI 3:51e164839c0d 187 if(*Response == CMD_Nack) {
tosihisa 0:90c64cb9db58 188 LastError = *Parameter;
tosihisa 0:90c64cb9db58 189 }
tosihisa 0:90c64cb9db58 190 return sts;
tosihisa 0:90c64cb9db58 191 }
tosihisa 0:90c64cb9db58 192
tosihisa 0:90c64cb9db58 193 int GT511C3::ClearLine(void)
tosihisa 0:90c64cb9db58 194 {
ROUCHDI 3:51e164839c0d 195 while(readable()) {
tosihisa 0:90c64cb9db58 196 (void)getc();
tosihisa 0:90c64cb9db58 197 }
tosihisa 0:90c64cb9db58 198 return 0;
tosihisa 0:90c64cb9db58 199 }
tosihisa 0:90c64cb9db58 200
tosihisa 0:90c64cb9db58 201 int GT511C3::Open(void)
tosihisa 0:90c64cb9db58 202 {
tosihisa 0:90c64cb9db58 203 unsigned long Parameter = 1;
tosihisa 0:90c64cb9db58 204 unsigned short Response = 0;
beanmachine44 2:8fa6daf39d91 205 unsigned char buf[sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)+sizeof(DeviceSerialNumber)];
tosihisa 0:90c64cb9db58 206 int sts = 0;
tosihisa 0:90c64cb9db58 207
tosihisa 0:90c64cb9db58 208 if((sts = Init()) != 0)
tosihisa 0:90c64cb9db58 209 return -1;
tosihisa 0:90c64cb9db58 210
tosihisa 0:90c64cb9db58 211 sts = SendRecv(CMD_Open,&Parameter,&Response);
ROUCHDI 3:51e164839c0d 212 if((sts != 0) || (Response != CMD_Ack)) {
tosihisa 0:90c64cb9db58 213 return -1;
tosihisa 0:90c64cb9db58 214 }
ROUCHDI 3:51e164839c0d 215 if((sts = RecvData(buf,sizeof(buf))) == 0) {
beanmachine44 2:8fa6daf39d91 216 memcpy(&FirmwareVersion,&buf[0],sizeof(FirmwareVersion));
beanmachine44 2:8fa6daf39d91 217 memcpy(&IsoAreaMaxSize,&buf[sizeof(FirmwareVersion)],sizeof(IsoAreaMaxSize));
beanmachine44 2:8fa6daf39d91 218 memcpy(DeviceSerialNumber,&buf[sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)],sizeof(DeviceSerialNumber));
tosihisa 0:90c64cb9db58 219 }
tosihisa 0:90c64cb9db58 220 return sts;
tosihisa 0:90c64cb9db58 221 }
tosihisa 0:90c64cb9db58 222
tosihisa 0:90c64cb9db58 223 int GT511C3::WaitPress(int press)
tosihisa 0:90c64cb9db58 224 {
tosihisa 0:90c64cb9db58 225 while(IsPress() != press);
tosihisa 0:90c64cb9db58 226 return 0;
tosihisa 0:90c64cb9db58 227 }
tosihisa 0:90c64cb9db58 228
tosihisa 0:90c64cb9db58 229 int GT511C3::CmosLed(int onoff)
tosihisa 0:90c64cb9db58 230 {
tosihisa 0:90c64cb9db58 231 unsigned long Parameter = onoff & 1;
tosihisa 0:90c64cb9db58 232 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 233 int sts = 0;
tosihisa 0:90c64cb9db58 234
tosihisa 0:90c64cb9db58 235 sts = SendRecv(CMD_CmosLed,&Parameter,&Response);
ROUCHDI 3:51e164839c0d 236 if((sts != 0) || (Response != CMD_Ack)) {
tosihisa 0:90c64cb9db58 237 return -1;
tosihisa 0:90c64cb9db58 238 }
tosihisa 0:90c64cb9db58 239 return 0;
tosihisa 0:90c64cb9db58 240 }
tosihisa 0:90c64cb9db58 241
tosihisa 0:90c64cb9db58 242 int GT511C3::IsPress(void)
tosihisa 0:90c64cb9db58 243 {
tosihisa 0:90c64cb9db58 244 unsigned long Parameter = 0;
tosihisa 0:90c64cb9db58 245 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 246 int sts = 0;
tosihisa 0:90c64cb9db58 247 sts = SendRecv(CMD_IsPressFinger,&Parameter,&Response);
tosihisa 0:90c64cb9db58 248 if((sts != 0) || (Response != CMD_Ack))
tosihisa 0:90c64cb9db58 249 return 0;
tosihisa 0:90c64cb9db58 250 if(Parameter != 0)
tosihisa 0:90c64cb9db58 251 return 0;
tosihisa 0:90c64cb9db58 252 return 1;
tosihisa 0:90c64cb9db58 253 }
tosihisa 0:90c64cb9db58 254
tosihisa 0:90c64cb9db58 255 int GT511C3::Capture(int best)
tosihisa 0:90c64cb9db58 256 {
tosihisa 0:90c64cb9db58 257 unsigned long Parameter = best;
tosihisa 0:90c64cb9db58 258 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 259 int sts = 0;
tosihisa 0:90c64cb9db58 260
tosihisa 0:90c64cb9db58 261 sts = SendRecv(CMD_CaptureFinger,&Parameter,&Response);
tosihisa 0:90c64cb9db58 262 if((sts != 0) || (Response != CMD_Ack))
tosihisa 0:90c64cb9db58 263 return -1;
tosihisa 0:90c64cb9db58 264 return 0;
tosihisa 0:90c64cb9db58 265 }
tosihisa 0:90c64cb9db58 266
tosihisa 0:90c64cb9db58 267 int GT511C3::Enroll_N(int N)
tosihisa 0:90c64cb9db58 268 {
tosihisa 0:90c64cb9db58 269 unsigned long Parameter = 0;
tosihisa 0:90c64cb9db58 270 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 271 int sts = 0;
tosihisa 0:90c64cb9db58 272 enum Command cmd;
tosihisa 0:90c64cb9db58 273
ROUCHDI 3:51e164839c0d 274 switch(N) {
tosihisa 0:90c64cb9db58 275 default:
ROUCHDI 3:51e164839c0d 276 case 1:
ROUCHDI 3:51e164839c0d 277 cmd = CMD_Enroll1;
ROUCHDI 3:51e164839c0d 278 break;
ROUCHDI 3:51e164839c0d 279 case 2:
ROUCHDI 3:51e164839c0d 280 cmd = CMD_Enroll2;
ROUCHDI 3:51e164839c0d 281 break;
ROUCHDI 3:51e164839c0d 282 case 3:
ROUCHDI 3:51e164839c0d 283 cmd = CMD_Enroll3;
ROUCHDI 3:51e164839c0d 284 break;
tosihisa 0:90c64cb9db58 285 }
tosihisa 0:90c64cb9db58 286 sts = SendRecv(cmd,&Parameter,&Response);
tosihisa 0:90c64cb9db58 287 if((sts != 0) || (Response != CMD_Ack))
tosihisa 0:90c64cb9db58 288 return -1;
tosihisa 0:90c64cb9db58 289 return 0;
tosihisa 0:90c64cb9db58 290 }
tosihisa 0:90c64cb9db58 291
tosihisa 0:90c64cb9db58 292 int GT511C3::Identify(void)
tosihisa 0:90c64cb9db58 293 {
tosihisa 0:90c64cb9db58 294 unsigned long Parameter = 0;
tosihisa 0:90c64cb9db58 295 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 296 int sts = 0;
tosihisa 0:90c64cb9db58 297
tosihisa 0:90c64cb9db58 298 sts = SendRecv(CMD_Identify,&Parameter,&Response);
tosihisa 0:90c64cb9db58 299 if((sts != 0) || (Response != CMD_Ack))
tosihisa 0:90c64cb9db58 300 return -1;
tosihisa 0:90c64cb9db58 301 return Parameter;
tosihisa 0:90c64cb9db58 302 }
tosihisa 0:90c64cb9db58 303
tosihisa 0:90c64cb9db58 304 int GT511C3::Enroll(int ID,int (*progress)(int status,char *msg))
tosihisa 0:90c64cb9db58 305 {
ROUCHDI 3:51e164839c0d 306 uint8_t text[30];
tosihisa 0:90c64cb9db58 307 unsigned long Parameter = 0;
tosihisa 0:90c64cb9db58 308 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 309 int sts = 0;
tosihisa 0:90c64cb9db58 310
tosihisa 0:90c64cb9db58 311 CmosLed(1);
ROUCHDI 3:51e164839c0d 312 while(1) {
ROUCHDI 3:51e164839c0d 313 if((sts = (*progress)(1,"Enroll Start")) != 0)
tosihisa 0:90c64cb9db58 314 return -9999;
tosihisa 0:90c64cb9db58 315 Parameter = ID;
tosihisa 0:90c64cb9db58 316 sts = SendRecv(CMD_EnrollStart,&Parameter,&Response);
tosihisa 0:90c64cb9db58 317 if(sts != 0)
tosihisa 0:90c64cb9db58 318 return sts;
tosihisa 0:90c64cb9db58 319 if(Response != CMD_Ack)
tosihisa 0:90c64cb9db58 320 return -100;
tosihisa 0:90c64cb9db58 321
ROUCHDI 3:51e164839c0d 322 if((sts = (*progress)(0,"Remove finger")) != 0)
tosihisa 0:90c64cb9db58 323 return -9999;
tosihisa 0:90c64cb9db58 324 WaitPress(0);
tosihisa 0:90c64cb9db58 325
ROUCHDI 3:51e164839c0d 326 while(1) {
ROUCHDI 3:51e164839c0d 327 if((sts = (*progress)(10,"Press finger to Enroll (1st)")) != 0)
tosihisa 0:90c64cb9db58 328 return -9999;
tosihisa 0:90c64cb9db58 329 WaitPress(1);
tosihisa 0:90c64cb9db58 330 if(Capture(1) == 0)
tosihisa 0:90c64cb9db58 331 break;
tosihisa 0:90c64cb9db58 332 }
tosihisa 0:90c64cb9db58 333
ROUCHDI 3:51e164839c0d 334 if((sts = (*progress)(0,"Remove finger")) != 0)
tosihisa 0:90c64cb9db58 335 return -9999;
tosihisa 0:90c64cb9db58 336 if(Enroll_N(1) != 0)
tosihisa 0:90c64cb9db58 337 continue;
tosihisa 0:90c64cb9db58 338 WaitPress(0);
tosihisa 0:90c64cb9db58 339
ROUCHDI 3:51e164839c0d 340 while(1) {
ROUCHDI 3:51e164839c0d 341 if((sts = (*progress)(20,"Press finger to Enroll (2nd)")) != 0)
ROUCHDI 3:51e164839c0d 342
tosihisa 0:90c64cb9db58 343 return -9999;
tosihisa 0:90c64cb9db58 344 WaitPress(1);
tosihisa 0:90c64cb9db58 345 if(Capture(1) == 0)
tosihisa 0:90c64cb9db58 346 break;
tosihisa 0:90c64cb9db58 347 }
ROUCHDI 3:51e164839c0d 348 if((sts = (*progress)(0,"Remove finger")) != 0)
tosihisa 0:90c64cb9db58 349 return -9999;
tosihisa 0:90c64cb9db58 350 if(Enroll_N(2) != 0)
tosihisa 0:90c64cb9db58 351 continue;
tosihisa 0:90c64cb9db58 352 WaitPress(0);
tosihisa 0:90c64cb9db58 353
ROUCHDI 3:51e164839c0d 354 while(1) {
ROUCHDI 3:51e164839c0d 355 if((sts = (*progress)(30,"Press finger to Enroll (3rd)")) != 0)
tosihisa 0:90c64cb9db58 356 return -9999;
tosihisa 0:90c64cb9db58 357 WaitPress(1);
tosihisa 0:90c64cb9db58 358 if(Capture(1) == 0)
tosihisa 0:90c64cb9db58 359 break;
tosihisa 0:90c64cb9db58 360 }
ROUCHDI 3:51e164839c0d 361 if((sts = (*progress)(0,"Remove finger")) != 0)
tosihisa 0:90c64cb9db58 362 return -9999;
tosihisa 0:90c64cb9db58 363 if(Enroll_N(3) != 0)
tosihisa 0:90c64cb9db58 364 continue;
beanmachine44 2:8fa6daf39d91 365 //WaitPress(0); // This was eating a byte from the DataPacket if you set the ID=-1
tosihisa 0:90c64cb9db58 366
ROUCHDI 3:51e164839c0d 367 if((sts = (*progress)(100,"Enroll OK")) != 0)
ROUCHDI 3:51e164839c0d 368 return -9999;
tosihisa 0:90c64cb9db58 369 break;
tosihisa 0:90c64cb9db58 370 }
tosihisa 0:90c64cb9db58 371 return 0;
tosihisa 0:90c64cb9db58 372 }
tosihisa 0:90c64cb9db58 373
tosihisa 0:90c64cb9db58 374 int GT511C3::CheckEnrolled(int ID)
tosihisa 0:90c64cb9db58 375 {
tosihisa 0:90c64cb9db58 376 unsigned long Parameter = ID;
tosihisa 0:90c64cb9db58 377 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 378 int sts = 0;
tosihisa 0:90c64cb9db58 379
tosihisa 0:90c64cb9db58 380 sts = SendRecv(CMD_CheckEnrolled,&Parameter,&Response);
tosihisa 0:90c64cb9db58 381 if((sts == 0) && (Response == CMD_Ack))
ROUCHDI 3:51e164839c0d 382 return 0; //This ID is enrolled
tosihisa 0:90c64cb9db58 383 return -1;
tosihisa 0:90c64cb9db58 384 }
tosihisa 0:90c64cb9db58 385
beanmachine44 1:aa0bd9bd1c56 386 int GT511C3::SetTemplate(int ID, unsigned char *data, unsigned long size)
beanmachine44 1:aa0bd9bd1c56 387 {
beanmachine44 2:8fa6daf39d91 388 unsigned long Parameter = ID;
beanmachine44 1:aa0bd9bd1c56 389 unsigned short Response = 0;
beanmachine44 1:aa0bd9bd1c56 390 int sts = 0;
beanmachine44 1:aa0bd9bd1c56 391
beanmachine44 2:8fa6daf39d91 392 sts = SendRecv(CMD_SetTemplate,&Parameter,&Response);
ROUCHDI 3:51e164839c0d 393
beanmachine44 1:aa0bd9bd1c56 394 if ((sts != 0) || (Response != CMD_Ack))
beanmachine44 1:aa0bd9bd1c56 395 return -1;
ROUCHDI 3:51e164839c0d 396
beanmachine44 1:aa0bd9bd1c56 397 sts = SendData(data, size);
ROUCHDI 3:51e164839c0d 398
beanmachine44 1:aa0bd9bd1c56 399 if (sts != 0)
beanmachine44 2:8fa6daf39d91 400 return -2;
ROUCHDI 3:51e164839c0d 401
beanmachine44 1:aa0bd9bd1c56 402 sts = RecvResponse(&Parameter, &Response);
ROUCHDI 3:51e164839c0d 403
beanmachine44 1:aa0bd9bd1c56 404 if ((sts != 0) || (Response != CMD_Ack))
beanmachine44 2:8fa6daf39d91 405 return -3;
ROUCHDI 3:51e164839c0d 406
beanmachine44 1:aa0bd9bd1c56 407 return 0;
beanmachine44 1:aa0bd9bd1c56 408 }
beanmachine44 1:aa0bd9bd1c56 409
tosihisa 0:90c64cb9db58 410 int GT511C3::DeleteID(int ID)
tosihisa 0:90c64cb9db58 411 {
tosihisa 0:90c64cb9db58 412 unsigned long Parameter = ID;
tosihisa 0:90c64cb9db58 413 unsigned short Response = 0;
tosihisa 0:90c64cb9db58 414 int sts = 0;
tosihisa 0:90c64cb9db58 415
tosihisa 0:90c64cb9db58 416 sts = SendRecv(CMD_DeleteID,&Parameter,&Response);
tosihisa 0:90c64cb9db58 417 if((sts == 0) && (Response == CMD_Ack))
tosihisa 0:90c64cb9db58 418 return 0;
tosihisa 0:90c64cb9db58 419 return -1;
tosihisa 0:90c64cb9db58 420 }
beanmachine44 1:aa0bd9bd1c56 421
beanmachine44 1:aa0bd9bd1c56 422 int GT511C3::DeleteAllIDs()
beanmachine44 1:aa0bd9bd1c56 423 {
beanmachine44 1:aa0bd9bd1c56 424 unsigned long Parameter = 0;
beanmachine44 1:aa0bd9bd1c56 425 unsigned short Response = 0;
beanmachine44 1:aa0bd9bd1c56 426 int sts = 0;
beanmachine44 1:aa0bd9bd1c56 427
beanmachine44 1:aa0bd9bd1c56 428 sts = SendRecv(CMD_DeleteAll,&Parameter,&Response);
beanmachine44 1:aa0bd9bd1c56 429 if((sts == 0) && (Response == CMD_Ack))
beanmachine44 1:aa0bd9bd1c56 430 return 0;
beanmachine44 1:aa0bd9bd1c56 431 return -1;
beanmachine44 1:aa0bd9bd1c56 432 }