Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
lib.cpp@8:9b41712fd2c3, 2016-04-25 (annotated)
- Committer:
- nyengele
- Date:
- Mon Apr 25 01:18:04 2016 +0000
- Revision:
- 8:9b41712fd2c3
- Parent:
- 7:800afb8c4cb5
- Child:
- 9:48e93bcd1d5c
lcd stuff done
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nyengele | 0:f0e40bf44ffe | 1 | #include "mbed.h" |
| nyengele | 0:f0e40bf44ffe | 2 | #include "lib.h" |
| nyengele | 0:f0e40bf44ffe | 3 | |
| nyengele | 3:83415d375d36 | 4 | #define CMD_ENROLL 0x01 |
| nyengele | 3:83415d375d36 | 5 | #define CMD_AUTH 0x02 |
| nyengele | 3:83415d375d36 | 6 | #define FACE_FID 0x01 |
| nyengele | 3:83415d375d36 | 7 | #define SPEECH_FID 0x02 |
| nyengele | 3:83415d375d36 | 8 | #define SUCCESS 0x55 |
| nyengele | 3:83415d375d36 | 9 | #define FAILURE 0x8A |
| nyengele | 3:83415d375d36 | 10 | |
| nyengele | 0:f0e40bf44ffe | 11 | int hashcode(const char *data, int size) |
| nyengele | 0:f0e40bf44ffe | 12 | { |
| nyengele | 0:f0e40bf44ffe | 13 | int hash = 17; |
| nyengele | 0:f0e40bf44ffe | 14 | for (int i = 0; i < size; i++) { |
| nyengele | 0:f0e40bf44ffe | 15 | hash += 31*hash + data[i]; |
| nyengele | 0:f0e40bf44ffe | 16 | } |
| nyengele | 0:f0e40bf44ffe | 17 | return hash; |
| nyengele | 0:f0e40bf44ffe | 18 | } |
| nyengele | 0:f0e40bf44ffe | 19 | void read_mag_card(Serial *device, char *dest, int *size) |
| nyengele | 0:f0e40bf44ffe | 20 | { |
| nyengele | 0:f0e40bf44ffe | 21 | int pos = 0; |
| nyengele | 0:f0e40bf44ffe | 22 | bool done = false; |
| nyengele | 0:f0e40bf44ffe | 23 | int markercount = 0; |
| nyengele | 0:f0e40bf44ffe | 24 | while (!done) { |
| nyengele | 1:0e5e9821d89d | 25 | while (!device->readable()); |
| nyengele | 0:f0e40bf44ffe | 26 | dest[pos] = device->getc(); |
| nyengele | 0:f0e40bf44ffe | 27 | if (dest[pos] == '?') markercount++; |
| nyengele | 0:f0e40bf44ffe | 28 | if (markercount >= 2) done = true; |
| nyengele | 0:f0e40bf44ffe | 29 | pos++; |
| nyengele | 0:f0e40bf44ffe | 30 | } |
| nyengele | 0:f0e40bf44ffe | 31 | *size = pos - 1; |
| nyengele | 2:1b1c0502bb08 | 32 | } |
| nyengele | 2:1b1c0502bb08 | 33 | |
| nyengele | 2:1b1c0502bb08 | 34 | bool fp_enroll(FPScanner *fp) |
| nyengele | 2:1b1c0502bb08 | 35 | { |
| nyengele | 2:1b1c0502bb08 | 36 | bool status = true; |
| nyengele | 2:1b1c0502bb08 | 37 | fp->SetLED(true); |
| nyengele | 2:1b1c0502bb08 | 38 | while(!fp->IsPressFinger()) wait(0.030); |
| nyengele | 2:1b1c0502bb08 | 39 | fp->CaptureFinger(true); |
| nyengele | 2:1b1c0502bb08 | 40 | if (fp->Identify1_N() == 200) { |
| nyengele | 2:1b1c0502bb08 | 41 | int id = fp->GetEnrollCount(); |
| nyengele | 2:1b1c0502bb08 | 42 | if (fp->EnrollStart(id) == 0) { |
| nyengele | 2:1b1c0502bb08 | 43 | fp->CaptureFinger(true); |
| nyengele | 2:1b1c0502bb08 | 44 | fp->Enroll1(); |
| nyengele | 2:1b1c0502bb08 | 45 | fp->CaptureFinger(true); |
| nyengele | 2:1b1c0502bb08 | 46 | fp->Enroll2(); |
| nyengele | 2:1b1c0502bb08 | 47 | fp->CaptureFinger(true); |
| nyengele | 2:1b1c0502bb08 | 48 | fp->Enroll3(); |
| nyengele | 2:1b1c0502bb08 | 49 | fp->SetLED(false); |
| nyengele | 2:1b1c0502bb08 | 50 | } else status = false; |
| nyengele | 2:1b1c0502bb08 | 51 | } else status = false; |
| nyengele | 2:1b1c0502bb08 | 52 | |
| nyengele | 2:1b1c0502bb08 | 53 | return status; |
| nyengele | 2:1b1c0502bb08 | 54 | } |
| nyengele | 2:1b1c0502bb08 | 55 | |
| nyengele | 2:1b1c0502bb08 | 56 | bool fp_auth(FPScanner *fp) |
| nyengele | 2:1b1c0502bb08 | 57 | { |
| nyengele | 2:1b1c0502bb08 | 58 | bool status = false; |
| nyengele | 2:1b1c0502bb08 | 59 | fp->SetLED(true); |
| nyengele | 2:1b1c0502bb08 | 60 | while(!fp->IsPressFinger()) wait(0.030); |
| nyengele | 2:1b1c0502bb08 | 61 | fp->CaptureFinger(true); |
| nyengele | 2:1b1c0502bb08 | 62 | if (fp->Identify1_N() != 200) status = true; |
| nyengele | 2:1b1c0502bb08 | 63 | fp->SetLED(false); |
| nyengele | 2:1b1c0502bb08 | 64 | return status; |
| nyengele | 3:83415d375d36 | 65 | } |
| nyengele | 3:83415d375d36 | 66 | |
| nyengele | 3:83415d375d36 | 67 | bool face_enroll(char *user_id, Serial *android) |
| nyengele | 3:83415d375d36 | 68 | { |
| nyengele | 3:83415d375d36 | 69 | char CMD[] = { |
| nyengele | 3:83415d375d36 | 70 | CMD_ENROLL, |
| nyengele | 3:83415d375d36 | 71 | 0x02, |
| nyengele | 3:83415d375d36 | 72 | 0x04, |
| nyengele | 3:83415d375d36 | 73 | 0x01, |
| nyengele | 3:83415d375d36 | 74 | user_id[0], |
| nyengele | 3:83415d375d36 | 75 | user_id[1], |
| nyengele | 3:83415d375d36 | 76 | user_id[2], |
| nyengele | 3:83415d375d36 | 77 | user_id[3], |
| nyengele | 3:83415d375d36 | 78 | FACE_FID, |
| nyengele | 3:83415d375d36 | 79 | '\0' |
| nyengele | 3:83415d375d36 | 80 | }; |
| nyengele | 3:83415d375d36 | 81 | |
| nyengele | 3:83415d375d36 | 82 | for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) { |
| nyengele | 3:83415d375d36 | 83 | android->putc(CMD[i]); |
| nyengele | 3:83415d375d36 | 84 | } |
| nyengele | 5:562b8d04dfd4 | 85 | |
| nyengele | 3:83415d375d36 | 86 | while (!android->readable()); |
| nyengele | 3:83415d375d36 | 87 | char temp = android->getc(); |
| nyengele | 3:83415d375d36 | 88 | if (temp == SUCCESS) return true; |
| nyengele | 3:83415d375d36 | 89 | else return false; |
| nyengele | 3:83415d375d36 | 90 | } |
| nyengele | 4:9fbefd153e3e | 91 | |
| nyengele | 4:9fbefd153e3e | 92 | bool face_detect(char *user_id, Serial *android) |
| nyengele | 4:9fbefd153e3e | 93 | { |
| nyengele | 4:9fbefd153e3e | 94 | char CMD[] = { |
| nyengele | 4:9fbefd153e3e | 95 | CMD_AUTH, |
| nyengele | 4:9fbefd153e3e | 96 | 0x02, |
| nyengele | 4:9fbefd153e3e | 97 | 0x04, |
| nyengele | 4:9fbefd153e3e | 98 | 0x01, |
| nyengele | 4:9fbefd153e3e | 99 | user_id[0], |
| nyengele | 4:9fbefd153e3e | 100 | user_id[1], |
| nyengele | 4:9fbefd153e3e | 101 | user_id[2], |
| nyengele | 4:9fbefd153e3e | 102 | user_id[3], |
| nyengele | 4:9fbefd153e3e | 103 | FACE_FID, |
| nyengele | 4:9fbefd153e3e | 104 | '\0' |
| nyengele | 4:9fbefd153e3e | 105 | }; |
| nyengele | 4:9fbefd153e3e | 106 | |
| nyengele | 4:9fbefd153e3e | 107 | for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) { |
| nyengele | 4:9fbefd153e3e | 108 | android->putc(CMD[i]); |
| nyengele | 4:9fbefd153e3e | 109 | } |
| nyengele | 5:562b8d04dfd4 | 110 | |
| nyengele | 5:562b8d04dfd4 | 111 | while (!android->readable()); |
| nyengele | 5:562b8d04dfd4 | 112 | char temp = android->getc(); |
| nyengele | 5:562b8d04dfd4 | 113 | if (temp == SUCCESS) return true; |
| nyengele | 5:562b8d04dfd4 | 114 | else return false; |
| nyengele | 5:562b8d04dfd4 | 115 | } |
| nyengele | 5:562b8d04dfd4 | 116 | |
| nyengele | 5:562b8d04dfd4 | 117 | bool speech_enroll(char *user_id, Serial *android) |
| nyengele | 5:562b8d04dfd4 | 118 | { |
| nyengele | 5:562b8d04dfd4 | 119 | char CMD[] = { |
| nyengele | 5:562b8d04dfd4 | 120 | CMD_ENROLL, |
| nyengele | 5:562b8d04dfd4 | 121 | 0x02, |
| nyengele | 5:562b8d04dfd4 | 122 | 0x04, |
| nyengele | 5:562b8d04dfd4 | 123 | 0x01, |
| nyengele | 5:562b8d04dfd4 | 124 | user_id[0], |
| nyengele | 5:562b8d04dfd4 | 125 | user_id[1], |
| nyengele | 5:562b8d04dfd4 | 126 | user_id[2], |
| nyengele | 5:562b8d04dfd4 | 127 | user_id[3], |
| nyengele | 5:562b8d04dfd4 | 128 | SPEECH_FID, |
| nyengele | 5:562b8d04dfd4 | 129 | '\0' |
| nyengele | 5:562b8d04dfd4 | 130 | }; |
| nyengele | 5:562b8d04dfd4 | 131 | |
| nyengele | 5:562b8d04dfd4 | 132 | for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) { |
| nyengele | 5:562b8d04dfd4 | 133 | android->putc(CMD[i]); |
| nyengele | 5:562b8d04dfd4 | 134 | } |
| nyengele | 5:562b8d04dfd4 | 135 | |
| nyengele | 4:9fbefd153e3e | 136 | while (!android->readable()); |
| nyengele | 4:9fbefd153e3e | 137 | char temp = android->getc(); |
| nyengele | 4:9fbefd153e3e | 138 | if (temp == SUCCESS) return true; |
| nyengele | 4:9fbefd153e3e | 139 | else return false; |
| nyengele | 6:d0582711a5d1 | 140 | } |
| nyengele | 6:d0582711a5d1 | 141 | |
| nyengele | 6:d0582711a5d1 | 142 | bool speech_detect(char *user_id, Serial *android) |
| nyengele | 6:d0582711a5d1 | 143 | { |
| nyengele | 6:d0582711a5d1 | 144 | char CMD[] = { |
| nyengele | 6:d0582711a5d1 | 145 | CMD_AUTH, |
| nyengele | 6:d0582711a5d1 | 146 | 0x02, |
| nyengele | 6:d0582711a5d1 | 147 | 0x04, |
| nyengele | 6:d0582711a5d1 | 148 | 0x01, |
| nyengele | 6:d0582711a5d1 | 149 | user_id[0], |
| nyengele | 6:d0582711a5d1 | 150 | user_id[1], |
| nyengele | 6:d0582711a5d1 | 151 | user_id[2], |
| nyengele | 6:d0582711a5d1 | 152 | user_id[3], |
| nyengele | 6:d0582711a5d1 | 153 | SPEECH_FID, |
| nyengele | 6:d0582711a5d1 | 154 | '\0' |
| nyengele | 6:d0582711a5d1 | 155 | }; |
| nyengele | 6:d0582711a5d1 | 156 | |
| nyengele | 6:d0582711a5d1 | 157 | for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) { |
| nyengele | 6:d0582711a5d1 | 158 | android->putc(CMD[i]); |
| nyengele | 6:d0582711a5d1 | 159 | } |
| nyengele | 6:d0582711a5d1 | 160 | |
| nyengele | 6:d0582711a5d1 | 161 | while (!android->readable()); |
| nyengele | 6:d0582711a5d1 | 162 | char temp = android->getc(); |
| nyengele | 6:d0582711a5d1 | 163 | if (temp == SUCCESS) return true; |
| nyengele | 6:d0582711a5d1 | 164 | else return false; |
| nyengele | 7:800afb8c4cb5 | 165 | } |
| nyengele | 7:800afb8c4cb5 | 166 | |
| nyengele | 7:800afb8c4cb5 | 167 | void buzzer(PwmOut *speaker, int seconds) |
| nyengele | 7:800afb8c4cb5 | 168 | { |
| nyengele | 7:800afb8c4cb5 | 169 | speaker->period(1.0/500.0); |
| nyengele | 7:800afb8c4cb5 | 170 | *speaker = 0.5; |
| nyengele | 7:800afb8c4cb5 | 171 | wait(seconds); |
| nyengele | 7:800afb8c4cb5 | 172 | *speaker = 0.0; |
| nyengele | 7:800afb8c4cb5 | 173 | } |
| nyengele | 8:9b41712fd2c3 | 174 | |
| nyengele | 8:9b41712fd2c3 | 175 | void failure_display(uLCD_4DGL *lcd, char *text) |
| nyengele | 8:9b41712fd2c3 | 176 | { |
| nyengele | 8:9b41712fd2c3 | 177 | lcd->baudrate(3000000); |
| nyengele | 8:9b41712fd2c3 | 178 | lcd->cls(); |
| nyengele | 8:9b41712fd2c3 | 179 | lcd->textbackground_color(WHITE); |
| nyengele | 8:9b41712fd2c3 | 180 | lcd->text_mode(OPAQUE); |
| nyengele | 8:9b41712fd2c3 | 181 | lcd->text_width(4); |
| nyengele | 8:9b41712fd2c3 | 182 | lcd->text_height(4); |
| nyengele | 8:9b41712fd2c3 | 183 | lcd->text_string(text, 1, 4, FONT_7X8, RED); |
| nyengele | 8:9b41712fd2c3 | 184 | } |
| nyengele | 8:9b41712fd2c3 | 185 | |
| nyengele | 8:9b41712fd2c3 | 186 | void success_display(uLCD_4DGL *lcd, char *text) |
| nyengele | 8:9b41712fd2c3 | 187 | { |
| nyengele | 8:9b41712fd2c3 | 188 | lcd->baudrate(3000000); |
| nyengele | 8:9b41712fd2c3 | 189 | lcd->cls(); |
| nyengele | 8:9b41712fd2c3 | 190 | lcd->textbackground_color(WHITE); |
| nyengele | 8:9b41712fd2c3 | 191 | lcd->text_mode(OPAQUE); |
| nyengele | 8:9b41712fd2c3 | 192 | lcd->text_width(4); |
| nyengele | 8:9b41712fd2c3 | 193 | lcd->text_height(4); |
| nyengele | 8:9b41712fd2c3 | 194 | lcd->text_string(text, 1, 4, FONT_7X8, BLUE); |
| nyengele | 8:9b41712fd2c3 | 195 | } |