Time Stamp using fingerprint with WIZwiki-W7500.
Dependencies: GT511C3 NTPClient SDFileSystem WIZnetInterface mbed-src
Fork of GT511C3_HelloWorld_WIZwiki-W7500 by
Revision 4:3dd0f98e6f09, committed 2014-01-03
- Comitter:
- tosihisa
- Date:
- Fri Jan 03 14:12:18 2014 +0000
- Parent:
- 3:459a4f985a45
- Child:
- 5:d3ebe6d1ed92
- Commit message:
- Add LICENSE.;
Changed in this revision
--- a/GT511C3.cpp Fri Jan 03 12:56:03 2014 +0000
+++ b/GT511C3.cpp Fri Jan 03 14:12:18 2014 +0000
@@ -1,3 +1,32 @@
+/**
+ * @section LICENSE
+ *
+ * Copyright (c) 2013 @tosihisa, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * Fingerprint reader module "GT-511C3" class.
+ *
+ * http://www.adh-tech.com.tw/?22,gt-511c3-gt-511c31
+ * http://www.adh-tech.com.tw/files/GT-511C3_datasheet_V1%201_20131127[1].pdf
+ * https://www.sparkfun.com/products/11792
+ * https://github.com/sparkfun/Fingerprint_Scanner-TTL/
+ */
#include "mbed.h"
#include "GT511C3.h"
@@ -40,6 +69,7 @@
int GT511C3::RecvResponse(unsigned long *Parameter,unsigned short *Response)
{
+ const unsigned char fixedbuf[4] = { 0x55,0xAA,0x01,0x00 };
unsigned char buf[12];
unsigned short sum = 0;
int i;
@@ -53,10 +83,11 @@
if(i < 9){
sum += buf[i];
}
- if((i == 0) && (buf[i] != 0x55))
- return -1;
- if((i == 1) && (buf[i] != 0xAA))
- return -1;
+ if(i < 4){
+ if(buf[i] != fixedbuf[i]){
+ return -1;
+ }
+ }
}
if(buf[10] != (sum & 0xff))
return -2;
@@ -74,12 +105,43 @@
return 0;
}
+int GT511C3::RecvData(unsigned char *data,unsigned long size)
+{
+ const unsigned char fixedbuf[4] = { 0x5A,0xA5,0x01,0x00 };
+ unsigned short sum = 0;
+ int i;
+
+ for(i = 0;i < size;i++){
+ while(!readable());
+ *(data + i) = getc();
+ if(i < (size-2)){
+ sum += *(data + i);
+ }
+ if(i < 4){
+ if(*(data + i) != fixedbuf[i]){
+ return -1;
+ }
+ }
+ }
+ if(*(data + size - 2) != (sum & 0xff))
+ return -2;
+ if(*(data + size - 1) != ((sum >> 8) & 0xff))
+ return -2;
+ return 0;
+}
+
int GT511C3::SendRecv(unsigned short Command,unsigned long *Parameter,unsigned short *Response)
{
int sts;
- sts = SendCommand(*Parameter,Command);
- if(sts == 0){
- sts = RecvResponse(Parameter,Response);
+ if((sts = SendCommand(*Parameter,Command)) == 0){
+ *Parameter = 0;
+ if((sts = RecvResponse(Parameter,Response)) != 0){
+ *Response = CMD_Nack;
+ *Parameter = NACK_IO_ERR;
+ }
+ }
+ if(*Response == CMD_Nack){
+ LastError = *Parameter;
}
return sts;
}
@@ -92,6 +154,28 @@
return 0;
}
+int GT511C3::Open(void)
+{
+ unsigned long Parameter = 1;
+ unsigned short Response = 0;
+ unsigned char buf[4+sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)+sizeof(DeviceSerialNumber)+2];
+ int sts = 0;
+
+ if((sts = Init()) != 0)
+ return -1;
+
+ sts = SendRecv(CMD_Open,&Parameter,&Response);
+ if((sts != 0) || (Response != CMD_Ack)){
+ return -1;
+ }
+ if((sts = RecvData(buf,sizeof(buf))) == 0){
+ memcpy(&FirmwareVersion,&buf[4+0],sizeof(FirmwareVersion));
+ memcpy(&IsoAreaMaxSize,&buf[4+sizeof(FirmwareVersion)],sizeof(IsoAreaMaxSize));
+ memcpy(DeviceSerialNumber,&buf[4+sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)],sizeof(DeviceSerialNumber));
+ }
+ return sts;
+}
+
int GT511C3::WaitPress(int press)
{
while(IsPress() != press);
@@ -105,8 +189,9 @@
int sts = 0;
sts = SendRecv(CMD_CmosLed,&Parameter,&Response);
- if((sts != 0) || (Response != CMD_Ack))
+ if((sts != 0) || (Response != CMD_Ack)){
return -1;
+ }
return 0;
}
@@ -165,3 +250,4 @@
return -1;
return Parameter;
}
+
--- a/GT511C3.h Fri Jan 03 12:56:03 2014 +0000
+++ b/GT511C3.h Fri Jan 03 14:12:18 2014 +0000
@@ -1,4 +1,35 @@
-
+/**
+ * @section LICENSE
+ *
+ * Copyright (c) 2013 @tosihisa, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * Fingerprint reader module "GT-511C3" class.
+ *
+ * http://www.adh-tech.com.tw/?22,gt-511c3-gt-511c31
+ * http://www.adh-tech.com.tw/files/GT-511C3_datasheet_V1%201_20131127[1].pdf
+ * https://www.sparkfun.com/products/11792
+ * https://github.com/sparkfun/Fingerprint_Scanner-TTL/
+ * http://blog.digit-parts.com/archives/51894096.html
+ */
+#ifndef __GT511C3_H
+#define __GT511C3_H
#include "mbed.h"
class GT511C3 : public Serial {
@@ -55,13 +86,21 @@
NACK_CAPTURE_CANCELED = 0x1010, // NACK_CAPTURE_CANCELED 0x1010 Obsolete, The capturing is canceled
NACK_INVALID_PARAM = 0x1011, // NACK_INVALID_PARAM 0x1011 Invalid parameter
NACK_FINGER_IS_NOT_PRESSED = 0x1012, // NACK_FINGER_IS_NOT_PRESSED 0x1012 Finger is not pressed
+ NACK_IO_ERR = 0xF000, // ORIGINAL ERROR CODE. Serial line error.
};
- GT511C3(PinName _tx, PinName _rx) : Serial(_tx,_rx){}
+ unsigned long LastError;
+ unsigned long FirmwareVersion;
+ unsigned long IsoAreaMaxSize;
+ unsigned char DeviceSerialNumber[16];
+
+ GT511C3(PinName _tx, PinName _rx) : Serial(_tx,_rx) , LastError(0) {}
int Init(void);
int SendCommand(unsigned long Parameter,unsigned short Command);
int RecvResponse(unsigned long *Parameter,unsigned short *Response);
+ int RecvData(unsigned char *data,unsigned long size);
int SendRecv(unsigned short Command,unsigned long *Parameter,unsigned short *Response);
int ClearLine(void);
+ int Open(void);
int WaitPress(int press);
int CmosLed(int onoff);
int IsPress(void);
@@ -69,3 +108,5 @@
int Enroll_N(int N);
int Identify(void);
};
+
+#endif //__GT511C3_H
--- a/main.cpp Fri Jan 03 12:56:03 2014 +0000
+++ b/main.cpp Fri Jan 03 14:12:18 2014 +0000
@@ -72,22 +72,26 @@
}
int main() {
- unsigned long Parameter;
- unsigned short Response;
int sts = 0;
- int count = 0;
- int ispress;
- int ID;
+ int ispress = 0;
+ int ID = 0;
debug.format(8,Serial::None,1);
debug.baud(115200);
- debug.printf("Init\n");
- finger.Init();
debug.printf("Open\n");
- Parameter = 0;
- sts = finger.SendRecv(GT511C3::CMD_Open,&Parameter,&Response);
- debug.printf("sts = %d,Response=0x%04x\n",sts,Response);
+ sts = finger.Open();
+ debug.printf("sts = %d\n",sts);
+ if(sts == 0){
+ int i;
+ debug.printf("FirmwareVersion = %lx\n",finger.FirmwareVersion);
+ debug.printf("IsoAreaMaxSize = %ld\n",finger.IsoAreaMaxSize);
+ debug.printf("DeviceSerialNumber = ");
+ for(i = 0; i < sizeof(finger.DeviceSerialNumber);i++){
+ debug.printf("%02X",finger.DeviceSerialNumber[i]);
+ }
+ debug.printf("\n");
+ }
if(1){
Enroll();
@@ -103,12 +107,5 @@
ID = finger.Identify();
debug.printf("ID = %d\n",ID);
}
-#if 0
- myled = 1;
- wait(0.5);
- myled = 0;
- wait(0.5);
-#endif
- count++;
}
}
