Same library as tosihisa, but with extensions for SetTemplate, DeleteAllIDs, and SendData.
Dependents: GT511C3_demo GT511C3 IOTProjectCodeDavidBruce15597305
Fork of GT511C3 by
Revision 2:8fa6daf39d91, committed 2015-12-01
- Comitter:
- beanmachine44
- Date:
- Tue Dec 01 20:48:44 2015 +0000
- Parent:
- 1:aa0bd9bd1c56
- Commit message:
- 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)
Changed in this revision
GT511C3.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/GT511C3.cpp Tue Dec 01 18:13:20 2015 +0000 +++ b/GT511C3.cpp Tue Dec 01 20:48:44 2015 +0000 @@ -134,24 +134,27 @@ int GT511C3::RecvData(unsigned char *data,unsigned long size) { const unsigned char fixedbuf[4] = { 0x5A,0xA5,0x01,0x00 }; - unsigned short sum = 0; + unsigned short sum = 0x5A + 0xA5 + 0x01 + 0x00; int i; + + for(i = 0;i < 4;i++){ + while(!readable()); + if (getc() != fixedbuf[i]) + return -1; + } + 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; - } - } + data[i] = getc(); + sum += data[i]; } - if(*(data + size - 2) != (sum & 0xff)) + + while(!readable()); + if(getc() != (sum & 0xff)) return -2; - if(*(data + size - 1) != ((sum >> 8) & 0xff)) + while(!readable()); + if(getc() != ((sum >> 8) & 0xff)) return -2; return 0; } @@ -184,7 +187,7 @@ { unsigned long Parameter = 1; unsigned short Response = 0; - unsigned char buf[4+sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)+sizeof(DeviceSerialNumber)+2]; + unsigned char buf[sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)+sizeof(DeviceSerialNumber)]; int sts = 0; if((sts = Init()) != 0) @@ -195,9 +198,9 @@ 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)); + memcpy(&FirmwareVersion,&buf[0],sizeof(FirmwareVersion)); + memcpy(&IsoAreaMaxSize,&buf[sizeof(FirmwareVersion)],sizeof(IsoAreaMaxSize)); + memcpy(DeviceSerialNumber,&buf[sizeof(FirmwareVersion)+sizeof(IsoAreaMaxSize)],sizeof(DeviceSerialNumber)); } return sts; } @@ -339,7 +342,7 @@ return -9999; if(Enroll_N(3) != 0) continue; - WaitPress(0); + //WaitPress(0); // This was eating a byte from the DataPacket if you set the ID=-1 if((sts = (*progress)(100,"Enroll OK\n")) != 0) return -9999; @@ -363,11 +366,11 @@ int GT511C3::SetTemplate(int ID, unsigned char *data, unsigned long size) { - unsigned long Parameter = 0xFFFF0000 | ID; + unsigned long Parameter = ID; unsigned short Response = 0; int sts = 0; - sts = SendRecv(CMD_DeleteID,&Parameter,&Response); + sts = SendRecv(CMD_SetTemplate,&Parameter,&Response); if ((sts != 0) || (Response != CMD_Ack)) return -1; @@ -375,12 +378,12 @@ sts = SendData(data, size); if (sts != 0) - return -1; + return -2; sts = RecvResponse(&Parameter, &Response); if ((sts != 0) || (Response != CMD_Ack)) - return -1; + return -3; return 0; }