Modified Class

Fork of GT511C3 by Eugene Gonzalez

Committer:
beanmachine44
Date:
Tue Dec 01 20:48:44 2015 +0000
Revision:
2:8fa6daf39d91
Parent:
1:aa0bd9bd1c56
Child:
3:a3500c97e7d5
Fixed bugs: Issued wrong command in SetTemplate; Removed extraneous waitPress as it was consuming 1 byte from the data packet after enroll when ID was set to -1; Changes: Made RecvData only fill the buffer with the actual data (no header and checksum)

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