123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- #include "finger.h"
- #include <M5Stack.h>
- FingerPrint::FingerPrint(void) {}
- FingerPrint FP;
- #define F_Time 10000
- uint8_t FingerPrint::fpm_sendAndReceive(uint16_t timeout) {
- uint8_t i, j;
- uint8_t checkSum = 0;
- FP.RxCnt = 0;
- FP.TxBuf[5] = 0;
- Serial2.write(CMD_HEAD);
- for (i = 1; i < 6; i++) {
- Serial2.write(FP.TxBuf[i]);
- checkSum ^= FP.TxBuf[i];
- }
- Serial2.write(checkSum);
- Serial2.write(CMD_TAIL);
- while ((!Serial2.available()) && timeout > 0) {
- delay(1);
- timeout--;
- }
- uint8_t ch;
- for (i = 0; i < 8; i++) {
- if (Serial2.available()) {
- ch = Serial2.read();
- FP.RxCnt++;
- FP.RxBuf[i] = ch;
- }
- }
- if (FP.RxCnt != 8) {
- FP.RxCnt = 0;
- return ACK_TIMEOUT;
- }
- if (FP.RxBuf[HEAD] != CMD_HEAD) return ACK_FAIL;
- if (FP.RxBuf[TAIL] != CMD_TAIL) return ACK_FAIL;
- if (FP.RxBuf[CMD] != (FP.TxBuf[CMD])) return ACK_FAIL;
- checkSum = 0;
- for (j = 1; j < CHK; j++) {
- checkSum ^= FP.RxBuf[j];
- }
- if (checkSum != FP.RxBuf[CHK]) {
- return ACK_FAIL;
- }
- return ACK_SUCCESS;
- }
- uint8_t FingerPrint::fpm_sleep(void) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_SLEEP_MODE;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = 0;
- FP.TxBuf[P3] = 0;
- res = fpm_sendAndReceive(500);
- if (res == ACK_SUCCESS) {
- return ACK_SUCCESS;
- } else {
- return ACK_FAIL;
- }
- }
- uint8_t FingerPrint::fpm_setAddMode(uint8_t fpm_mode) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_ADD_MODE;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = fpm_mode;
- FP.TxBuf[P3] = 0;
- res = fpm_sendAndReceive(200);
- if (res == ACK_SUCCESS && RxBuf[Q3] == ACK_SUCCESS) {
- return ACK_SUCCESS;
- } else {
- return ACK_FAIL;
- }
- }
- uint8_t FingerPrint::fpm_readAddMode(void) {
- FP.TxBuf[CMD] = CMD_ADD_MODE;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = 0;
- FP.TxBuf[P3] = 0X01;
- fpm_sendAndReceive(200);
- return RxBuf[Q2];
- }
- uint16_t FingerPrint::fpm_getUserNum(void) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_USER_CNT;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = 0;
- FP.TxBuf[P3] = 0;
- res = fpm_sendAndReceive(200);
- if (res == ACK_SUCCESS && FP.RxBuf[Q3] == ACK_SUCCESS) {
- return FP.RxBuf[Q2];
- } else {
- return 0XFF;
- }
- }
- uint8_t FingerPrint::fpm_deleteAllUser(void) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_DEL_ALL;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = 0;
- FP.TxBuf[P3] = 0;
- res = fpm_sendAndReceive(200);
- if (res == ACK_SUCCESS && RxBuf[Q3] == ACK_SUCCESS) {
- return ACK_SUCCESS;
- } else {
- return ACK_FAIL;
- }
- }
- uint8_t FingerPrint::fpm_deleteUser(uint8_t userNum) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_DEL;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = userNum;
- FP.TxBuf[P3] = 0;
- res = fpm_sendAndReceive(200);
- if (res == ACK_SUCCESS && RxBuf[Q3] == ACK_SUCCESS) {
- return ACK_SUCCESS;
- } else {
- return ACK_FAIL;
- }
- }
- uint8_t FingerPrint::fpm_addUser(uint8_t userNum, uint8_t userPermission) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_ADD_1;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = userNum;
- FP.TxBuf[P3] = userPermission;
- res = fpm_sendAndReceive(F_Time);
- if (res == ACK_SUCCESS) {
- if (FP.RxBuf[Q3] == ACK_SUCCESS) {
- FP.TxBuf[CMD] = CMD_ADD_2;
- res = fpm_sendAndReceive(F_Time);
- if (res == ACK_SUCCESS) {
- if (FP.RxBuf[Q3] == ACK_SUCCESS) {
- FP.TxBuf[CMD] = CMD_ADD_3;
- res = fpm_sendAndReceive(F_Time);
- if (res == ACK_SUCCESS) {
- return FP.RxBuf[Q3];
- }
- }
- }
- }
- }
- return res;
- }
- uint8_t FingerPrint::fpm_compareFinger(void) {
- uint8_t res;
- FP.TxBuf[CMD] = CMD_MATCH;
- FP.TxBuf[P1] = 0;
- FP.TxBuf[P2] = 0;
- FP.TxBuf[P3] = 0;
- res = fpm_sendAndReceive(8000);
- if (res == ACK_SUCCESS) {
- if (FP.RxBuf[Q3] == ACK_NOUSER) {
- return ACK_NOUSER;
- }
- if (FP.RxBuf[Q3] == ACK_TIMEOUT) {
- return ACK_TIMEOUT;
- }
- if ((FP.RxBuf[Q2] != 0) &&
- (FP.RxBuf[Q3] == 1 || FP.RxBuf[Q3] == 2 || FP.RxBuf[Q3] == 3)) {
- return ACK_SUCCESS;
- }
- }
- return res;
- }
|