GT511C3
Dependents: Identification_GT-521F52
GT511C3.cpp@3:51e164839c0d, 2020-06-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |