grove_fingerprint
grove_fingerprint.cpp@0:20273e15a6ee, 2015-06-09 (annotated)
- Committer:
- JackyZhangFromSeeed
- Date:
- Tue Jun 09 10:18:30 2015 +0000
- Revision:
- 0:20273e15a6ee
grove_fingerprint
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JackyZhangFromSeeed | 0:20273e15a6ee | 1 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 2 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 3 | #include "suli2.h" |
JackyZhangFromSeeed | 0:20273e15a6ee | 4 | #include "grove_fingerprint.h" |
JackyZhangFromSeeed | 0:20273e15a6ee | 5 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 6 | //local functions |
JackyZhangFromSeeed | 0:20273e15a6ee | 7 | static void grove_fingerprint_writePacket(UART_T *uart, uint32_t addr, uint8_t packettype, |
JackyZhangFromSeeed | 0:20273e15a6ee | 8 | uint16_t len, uint8_t *packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 9 | static uint8_t grove_fingerprint_getReply(UART_T *uart, uint8_t packet[], uint16_t timeout); |
JackyZhangFromSeeed | 0:20273e15a6ee | 10 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 11 | //local variables |
JackyZhangFromSeeed | 0:20273e15a6ee | 12 | static uint32_t thePassword; |
JackyZhangFromSeeed | 0:20273e15a6ee | 13 | static uint32_t theAddress; |
JackyZhangFromSeeed | 0:20273e15a6ee | 14 | static uint16_t fingerID, confidence, templateCount; |
JackyZhangFromSeeed | 0:20273e15a6ee | 15 | static unsigned char cmd[CMD_LENGTH]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 16 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 17 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 18 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 19 | void grove_fingerprint_init(UART_T *uart, int pintx, int pinrx) |
JackyZhangFromSeeed | 0:20273e15a6ee | 20 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 21 | suli_uart_init(uart, pintx, pinrx, 57600); |
JackyZhangFromSeeed | 0:20273e15a6ee | 22 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 23 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 24 | bool grove_fingerprint_write_setup(UART_T *uart) |
JackyZhangFromSeeed | 0:20273e15a6ee | 25 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 26 | thePassword = 0; |
JackyZhangFromSeeed | 0:20273e15a6ee | 27 | theAddress = 0xFFFFFFFF; |
JackyZhangFromSeeed | 0:20273e15a6ee | 28 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 29 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 30 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 31 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 32 | bool grove_fingerprint_verifyPassword(UART_T *uart) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 33 | uint8_t packet[20] = {FINGERPRINT_VERIFYPASSWORD, |
JackyZhangFromSeeed | 0:20273e15a6ee | 34 | (thePassword >> 24), (thePassword >> 16), |
JackyZhangFromSeeed | 0:20273e15a6ee | 35 | (thePassword >> 8), thePassword}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 36 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 5+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 37 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 38 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 39 | if ((len == 1) && (packet[0] == FINGERPRINT_ACKPACKET) && (packet[1] == FINGERPRINT_OK)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 40 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 41 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 42 | /* |
JackyZhangFromSeeed | 0:20273e15a6ee | 43 | Serial.print("\nGot packet type "); Serial.print(packet[0]); |
JackyZhangFromSeeed | 0:20273e15a6ee | 44 | for (uint8_t i=1; i<len+1;i++) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 45 | Serial.print(" 0x"); |
JackyZhangFromSeeed | 0:20273e15a6ee | 46 | Serial.print(packet[i], HEX); |
JackyZhangFromSeeed | 0:20273e15a6ee | 47 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 48 | */ |
JackyZhangFromSeeed | 0:20273e15a6ee | 49 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 50 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 51 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 52 | bool grove_fingerprint_getImage(UART_T *uart, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 53 | uint8_t packet[20] = {FINGERPRINT_GETIMAGE}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 54 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 1+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 55 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 56 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 57 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 58 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 59 | else |
JackyZhangFromSeeed | 0:20273e15a6ee | 60 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 61 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 62 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 63 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 64 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 65 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 66 | bool grove_fingerprint_image2Tz(UART_T *uart, uint8_t slot, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 67 | uint8_t packet[20] = {FINGERPRINT_IMAGE2TZ, slot}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 68 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 2+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 69 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 70 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 71 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 72 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 73 | else |
JackyZhangFromSeeed | 0:20273e15a6ee | 74 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 75 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 76 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 77 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 78 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 79 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 80 | bool grove_fingerprint_createModel(UART_T *uart, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 81 | uint8_t packet[20] = {FINGERPRINT_REGMODEL}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 82 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 1+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 83 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 84 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 85 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 86 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 87 | else |
JackyZhangFromSeeed | 0:20273e15a6ee | 88 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 89 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 90 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 91 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 92 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 93 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 94 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 95 | bool grove_fingerprint_storeModel(UART_T *uart, uint16_t id, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 96 | uint8_t packet[20] = {FINGERPRINT_STORE, 0x01, id >> 8, id & 0xFF}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 97 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 4+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 98 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 99 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 100 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 101 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 102 | else |
JackyZhangFromSeeed | 0:20273e15a6ee | 103 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 104 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 105 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 106 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 107 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 108 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 109 | bool grove_fingerprint_deleteModel(UART_T *uart, uint16_t id, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 110 | uint8_t packet[20] = {FINGERPRINT_DELETE, id >> 8, id & 0xFF, 0x00, 0x01}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 111 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 5+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 112 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 113 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 114 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 115 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 116 | else |
JackyZhangFromSeeed | 0:20273e15a6ee | 117 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 118 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 119 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 120 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 121 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 122 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 123 | bool grove_fingerprint_emptyDatabase(UART_T *uart, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 124 | uint8_t packet[20] = {FINGERPRINT_EMPTY}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 125 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 1+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 126 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 127 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 128 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 129 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 130 | else |
JackyZhangFromSeeed | 0:20273e15a6ee | 131 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 132 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 133 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 134 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 135 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 136 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 137 | bool grove_fingerprint_fingerFastSearch(UART_T *uart, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 138 | fingerID = 0xFFFF; |
JackyZhangFromSeeed | 0:20273e15a6ee | 139 | confidence = 0xFFFF; |
JackyZhangFromSeeed | 0:20273e15a6ee | 140 | // high speed search of slot #1 starting at page 0x0000 and page #0x00A3 |
JackyZhangFromSeeed | 0:20273e15a6ee | 141 | uint8_t packet[20] = {FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xA3}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 142 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 6+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 143 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 144 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 145 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 146 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 147 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 148 | fingerID = packet[2]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 149 | fingerID <<= 8; |
JackyZhangFromSeeed | 0:20273e15a6ee | 150 | fingerID |= packet[3]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 151 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 152 | confidence = packet[4]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 153 | confidence <<= 8; |
JackyZhangFromSeeed | 0:20273e15a6ee | 154 | confidence |= packet[5]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 155 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 156 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 157 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 158 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 159 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 160 | bool grove_fingerprint_getTemplateCount(UART_T *uart, uint8_t *res) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 161 | templateCount = 0xFFFF; |
JackyZhangFromSeeed | 0:20273e15a6ee | 162 | // get number of templates in memory |
JackyZhangFromSeeed | 0:20273e15a6ee | 163 | uint8_t packet[20] = {FINGERPRINT_TEMPLATECOUNT}; |
JackyZhangFromSeeed | 0:20273e15a6ee | 164 | grove_fingerprint_writePacket(uart, theAddress, FINGERPRINT_COMMANDPACKET, 1+2, packet); |
JackyZhangFromSeeed | 0:20273e15a6ee | 165 | uint8_t len = grove_fingerprint_getReply(uart, packet, 500); |
JackyZhangFromSeeed | 0:20273e15a6ee | 166 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 167 | if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 168 | return false; |
JackyZhangFromSeeed | 0:20273e15a6ee | 169 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 170 | templateCount = packet[2]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 171 | templateCount <<= 8; |
JackyZhangFromSeeed | 0:20273e15a6ee | 172 | templateCount |= packet[3]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 173 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 174 | *res = packet[1]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 175 | return true; |
JackyZhangFromSeeed | 0:20273e15a6ee | 176 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 177 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 178 | static void grove_fingerprint_writePacket(UART_T *uart, uint32_t addr, uint8_t packettype, |
JackyZhangFromSeeed | 0:20273e15a6ee | 179 | uint16_t len, uint8_t *packet) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 180 | uint8_t i = 0; |
JackyZhangFromSeeed | 0:20273e15a6ee | 181 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 182 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 183 | cmd[0] = (uint8_t)(FINGERPRINT_STARTCODE >> 8); |
JackyZhangFromSeeed | 0:20273e15a6ee | 184 | cmd[1] = (uint8_t)FINGERPRINT_STARTCODE; |
JackyZhangFromSeeed | 0:20273e15a6ee | 185 | cmd[2] = (uint8_t)(addr >> 24); |
JackyZhangFromSeeed | 0:20273e15a6ee | 186 | cmd[3] = (uint8_t)(addr >> 16); |
JackyZhangFromSeeed | 0:20273e15a6ee | 187 | cmd[4] = (uint8_t)(addr >> 8); |
JackyZhangFromSeeed | 0:20273e15a6ee | 188 | cmd[5] = (uint8_t)(addr); |
JackyZhangFromSeeed | 0:20273e15a6ee | 189 | cmd[6] = (uint8_t)packettype; |
JackyZhangFromSeeed | 0:20273e15a6ee | 190 | cmd[7] = (uint8_t)(len >> 8); |
JackyZhangFromSeeed | 0:20273e15a6ee | 191 | cmd[8] = (uint8_t)(len); |
JackyZhangFromSeeed | 0:20273e15a6ee | 192 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 193 | uint16_t sum = (len>>8) + (len&0xFF) + packettype; |
JackyZhangFromSeeed | 0:20273e15a6ee | 194 | for (i=0; i< len-2; i++) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 195 | cmd[9+i] = packet[i]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 196 | sum += packet[i]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 197 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 198 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 199 | cmd[9+i] = (uint8_t)(sum>>8); |
JackyZhangFromSeeed | 0:20273e15a6ee | 200 | cmd[9+i+1] = (uint8_t)sum; |
JackyZhangFromSeeed | 0:20273e15a6ee | 201 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 202 | suli_uart_write_bytes(uart, (uint8_t*)cmd, 9+i+1+1); |
JackyZhangFromSeeed | 0:20273e15a6ee | 203 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 204 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 205 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 206 | static uint8_t grove_fingerprint_getReply(UART_T *uart, uint8_t packet[], uint16_t timeout) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 207 | uint8_t reply[20], idx; |
JackyZhangFromSeeed | 0:20273e15a6ee | 208 | uint16_t timer=0; |
JackyZhangFromSeeed | 0:20273e15a6ee | 209 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 210 | idx = 0; |
JackyZhangFromSeeed | 0:20273e15a6ee | 211 | #ifdef FINGERPRINT_DEBUG |
JackyZhangFromSeeed | 0:20273e15a6ee | 212 | Serial.print("<--- "); |
JackyZhangFromSeeed | 0:20273e15a6ee | 213 | #endif |
JackyZhangFromSeeed | 0:20273e15a6ee | 214 | while (true) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 215 | while (!suli_uart_readable(uart)) |
JackyZhangFromSeeed | 0:20273e15a6ee | 216 | { |
JackyZhangFromSeeed | 0:20273e15a6ee | 217 | suli_delay_ms(1); |
JackyZhangFromSeeed | 0:20273e15a6ee | 218 | timer++; |
JackyZhangFromSeeed | 0:20273e15a6ee | 219 | if (timer >= timeout) return FINGERPRINT_TIMEOUT; |
JackyZhangFromSeeed | 0:20273e15a6ee | 220 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 221 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 222 | reply[idx] = suli_uart_read(uart); |
JackyZhangFromSeeed | 0:20273e15a6ee | 223 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 224 | if ((idx == 0) && (reply[0] != (FINGERPRINT_STARTCODE >> 8))) |
JackyZhangFromSeeed | 0:20273e15a6ee | 225 | continue; |
JackyZhangFromSeeed | 0:20273e15a6ee | 226 | idx++; |
JackyZhangFromSeeed | 0:20273e15a6ee | 227 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 228 | // check packet! |
JackyZhangFromSeeed | 0:20273e15a6ee | 229 | if (idx >= 9) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 230 | if ((reply[0] != (FINGERPRINT_STARTCODE >> 8)) || |
JackyZhangFromSeeed | 0:20273e15a6ee | 231 | (reply[1] != (FINGERPRINT_STARTCODE & 0xFF))) |
JackyZhangFromSeeed | 0:20273e15a6ee | 232 | return FINGERPRINT_BADPACKET; |
JackyZhangFromSeeed | 0:20273e15a6ee | 233 | uint8_t packettype = reply[6]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 234 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 235 | uint16_t len = reply[7]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 236 | len <<= 8; |
JackyZhangFromSeeed | 0:20273e15a6ee | 237 | len |= reply[8]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 238 | len -= 2; |
JackyZhangFromSeeed | 0:20273e15a6ee | 239 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 240 | if (idx <= (len+10)) continue; |
JackyZhangFromSeeed | 0:20273e15a6ee | 241 | packet[0] = packettype; |
JackyZhangFromSeeed | 0:20273e15a6ee | 242 | for (uint8_t i=0; i<len; i++) { |
JackyZhangFromSeeed | 0:20273e15a6ee | 243 | packet[1+i] = reply[9+i]; |
JackyZhangFromSeeed | 0:20273e15a6ee | 244 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 245 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 246 | return len; |
JackyZhangFromSeeed | 0:20273e15a6ee | 247 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 248 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 249 | } |
JackyZhangFromSeeed | 0:20273e15a6ee | 250 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 251 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 252 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 253 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 254 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 255 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 256 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 257 | |
JackyZhangFromSeeed | 0:20273e15a6ee | 258 |