Version 1.0
Dependencies: 4DGL-uLCD-SE GT511C3 SDFileSystem mbed
Fork of GT511C3_demo by
main.cpp@2:9a274c5defd2, 2015-12-08 (annotated)
- Committer:
- yoshua0207
- Date:
- Tue Dec 08 04:03:40 2015 +0000
- Revision:
- 2:9a274c5defd2
- Parent:
- 1:4c720110a2a8
Version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
beanmachine44 | 0:4bbfc068d864 | 1 | #include "mbed.h" |
yoshua0207 | 2:9a274c5defd2 | 2 | #include "uLCD_4DGL.h" |
yoshua0207 | 2:9a274c5defd2 | 3 | #include "SDFileSystem.h" |
yoshua0207 | 2:9a274c5defd2 | 4 | #include <string> |
beanmachine44 | 0:4bbfc068d864 | 5 | #include "GT511C3.hpp" |
yoshua0207 | 2:9a274c5defd2 | 6 | |
yoshua0207 | 2:9a274c5defd2 | 7 | DigitalIn Up(p15); |
yoshua0207 | 2:9a274c5defd2 | 8 | DigitalIn Center(p16); |
yoshua0207 | 2:9a274c5defd2 | 9 | DigitalIn Left(p17); |
yoshua0207 | 2:9a274c5defd2 | 10 | DigitalIn Down(p18); |
yoshua0207 | 2:9a274c5defd2 | 11 | DigitalIn Right(p19); |
yoshua0207 | 2:9a274c5defd2 | 12 | uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object |
beanmachine44 | 0:4bbfc068d864 | 13 | Serial debug(USBTX,USBRX); |
yoshua0207 | 2:9a274c5defd2 | 14 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
yoshua0207 | 2:9a274c5defd2 | 15 | GT511C3 finger(p9, p10); |
yoshua0207 | 2:9a274c5defd2 | 16 | |
yoshua0207 | 2:9a274c5defd2 | 17 | // ************** CONST VARIABLE **************** // |
yoshua0207 | 2:9a274c5defd2 | 18 | // Size |
yoshua0207 | 2:9a274c5defd2 | 19 | const int screen_width = 18; |
yoshua0207 | 2:9a274c5defd2 | 20 | const int screen_height = 14; |
yoshua0207 | 2:9a274c5defd2 | 21 | const int packet_size = 498; |
yoshua0207 | 2:9a274c5defd2 | 22 | const int id_size = 5; |
yoshua0207 | 2:9a274c5defd2 | 23 | const int sid_size = 9; |
yoshua0207 | 2:9a274c5defd2 | 24 | const int group_size = 200; |
yoshua0207 | 2:9a274c5defd2 | 25 | // Wait Time |
yoshua0207 | 2:9a274c5defd2 | 26 | const float scr_switch_wait = 1; |
yoshua0207 | 2:9a274c5defd2 | 27 | const float wait_time = 0.04; |
yoshua0207 | 2:9a274c5defd2 | 28 | |
yoshua0207 | 2:9a274c5defd2 | 29 | // File Name |
yoshua0207 | 2:9a274c5defd2 | 30 | const char * owner_id_file = "owner_id_file.txt"; |
yoshua0207 | 2:9a274c5defd2 | 31 | const char * sid_file = "sid_file.txt"; |
yoshua0207 | 2:9a274c5defd2 | 32 | |
yoshua0207 | 2:9a274c5defd2 | 33 | // VARIABLE |
yoshua0207 | 2:9a274c5defd2 | 34 | char group_id[id_size]; |
yoshua0207 | 2:9a274c5defd2 | 35 | char sid_temp[sid_size]; |
yoshua0207 | 2:9a274c5defd2 | 36 | int this_session[group_size]; |
yoshua0207 | 2:9a274c5defd2 | 37 | |
yoshua0207 | 2:9a274c5defd2 | 38 | //FUNCTIONS: UI |
yoshua0207 | 2:9a274c5defd2 | 39 | void left_arrow(); |
yoshua0207 | 2:9a274c5defd2 | 40 | void clear_line(int line); |
yoshua0207 | 2:9a274c5defd2 | 41 | void display_center(int line, char * text); |
yoshua0207 | 2:9a274c5defd2 | 42 | void display_menu(int line, char * text); |
yoshua0207 | 2:9a274c5defd2 | 43 | void start_program(); |
yoshua0207 | 2:9a274c5defd2 | 44 | void SCR_start_session(); |
yoshua0207 | 2:9a274c5defd2 | 45 | void SCR_header(); |
yoshua0207 | 2:9a274c5defd2 | 46 | int is_authenticated(); |
yoshua0207 | 2:9a274c5defd2 | 47 | int is_enroll_more(); |
yoshua0207 | 2:9a274c5defd2 | 48 | int SCR_auth_to_enroll_new_fingerprint(char * msg); |
yoshua0207 | 2:9a274c5defd2 | 49 | void SCR_enroll_new_fingerprint(); |
yoshua0207 | 2:9a274c5defd2 | 50 | void enter_int_input(char * to_put, int size, int x, int y); |
yoshua0207 | 2:9a274c5defd2 | 51 | int db_exists(char * group_idDB); |
yoshua0207 | 2:9a274c5defd2 | 52 | void close_session(); |
yoshua0207 | 2:9a274c5defd2 | 53 | void FUNC_update_right_arrow(int * selection, int size, int start); |
yoshua0207 | 2:9a274c5defd2 | 54 | void read_from_fingerprint_scanner(); |
yoshua0207 | 2:9a274c5defd2 | 55 | void upload_to_scanner(); |
yoshua0207 | 2:9a274c5defd2 | 56 | string getstudentIDfromIndex(int fid); |
yoshua0207 | 2:9a274c5defd2 | 57 | void send_email(); |
yoshua0207 | 2:9a274c5defd2 | 58 | int get_enroll_id(const char * filename, char * sid); |
yoshua0207 | 2:9a274c5defd2 | 59 | void enroll_new_fingerprint(char* groupIDF, char* index); |
yoshua0207 | 2:9a274c5defd2 | 60 | int progress(int status, char *msg); |
yoshua0207 | 2:9a274c5defd2 | 61 | void add_new_fingerprint(); |
yoshua0207 | 2:9a274c5defd2 | 62 | |
yoshua0207 | 2:9a274c5defd2 | 63 | int main() { |
yoshua0207 | 2:9a274c5defd2 | 64 | while (1) { |
yoshua0207 | 2:9a274c5defd2 | 65 | start_program(); |
yoshua0207 | 2:9a274c5defd2 | 66 | } |
yoshua0207 | 2:9a274c5defd2 | 67 | } |
yoshua0207 | 2:9a274c5defd2 | 68 | |
yoshua0207 | 2:9a274c5defd2 | 69 | void start_program() { |
yoshua0207 | 2:9a274c5defd2 | 70 | int is_done = 0; |
yoshua0207 | 2:9a274c5defd2 | 71 | while (!is_done) { |
yoshua0207 | 2:9a274c5defd2 | 72 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 73 | SCR_header(); |
yoshua0207 | 2:9a274c5defd2 | 74 | if (is_authenticated()) { |
yoshua0207 | 2:9a274c5defd2 | 75 | SCR_start_session(); |
yoshua0207 | 2:9a274c5defd2 | 76 | } |
yoshua0207 | 2:9a274c5defd2 | 77 | } |
yoshua0207 | 2:9a274c5defd2 | 78 | } |
yoshua0207 | 2:9a274c5defd2 | 79 | |
yoshua0207 | 2:9a274c5defd2 | 80 | void SCR_start_session() { |
yoshua0207 | 2:9a274c5defd2 | 81 | upload_to_scanner(); |
yoshua0207 | 2:9a274c5defd2 | 82 | int is_done = 0; |
yoshua0207 | 2:9a274c5defd2 | 83 | int selection; |
yoshua0207 | 2:9a274c5defd2 | 84 | while (!is_done) { |
yoshua0207 | 2:9a274c5defd2 | 85 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 86 | display_center(1, "MENU"); |
yoshua0207 | 2:9a274c5defd2 | 87 | display_menu(4, "Scan"); |
yoshua0207 | 2:9a274c5defd2 | 88 | display_menu(5, "Enroll"); |
yoshua0207 | 2:9a274c5defd2 | 89 | display_menu(6, "Close session"); |
yoshua0207 | 2:9a274c5defd2 | 90 | FUNC_update_right_arrow(&selection, 3, 4); |
yoshua0207 | 2:9a274c5defd2 | 91 | if (selection == 0) { |
yoshua0207 | 2:9a274c5defd2 | 92 | debug.printf("Entering read_from_fingerprint_scanner()\n"); |
yoshua0207 | 2:9a274c5defd2 | 93 | read_from_fingerprint_scanner(); |
yoshua0207 | 2:9a274c5defd2 | 94 | } else if (selection == 1) { |
yoshua0207 | 2:9a274c5defd2 | 95 | debug.printf("Entering auth to enroll new()\n"); |
yoshua0207 | 2:9a274c5defd2 | 96 | if (SCR_auth_to_enroll_new_fingerprint("Enroll New")) { |
yoshua0207 | 2:9a274c5defd2 | 97 | add_new_fingerprint(); |
yoshua0207 | 2:9a274c5defd2 | 98 | } |
yoshua0207 | 2:9a274c5defd2 | 99 | } else if (selection == 2) { |
yoshua0207 | 2:9a274c5defd2 | 100 | is_done = SCR_auth_to_enroll_new_fingerprint("Close Session"); |
yoshua0207 | 2:9a274c5defd2 | 101 | close_session(); |
yoshua0207 | 2:9a274c5defd2 | 102 | } else { |
yoshua0207 | 2:9a274c5defd2 | 103 | uLCD.printf("YOW! NOT SUPPOSED TO GET HERE!"); |
yoshua0207 | 2:9a274c5defd2 | 104 | } |
yoshua0207 | 2:9a274c5defd2 | 105 | } |
yoshua0207 | 2:9a274c5defd2 | 106 | } |
yoshua0207 | 2:9a274c5defd2 | 107 | |
yoshua0207 | 2:9a274c5defd2 | 108 | void close_session() { |
yoshua0207 | 2:9a274c5defd2 | 109 | // remove the current id |
yoshua0207 | 2:9a274c5defd2 | 110 | // send information to the owner |
yoshua0207 | 2:9a274c5defd2 | 111 | // make sure the database is updated |
yoshua0207 | 2:9a274c5defd2 | 112 | } |
yoshua0207 | 2:9a274c5defd2 | 113 | |
yoshua0207 | 2:9a274c5defd2 | 114 | /* |
yoshua0207 | 2:9a274c5defd2 | 115 | * Compare whether the currently scanned fingerprint is contained |
yoshua0207 | 2:9a274c5defd2 | 116 | * in the existing database. Set the this_session_id data structure |
yoshua0207 | 2:9a274c5defd2 | 117 | * to 1 if yes to notify that the person has signed in for this |
yoshua0207 | 2:9a274c5defd2 | 118 | * session. |
yoshua0207 | 2:9a274c5defd2 | 119 | * |
yoshua0207 | 2:9a274c5defd2 | 120 | * @param none |
yoshua0207 | 2:9a274c5defd2 | 121 | * @return none |
yoshua0207 | 2:9a274c5defd2 | 122 | */ |
yoshua0207 | 2:9a274c5defd2 | 123 | void read_from_fingerprint_scanner() { |
yoshua0207 | 2:9a274c5defd2 | 124 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 125 | display_center(1, "SCAN"); |
yoshua0207 | 2:9a274c5defd2 | 126 | left_arrow(); |
yoshua0207 | 2:9a274c5defd2 | 127 | int FID = -1; |
yoshua0207 | 2:9a274c5defd2 | 128 | |
yoshua0207 | 2:9a274c5defd2 | 129 | //Talk to the fingerprint and get an ID back |
yoshua0207 | 2:9a274c5defd2 | 130 | display_center(5, "Place finger"); |
yoshua0207 | 2:9a274c5defd2 | 131 | display_center(6, "on scanner!"); |
yoshua0207 | 2:9a274c5defd2 | 132 | finger.CmosLed(1); |
yoshua0207 | 2:9a274c5defd2 | 133 | finger.WaitPress(1); |
yoshua0207 | 2:9a274c5defd2 | 134 | int is_cancelled = 0; |
yoshua0207 | 2:9a274c5defd2 | 135 | while(finger.Capture(1) != 0 && !is_cancelled) { |
yoshua0207 | 2:9a274c5defd2 | 136 | if (!Down) { |
yoshua0207 | 2:9a274c5defd2 | 137 | is_cancelled = 1; |
yoshua0207 | 2:9a274c5defd2 | 138 | finger.WaitPress(0); |
yoshua0207 | 2:9a274c5defd2 | 139 | finger.CmosLed(0); |
yoshua0207 | 2:9a274c5defd2 | 140 | } |
yoshua0207 | 2:9a274c5defd2 | 141 | } |
yoshua0207 | 2:9a274c5defd2 | 142 | clear_line(5); |
yoshua0207 | 2:9a274c5defd2 | 143 | clear_line(6); |
yoshua0207 | 2:9a274c5defd2 | 144 | |
yoshua0207 | 2:9a274c5defd2 | 145 | if (!is_cancelled) { |
yoshua0207 | 2:9a274c5defd2 | 146 | // Identify! |
yoshua0207 | 2:9a274c5defd2 | 147 | FID = finger.Identify(); |
yoshua0207 | 2:9a274c5defd2 | 148 | |
yoshua0207 | 2:9a274c5defd2 | 149 | // debug.printf("ID = %d\n", FID); |
yoshua0207 | 2:9a274c5defd2 | 150 | display_center(5, "Remove finger"); |
yoshua0207 | 2:9a274c5defd2 | 151 | display_center(6, "from scanner!"); |
yoshua0207 | 2:9a274c5defd2 | 152 | finger.WaitPress(0); |
yoshua0207 | 2:9a274c5defd2 | 153 | finger.CmosLed(0); |
yoshua0207 | 2:9a274c5defd2 | 154 | if(FID!=-1) |
yoshua0207 | 2:9a274c5defd2 | 155 | { |
yoshua0207 | 2:9a274c5defd2 | 156 | display_center(8, "Student found!"); |
yoshua0207 | 2:9a274c5defd2 | 157 | |
yoshua0207 | 2:9a274c5defd2 | 158 | this_session[FID] = 1; |
yoshua0207 | 2:9a274c5defd2 | 159 | } else { |
yoshua0207 | 2:9a274c5defd2 | 160 | display_center(8, "Student not found"); |
yoshua0207 | 2:9a274c5defd2 | 161 | } |
yoshua0207 | 2:9a274c5defd2 | 162 | wait(2); |
yoshua0207 | 2:9a274c5defd2 | 163 | if (FID >= 0 && FID < group_size) { |
yoshua0207 | 2:9a274c5defd2 | 164 | } else { |
yoshua0207 | 2:9a274c5defd2 | 165 | debug.printf("Sorry, ID failed!"); |
yoshua0207 | 2:9a274c5defd2 | 166 | } |
yoshua0207 | 2:9a274c5defd2 | 167 | } |
yoshua0207 | 2:9a274c5defd2 | 168 | } |
yoshua0207 | 2:9a274c5defd2 | 169 | |
yoshua0207 | 2:9a274c5defd2 | 170 | void send_email() { |
yoshua0207 | 2:9a274c5defd2 | 171 | string attended; |
yoshua0207 | 2:9a274c5defd2 | 172 | //char buffer[2000]; |
yoshua0207 | 2:9a274c5defd2 | 173 | |
yoshua0207 | 2:9a274c5defd2 | 174 | |
yoshua0207 | 2:9a274c5defd2 | 175 | // attended = getstudentIDfromIndex(FID); |
yoshua0207 | 2:9a274c5defd2 | 176 | // debug.printf("Attended = %s",attended); |
yoshua0207 | 2:9a274c5defd2 | 177 | //allAttended = allAttended + "\n" + attended; |
yoshua0207 | 2:9a274c5defd2 | 178 | //debug.printf("All Attended %s",allAttended); |
yoshua0207 | 2:9a274c5defd2 | 179 | } |
yoshua0207 | 2:9a274c5defd2 | 180 | |
yoshua0207 | 2:9a274c5defd2 | 181 | void clear_line(int line) { |
yoshua0207 | 2:9a274c5defd2 | 182 | uLCD.locate(0,line); |
yoshua0207 | 2:9a274c5defd2 | 183 | uLCD.printf(" "); |
yoshua0207 | 2:9a274c5defd2 | 184 | } |
yoshua0207 | 2:9a274c5defd2 | 185 | |
yoshua0207 | 2:9a274c5defd2 | 186 | void upload_to_scanner() { |
yoshua0207 | 2:9a274c5defd2 | 187 | finger.DeleteAllIDs(); |
yoshua0207 | 2:9a274c5defd2 | 188 | |
yoshua0207 | 2:9a274c5defd2 | 189 | int indexScanner = 0; |
yoshua0207 | 2:9a274c5defd2 | 190 | |
yoshua0207 | 2:9a274c5defd2 | 191 | string fileNameScan; |
yoshua0207 | 2:9a274c5defd2 | 192 | char indexC[3]; |
yoshua0207 | 2:9a274c5defd2 | 193 | sprintf(indexC,"%d",indexScanner); |
yoshua0207 | 2:9a274c5defd2 | 194 | fileNameScan = "/sd/" + string(group_id) + "/" + indexC + ".bin"; |
yoshua0207 | 2:9a274c5defd2 | 195 | const char* conv_fileScan = fileNameScan.c_str(); |
yoshua0207 | 2:9a274c5defd2 | 196 | unsigned char data[packet_size]; |
yoshua0207 | 2:9a274c5defd2 | 197 | // debug.printf("Attempt to find file %s\n", conv_fileScan); |
yoshua0207 | 2:9a274c5defd2 | 198 | |
yoshua0207 | 2:9a274c5defd2 | 199 | FILE *templateFile = fopen(conv_fileScan, "r"); |
yoshua0207 | 2:9a274c5defd2 | 200 | if(templateFile==NULL) { |
yoshua0207 | 2:9a274c5defd2 | 201 | debug.printf("File is NULL!\n"); |
yoshua0207 | 2:9a274c5defd2 | 202 | } |
yoshua0207 | 2:9a274c5defd2 | 203 | |
yoshua0207 | 2:9a274c5defd2 | 204 | while(templateFile != NULL) { |
yoshua0207 | 2:9a274c5defd2 | 205 | fread(data, sizeof(unsigned char), sizeof(data),templateFile); |
yoshua0207 | 2:9a274c5defd2 | 206 | |
yoshua0207 | 2:9a274c5defd2 | 207 | if(finger.SetTemplate(indexScanner,data,packet_size)) { |
yoshua0207 | 2:9a274c5defd2 | 208 | // debug.printf("Attempt to find fileSetTemplate %s\n", conv_fileScan); |
yoshua0207 | 2:9a274c5defd2 | 209 | indexScanner++; |
yoshua0207 | 2:9a274c5defd2 | 210 | fclose(templateFile); |
yoshua0207 | 2:9a274c5defd2 | 211 | } |
yoshua0207 | 2:9a274c5defd2 | 212 | // debug.printf("Index Scanner = %d",indexScanner); |
yoshua0207 | 2:9a274c5defd2 | 213 | string fileNameScan; |
yoshua0207 | 2:9a274c5defd2 | 214 | char indexC[3]; |
yoshua0207 | 2:9a274c5defd2 | 215 | sprintf(indexC,"%d",indexScanner); |
yoshua0207 | 2:9a274c5defd2 | 216 | fileNameScan = "/sd/" + string(group_id) + "/" + indexC + ".bin"; |
yoshua0207 | 2:9a274c5defd2 | 217 | conv_fileScan = fileNameScan.c_str(); |
yoshua0207 | 2:9a274c5defd2 | 218 | |
yoshua0207 | 2:9a274c5defd2 | 219 | debug.printf("Attempt to find file %s\n", conv_fileScan); |
yoshua0207 | 2:9a274c5defd2 | 220 | |
yoshua0207 | 2:9a274c5defd2 | 221 | FILE *templateFile = fopen(conv_fileScan, "r"); |
yoshua0207 | 2:9a274c5defd2 | 222 | if(templateFile==NULL) |
yoshua0207 | 2:9a274c5defd2 | 223 | { |
yoshua0207 | 2:9a274c5defd2 | 224 | debug.printf("THERE IS NO FILE!\n"); |
yoshua0207 | 2:9a274c5defd2 | 225 | break; |
yoshua0207 | 2:9a274c5defd2 | 226 | } |
yoshua0207 | 2:9a274c5defd2 | 227 | } |
yoshua0207 | 2:9a274c5defd2 | 228 | } |
yoshua0207 | 2:9a274c5defd2 | 229 | |
yoshua0207 | 2:9a274c5defd2 | 230 | string getstudentIDfromIndex(int fid) { |
yoshua0207 | 2:9a274c5defd2 | 231 | char* studentIDN; |
yoshua0207 | 2:9a274c5defd2 | 232 | string fNSID = "/sd/" + string(group_id) + "/" + string(sid_file); |
yoshua0207 | 2:9a274c5defd2 | 233 | // debug.printf("fnSID = %s\n",fNSID); |
yoshua0207 | 2:9a274c5defd2 | 234 | const char* conv_fNSID = fNSID.c_str(); |
yoshua0207 | 2:9a274c5defd2 | 235 | FILE *templateFile = fopen(conv_fNSID, "r"); |
yoshua0207 | 2:9a274c5defd2 | 236 | if(templateFile == NULL) |
yoshua0207 | 2:9a274c5defd2 | 237 | { |
yoshua0207 | 2:9a274c5defd2 | 238 | debug.printf("Template File NULL!!\n"); |
yoshua0207 | 2:9a274c5defd2 | 239 | } |
yoshua0207 | 2:9a274c5defd2 | 240 | fid = 2*fid + 1; |
yoshua0207 | 2:9a274c5defd2 | 241 | for (int i = 0; i < fid;i++) |
yoshua0207 | 2:9a274c5defd2 | 242 | { |
yoshua0207 | 2:9a274c5defd2 | 243 | fgets(studentIDN, 10, templateFile); |
yoshua0207 | 2:9a274c5defd2 | 244 | } |
yoshua0207 | 2:9a274c5defd2 | 245 | fclose(templateFile); |
yoshua0207 | 2:9a274c5defd2 | 246 | debug.printf("studentIDN = %s\n",studentIDN); |
yoshua0207 | 2:9a274c5defd2 | 247 | return string(studentIDN); |
yoshua0207 | 2:9a274c5defd2 | 248 | } |
yoshua0207 | 2:9a274c5defd2 | 249 | |
yoshua0207 | 2:9a274c5defd2 | 250 | int SCR_auth_to_enroll_new_fingerprint(char * msg) { |
yoshua0207 | 2:9a274c5defd2 | 251 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 252 | display_center(1, msg); |
yoshua0207 | 2:9a274c5defd2 | 253 | display_center(7, "Enter Group ID:"); |
yoshua0207 | 2:9a274c5defd2 | 254 | char gid_temp[id_size]; |
yoshua0207 | 2:9a274c5defd2 | 255 | enter_int_input(gid_temp, id_size, 0, 8); |
yoshua0207 | 2:9a274c5defd2 | 256 | if (strcmp(gid_temp, group_id) == 0) { |
yoshua0207 | 2:9a274c5defd2 | 257 | display_center(11, "Success!"); |
yoshua0207 | 2:9a274c5defd2 | 258 | wait(scr_switch_wait); |
yoshua0207 | 2:9a274c5defd2 | 259 | return 1; |
yoshua0207 | 2:9a274c5defd2 | 260 | } else { |
yoshua0207 | 2:9a274c5defd2 | 261 | display_center(11, "Failed!"); |
yoshua0207 | 2:9a274c5defd2 | 262 | wait(scr_switch_wait); |
yoshua0207 | 2:9a274c5defd2 | 263 | return 0; |
yoshua0207 | 2:9a274c5defd2 | 264 | } |
yoshua0207 | 2:9a274c5defd2 | 265 | } |
yoshua0207 | 2:9a274c5defd2 | 266 | /** |
yoshua0207 | 2:9a274c5defd2 | 267 | UI for the right arrow to choose which one of the options |
yoshua0207 | 2:9a274c5defd2 | 268 | that is chosen. |
yoshua0207 | 2:9a274c5defd2 | 269 | @param selection |
yoshua0207 | 2:9a274c5defd2 | 270 | @param size |
yoshua0207 | 2:9a274c5defd2 | 271 | @param start |
yoshua0207 | 2:9a274c5defd2 | 272 | */ |
yoshua0207 | 2:9a274c5defd2 | 273 | void FUNC_update_right_arrow(int * selection, int size, int start) { |
yoshua0207 | 2:9a274c5defd2 | 274 | int x = 15; |
yoshua0207 | 2:9a274c5defd2 | 275 | int y = start; |
yoshua0207 | 2:9a274c5defd2 | 276 | uLCD.locate(x, y); |
yoshua0207 | 2:9a274c5defd2 | 277 | uLCD.printf(">>"); |
yoshua0207 | 2:9a274c5defd2 | 278 | int is_entered = 0; |
yoshua0207 | 2:9a274c5defd2 | 279 | while(!is_entered) { |
yoshua0207 | 2:9a274c5defd2 | 280 | if (!Down) { |
yoshua0207 | 2:9a274c5defd2 | 281 | uLCD.locate(x, y); |
yoshua0207 | 2:9a274c5defd2 | 282 | uLCD.printf(" "); |
yoshua0207 | 2:9a274c5defd2 | 283 | y++; |
yoshua0207 | 2:9a274c5defd2 | 284 | if (y - start < 0) { |
yoshua0207 | 2:9a274c5defd2 | 285 | y = start; |
yoshua0207 | 2:9a274c5defd2 | 286 | } else if (y - start >= size) { |
yoshua0207 | 2:9a274c5defd2 | 287 | y = size + start - 1; |
yoshua0207 | 2:9a274c5defd2 | 288 | } |
yoshua0207 | 2:9a274c5defd2 | 289 | uLCD.locate(x, y); |
yoshua0207 | 2:9a274c5defd2 | 290 | uLCD.printf(">>"); |
yoshua0207 | 2:9a274c5defd2 | 291 | } else if(!Up) { |
yoshua0207 | 2:9a274c5defd2 | 292 | uLCD.locate(x, y); |
yoshua0207 | 2:9a274c5defd2 | 293 | uLCD.printf(" "); |
yoshua0207 | 2:9a274c5defd2 | 294 | y--; |
yoshua0207 | 2:9a274c5defd2 | 295 | if (y - start < 0) { |
yoshua0207 | 2:9a274c5defd2 | 296 | y = start; |
yoshua0207 | 2:9a274c5defd2 | 297 | } else if (y - start >= size) { |
yoshua0207 | 2:9a274c5defd2 | 298 | y = size + start - 1; |
yoshua0207 | 2:9a274c5defd2 | 299 | } |
yoshua0207 | 2:9a274c5defd2 | 300 | uLCD.locate(x, y); |
yoshua0207 | 2:9a274c5defd2 | 301 | uLCD.printf(">>"); |
yoshua0207 | 2:9a274c5defd2 | 302 | } else if(!Left) { |
yoshua0207 | 2:9a274c5defd2 | 303 | } else if(!Right) { |
yoshua0207 | 2:9a274c5defd2 | 304 | * selection = y - start; |
yoshua0207 | 2:9a274c5defd2 | 305 | is_entered = 1; |
yoshua0207 | 2:9a274c5defd2 | 306 | } else if (!Center) { |
yoshua0207 | 2:9a274c5defd2 | 307 | } |
yoshua0207 | 2:9a274c5defd2 | 308 | wait(wait_time); |
yoshua0207 | 2:9a274c5defd2 | 309 | } |
yoshua0207 | 2:9a274c5defd2 | 310 | } |
yoshua0207 | 2:9a274c5defd2 | 311 | |
yoshua0207 | 2:9a274c5defd2 | 312 | void SCR_header() { |
yoshua0207 | 2:9a274c5defd2 | 313 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 314 | uLCD.printf("******************\n"); |
yoshua0207 | 2:9a274c5defd2 | 315 | uLCD.printf("FingerprintScanner \n"); |
yoshua0207 | 2:9a274c5defd2 | 316 | uLCD.printf("******************\n\n"); |
yoshua0207 | 2:9a274c5defd2 | 317 | } |
yoshua0207 | 2:9a274c5defd2 | 318 | |
yoshua0207 | 2:9a274c5defd2 | 319 | int is_authenticated() { |
yoshua0207 | 2:9a274c5defd2 | 320 | display_center(7, "Enter Group ID:"); |
yoshua0207 | 2:9a274c5defd2 | 321 | char gid_temp[id_size]; |
yoshua0207 | 2:9a274c5defd2 | 322 | enter_int_input(gid_temp, id_size, 0, 8); |
yoshua0207 | 2:9a274c5defd2 | 323 | if (db_exists(gid_temp)) { |
yoshua0207 | 2:9a274c5defd2 | 324 | memcpy(group_id, gid_temp, id_size); |
yoshua0207 | 2:9a274c5defd2 | 325 | return 1; |
yoshua0207 | 2:9a274c5defd2 | 326 | } else { |
yoshua0207 | 2:9a274c5defd2 | 327 | return 0; |
yoshua0207 | 2:9a274c5defd2 | 328 | } |
yoshua0207 | 2:9a274c5defd2 | 329 | } |
yoshua0207 | 2:9a274c5defd2 | 330 | |
yoshua0207 | 2:9a274c5defd2 | 331 | /** |
yoshua0207 | 2:9a274c5defd2 | 332 | Match the parameter whether it exists in |
yoshua0207 | 2:9a274c5defd2 | 333 | owner_id_file |
yoshua0207 | 2:9a274c5defd2 | 334 | @param group_id the string to be checked |
yoshua0207 | 2:9a274c5defd2 | 335 | @return 1 if group_id is in owner_id_file, 0 otherwise |
yoshua0207 | 2:9a274c5defd2 | 336 | */ |
yoshua0207 | 2:9a274c5defd2 | 337 | int db_exists(char * group_idDB) { |
yoshua0207 | 2:9a274c5defd2 | 338 | |
yoshua0207 | 2:9a274c5defd2 | 339 | FILE *file = fopen("/sd/owner_id_file.txt", "r"); |
yoshua0207 | 2:9a274c5defd2 | 340 | // uLCD.printf("Opening file: %s\n",filename); |
yoshua0207 | 2:9a274c5defd2 | 341 | char buffer[6]; |
yoshua0207 | 2:9a274c5defd2 | 342 | debug.printf("Finding database\n"); |
yoshua0207 | 2:9a274c5defd2 | 343 | if(file==NULL) |
yoshua0207 | 2:9a274c5defd2 | 344 | { |
yoshua0207 | 2:9a274c5defd2 | 345 | debug.printf("No File!\n"); |
yoshua0207 | 2:9a274c5defd2 | 346 | } |
yoshua0207 | 2:9a274c5defd2 | 347 | while (fgets(buffer, 6, file)) |
yoshua0207 | 2:9a274c5defd2 | 348 | { |
yoshua0207 | 2:9a274c5defd2 | 349 | // debug.printf("Buffer = %s\n",buffer); |
yoshua0207 | 2:9a274c5defd2 | 350 | // debug.printf("Group iD = %s\n",group_id); |
yoshua0207 | 2:9a274c5defd2 | 351 | if (strcmp(group_idDB,buffer)==0) { |
yoshua0207 | 2:9a274c5defd2 | 352 | debug.printf("Found!\n"); |
yoshua0207 | 2:9a274c5defd2 | 353 | |
yoshua0207 | 2:9a274c5defd2 | 354 | fclose(file); |
yoshua0207 | 2:9a274c5defd2 | 355 | display_center(11, "Authenticated,"); |
yoshua0207 | 2:9a274c5defd2 | 356 | display_center(12, "session starts!"); |
yoshua0207 | 2:9a274c5defd2 | 357 | wait(scr_switch_wait); |
yoshua0207 | 2:9a274c5defd2 | 358 | return 1; |
yoshua0207 | 2:9a274c5defd2 | 359 | } |
yoshua0207 | 2:9a274c5defd2 | 360 | } |
yoshua0207 | 2:9a274c5defd2 | 361 | fclose(file); |
yoshua0207 | 2:9a274c5defd2 | 362 | display_center(11, "Not authenticated"); |
yoshua0207 | 2:9a274c5defd2 | 363 | wait(scr_switch_wait); |
beanmachine44 | 0:4bbfc068d864 | 364 | return 0; |
beanmachine44 | 0:4bbfc068d864 | 365 | } |
yoshua0207 | 2:9a274c5defd2 | 366 | |
yoshua0207 | 2:9a274c5defd2 | 367 | void enter_int_input(char * to_put, int size, int x, int y) { |
yoshua0207 | 2:9a274c5defd2 | 368 | x = (screen_width - size) / 2; |
yoshua0207 | 2:9a274c5defd2 | 369 | int current = 0; |
yoshua0207 | 2:9a274c5defd2 | 370 | int gid_int[size]; |
yoshua0207 | 2:9a274c5defd2 | 371 | for (int i = 0; i < size; i++) { |
yoshua0207 | 2:9a274c5defd2 | 372 | gid_int[i] = 0; |
yoshua0207 | 2:9a274c5defd2 | 373 | } |
yoshua0207 | 2:9a274c5defd2 | 374 | int is_entered = 0; |
yoshua0207 | 2:9a274c5defd2 | 375 | while(!is_entered) { |
yoshua0207 | 2:9a274c5defd2 | 376 | for (int i = 0; i < size; i++) { |
yoshua0207 | 2:9a274c5defd2 | 377 | uLCD.locate(x + i, y); |
yoshua0207 | 2:9a274c5defd2 | 378 | uLCD.printf("%d", gid_int[i]); |
yoshua0207 | 2:9a274c5defd2 | 379 | } |
yoshua0207 | 2:9a274c5defd2 | 380 | if (!Down) { |
yoshua0207 | 2:9a274c5defd2 | 381 | if (gid_int[current] == 0) { |
yoshua0207 | 2:9a274c5defd2 | 382 | gid_int[current] += 10; |
yoshua0207 | 2:9a274c5defd2 | 383 | } |
yoshua0207 | 2:9a274c5defd2 | 384 | gid_int[current]--; |
yoshua0207 | 2:9a274c5defd2 | 385 | } else if(!Up) { |
yoshua0207 | 2:9a274c5defd2 | 386 | if (gid_int[current] == 9) { |
yoshua0207 | 2:9a274c5defd2 | 387 | gid_int[current] = 0; |
yoshua0207 | 2:9a274c5defd2 | 388 | } else { |
yoshua0207 | 2:9a274c5defd2 | 389 | gid_int[current]++; |
yoshua0207 | 2:9a274c5defd2 | 390 | } |
yoshua0207 | 2:9a274c5defd2 | 391 | } else if(!Left) { |
yoshua0207 | 2:9a274c5defd2 | 392 | current --; |
yoshua0207 | 2:9a274c5defd2 | 393 | } else if(!Right) { |
yoshua0207 | 2:9a274c5defd2 | 394 | current++; |
yoshua0207 | 2:9a274c5defd2 | 395 | } else if (!Center) { |
yoshua0207 | 2:9a274c5defd2 | 396 | for (int i = 0; i < size; i++) { |
yoshua0207 | 2:9a274c5defd2 | 397 | sprintf((to_put + i), "%d", gid_int[i]); |
yoshua0207 | 2:9a274c5defd2 | 398 | } |
yoshua0207 | 2:9a274c5defd2 | 399 | is_entered = 1; |
yoshua0207 | 2:9a274c5defd2 | 400 | } |
yoshua0207 | 2:9a274c5defd2 | 401 | wait(wait_time); |
yoshua0207 | 2:9a274c5defd2 | 402 | if (current < 0) { |
yoshua0207 | 2:9a274c5defd2 | 403 | current = 0; |
yoshua0207 | 2:9a274c5defd2 | 404 | } else if (current >= size) { |
yoshua0207 | 2:9a274c5defd2 | 405 | current = size - 1; |
yoshua0207 | 2:9a274c5defd2 | 406 | } |
yoshua0207 | 2:9a274c5defd2 | 407 | } |
yoshua0207 | 2:9a274c5defd2 | 408 | } |
yoshua0207 | 2:9a274c5defd2 | 409 | |
yoshua0207 | 2:9a274c5defd2 | 410 | void left_arrow() { |
yoshua0207 | 2:9a274c5defd2 | 411 | uLCD.locate(1,1); |
yoshua0207 | 2:9a274c5defd2 | 412 | uLCD.printf("<<"); |
yoshua0207 | 2:9a274c5defd2 | 413 | } |
yoshua0207 | 2:9a274c5defd2 | 414 | |
yoshua0207 | 2:9a274c5defd2 | 415 | void add_new_fingerprint() { |
yoshua0207 | 2:9a274c5defd2 | 416 | |
yoshua0207 | 2:9a274c5defd2 | 417 | string fileNameSID; |
yoshua0207 | 2:9a274c5defd2 | 418 | int cancelled = 0; |
yoshua0207 | 2:9a274c5defd2 | 419 | |
yoshua0207 | 2:9a274c5defd2 | 420 | do { |
yoshua0207 | 2:9a274c5defd2 | 421 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 422 | display_center(1, "ENROLL"); |
yoshua0207 | 2:9a274c5defd2 | 423 | display_center(5, "Enter SID:"); |
yoshua0207 | 2:9a274c5defd2 | 424 | char student_id[sid_size]; |
yoshua0207 | 2:9a274c5defd2 | 425 | enter_int_input(student_id, sid_size, 0, 6); |
yoshua0207 | 2:9a274c5defd2 | 426 | // uLCD.printf("\n\nStudent Id = %s\n",student_id); |
yoshua0207 | 2:9a274c5defd2 | 427 | wait(wait_time); |
yoshua0207 | 2:9a274c5defd2 | 428 | fileNameSID = "/sd/" + string(group_id) + "/" + string(sid_file); |
yoshua0207 | 2:9a274c5defd2 | 429 | // uLCD.printf("Group ID 1 = %s\n",group_id); |
yoshua0207 | 2:9a274c5defd2 | 430 | const char* conv_fileSID = fileNameSID.c_str(); |
yoshua0207 | 2:9a274c5defd2 | 431 | // uLCD.printf("FileNameSID File = %s\n",fileNameSID); |
yoshua0207 | 2:9a274c5defd2 | 432 | // uLCD.printf("Conv_fileSID = %s\n",conv_fileSID); |
yoshua0207 | 2:9a274c5defd2 | 433 | |
yoshua0207 | 2:9a274c5defd2 | 434 | int eid = get_enroll_id(conv_fileSID, student_id); |
yoshua0207 | 2:9a274c5defd2 | 435 | if (eid == -1) { |
yoshua0207 | 2:9a274c5defd2 | 436 | display_center(11, "Failed"); |
yoshua0207 | 2:9a274c5defd2 | 437 | uLCD.printf("\n\nEnroll Failed!\n"); |
yoshua0207 | 2:9a274c5defd2 | 438 | } else { |
yoshua0207 | 2:9a274c5defd2 | 439 | |
yoshua0207 | 2:9a274c5defd2 | 440 | char eidc[4]; |
yoshua0207 | 2:9a274c5defd2 | 441 | sprintf(eidc, "%d",eid); |
yoshua0207 | 2:9a274c5defd2 | 442 | |
yoshua0207 | 2:9a274c5defd2 | 443 | // uLCD.printf("Enroll ID = %s\n",eidc); |
yoshua0207 | 2:9a274c5defd2 | 444 | enroll_new_fingerprint(group_id, eidc); |
yoshua0207 | 2:9a274c5defd2 | 445 | // uLCD.printf("\n\nSuccess\n"); |
yoshua0207 | 2:9a274c5defd2 | 446 | display_center(11, "Succeeded"); |
beanmachine44 | 0:4bbfc068d864 | 447 | } |
yoshua0207 | 2:9a274c5defd2 | 448 | wait(1); |
yoshua0207 | 2:9a274c5defd2 | 449 | cancelled = is_enroll_more(); |
yoshua0207 | 2:9a274c5defd2 | 450 | wait(2); |
yoshua0207 | 2:9a274c5defd2 | 451 | } while(!cancelled); |
yoshua0207 | 2:9a274c5defd2 | 452 | } |
yoshua0207 | 2:9a274c5defd2 | 453 | |
yoshua0207 | 2:9a274c5defd2 | 454 | int is_enroll_more() { |
yoshua0207 | 2:9a274c5defd2 | 455 | uLCD.cls(); |
yoshua0207 | 2:9a274c5defd2 | 456 | display_center(1, "MENU"); |
yoshua0207 | 2:9a274c5defd2 | 457 | display_center(3, "Enroll more?"); |
yoshua0207 | 2:9a274c5defd2 | 458 | display_menu(5, "Yes"); |
yoshua0207 | 2:9a274c5defd2 | 459 | display_menu(6, "No"); |
yoshua0207 | 2:9a274c5defd2 | 460 | int selection; |
yoshua0207 | 2:9a274c5defd2 | 461 | FUNC_update_right_arrow(&selection, 2, 5); |
yoshua0207 | 2:9a274c5defd2 | 462 | return selection; |
yoshua0207 | 2:9a274c5defd2 | 463 | } |
yoshua0207 | 2:9a274c5defd2 | 464 | |
yoshua0207 | 2:9a274c5defd2 | 465 | void display_center(int line, char * text) { |
yoshua0207 | 2:9a274c5defd2 | 466 | int len = strlen(text) - 1; |
yoshua0207 | 2:9a274c5defd2 | 467 | int x = (screen_width - len) / 2; |
yoshua0207 | 2:9a274c5defd2 | 468 | uLCD.locate(x, line); |
yoshua0207 | 2:9a274c5defd2 | 469 | uLCD.printf(text); |
yoshua0207 | 2:9a274c5defd2 | 470 | } |
yoshua0207 | 2:9a274c5defd2 | 471 | |
yoshua0207 | 2:9a274c5defd2 | 472 | void display_menu(int line, char * text) { |
yoshua0207 | 2:9a274c5defd2 | 473 | int x = 1; |
yoshua0207 | 2:9a274c5defd2 | 474 | uLCD.locate(x, line); |
yoshua0207 | 2:9a274c5defd2 | 475 | uLCD.printf(text); |
yoshua0207 | 2:9a274c5defd2 | 476 | } |
yoshua0207 | 2:9a274c5defd2 | 477 | |
yoshua0207 | 2:9a274c5defd2 | 478 | int get_enroll_id(const char * filename, char * sid) { |
yoshua0207 | 2:9a274c5defd2 | 479 | |
yoshua0207 | 2:9a274c5defd2 | 480 | debug.printf("GetEnrollID File %s\n",filename); |
yoshua0207 | 2:9a274c5defd2 | 481 | FILE *file = fopen(filename, "r"); |
yoshua0207 | 2:9a274c5defd2 | 482 | if(file==NULL) |
yoshua0207 | 2:9a274c5defd2 | 483 | { |
yoshua0207 | 2:9a274c5defd2 | 484 | debug.printf("File NULL\n"); |
beanmachine44 | 0:4bbfc068d864 | 485 | } |
yoshua0207 | 2:9a274c5defd2 | 486 | int index = 0; |
yoshua0207 | 2:9a274c5defd2 | 487 | int is_found = 0; |
yoshua0207 | 2:9a274c5defd2 | 488 | char buffer[10]; |
yoshua0207 | 2:9a274c5defd2 | 489 | while (fgets(buffer, 10, file)) |
yoshua0207 | 2:9a274c5defd2 | 490 | { |
yoshua0207 | 2:9a274c5defd2 | 491 | debug.printf("A\n"); |
yoshua0207 | 2:9a274c5defd2 | 492 | debug.printf("Buffer = %s\n",buffer); |
yoshua0207 | 2:9a274c5defd2 | 493 | debug.printf("SID = %s\n",sid); |
yoshua0207 | 2:9a274c5defd2 | 494 | if (strcmp(buffer,sid) == 0) |
yoshua0207 | 2:9a274c5defd2 | 495 | { |
yoshua0207 | 2:9a274c5defd2 | 496 | debug.printf("Found at index %d!",index); |
yoshua0207 | 2:9a274c5defd2 | 497 | uLCD.locate(1,9); |
yoshua0207 | 2:9a274c5defd2 | 498 | uLCD.printf("Student ID found!\n"); |
yoshua0207 | 2:9a274c5defd2 | 499 | uLCD.printf("Scan Finger 3X !\n"); |
yoshua0207 | 2:9a274c5defd2 | 500 | fclose(file); |
yoshua0207 | 2:9a274c5defd2 | 501 | is_found = 1; |
yoshua0207 | 2:9a274c5defd2 | 502 | break; |
yoshua0207 | 2:9a274c5defd2 | 503 | } |
yoshua0207 | 2:9a274c5defd2 | 504 | index++; |
yoshua0207 | 2:9a274c5defd2 | 505 | } |
yoshua0207 | 2:9a274c5defd2 | 506 | fclose(file); |
yoshua0207 | 2:9a274c5defd2 | 507 | if(!is_found) { |
yoshua0207 | 2:9a274c5defd2 | 508 | return -1; |
yoshua0207 | 2:9a274c5defd2 | 509 | debug.printf("Invalid ID!"); |
yoshua0207 | 2:9a274c5defd2 | 510 | } else { |
yoshua0207 | 2:9a274c5defd2 | 511 | return index/2; |
yoshua0207 | 2:9a274c5defd2 | 512 | } |
yoshua0207 | 2:9a274c5defd2 | 513 | } |
yoshua0207 | 2:9a274c5defd2 | 514 | |
yoshua0207 | 2:9a274c5defd2 | 515 | /* |
yoshua0207 | 2:9a274c5defd2 | 516 | * Enroll new fingerprint into the existing class session |
yoshua0207 | 2:9a274c5defd2 | 517 | * |
yoshua0207 | 2:9a274c5defd2 | 518 | * @param |
yoshua0207 | 2:9a274c5defd2 | 519 | * @return none |
yoshua0207 | 2:9a274c5defd2 | 520 | */ |
yoshua0207 | 2:9a274c5defd2 | 521 | void enroll_new_fingerprint(char* groupIDF, char* index) { |
yoshua0207 | 2:9a274c5defd2 | 522 | // uLCD.printf("Pick student ID :\n"); |
yoshua0207 | 2:9a274c5defd2 | 523 | // char SID[10] = "903091468"; |
yoshua0207 | 2:9a274c5defd2 | 524 | // char* index = "3"; |
yoshua0207 | 2:9a274c5defd2 | 525 | int EnrollID = -1; |
yoshua0207 | 2:9a274c5defd2 | 526 | |
yoshua0207 | 2:9a274c5defd2 | 527 | unsigned char datas[498]; |
yoshua0207 | 2:9a274c5defd2 | 528 | debug.printf("Trying to Enroll\n"); |
yoshua0207 | 2:9a274c5defd2 | 529 | finger.Enroll(EnrollID, progress); |
yoshua0207 | 2:9a274c5defd2 | 530 | |
yoshua0207 | 2:9a274c5defd2 | 531 | finger.RecvData(datas, 498); |
yoshua0207 | 2:9a274c5defd2 | 532 | debug.printf("Index = %s, Int Index = %d",index, atoi(index)); |
yoshua0207 | 2:9a274c5defd2 | 533 | // int indexINT; |
yoshua0207 | 2:9a274c5defd2 | 534 | |
yoshua0207 | 2:9a274c5defd2 | 535 | finger.SetTemplate(atoi(index),datas,packet_size); |
yoshua0207 | 2:9a274c5defd2 | 536 | // uLCD.printf("RecvData = %d\n", finger.RecvData(data, packet_size)); |
yoshua0207 | 2:9a274c5defd2 | 537 | string fileName; |
yoshua0207 | 2:9a274c5defd2 | 538 | fileName = "/sd/" + string(groupIDF) + "/" + string(index) + ".bin"; |
yoshua0207 | 2:9a274c5defd2 | 539 | |
yoshua0207 | 2:9a274c5defd2 | 540 | const char* conv_file = fileName.c_str(); |
yoshua0207 | 2:9a274c5defd2 | 541 | debug.printf("Trying to read file %s\n",conv_file); |
yoshua0207 | 2:9a274c5defd2 | 542 | // make_bin_file(directory, groupID, index, fileName); |
yoshua0207 | 2:9a274c5defd2 | 543 | // uLCD.printf("Trying to read file %s\n",fileName); |
yoshua0207 | 2:9a274c5defd2 | 544 | |
yoshua0207 | 2:9a274c5defd2 | 545 | // char* file = fileName; |
yoshua0207 | 2:9a274c5defd2 | 546 | FILE *templateFile = fopen(conv_file, "w"); |
yoshua0207 | 2:9a274c5defd2 | 547 | |
yoshua0207 | 2:9a274c5defd2 | 548 | if(templateFile == NULL) { |
yoshua0207 | 2:9a274c5defd2 | 549 | debug.printf("Could not open file for write\n"); |
yoshua0207 | 2:9a274c5defd2 | 550 | } |
yoshua0207 | 2:9a274c5defd2 | 551 | |
yoshua0207 | 2:9a274c5defd2 | 552 | fwrite(datas,sizeof(unsigned char), sizeof(datas),templateFile); |
yoshua0207 | 2:9a274c5defd2 | 553 | |
yoshua0207 | 2:9a274c5defd2 | 554 | fclose(templateFile); |
beanmachine44 | 0:4bbfc068d864 | 555 | |
beanmachine44 | 1:4c720110a2a8 | 556 | |
beanmachine44 | 0:4bbfc068d864 | 557 | finger.CmosLed(1); |
yoshua0207 | 2:9a274c5defd2 | 558 | } |
yoshua0207 | 2:9a274c5defd2 | 559 | |
yoshua0207 | 2:9a274c5defd2 | 560 | int progress(int status, char *msg) { |
yoshua0207 | 2:9a274c5defd2 | 561 | // uLCD.locate(1,10); |
yoshua0207 | 2:9a274c5defd2 | 562 | debug.printf("%s",msg); |
yoshua0207 | 2:9a274c5defd2 | 563 | return 0; |
beanmachine44 | 0:4bbfc068d864 | 564 | } |