Gedeon Nyengele / Mbed 2 deprecated FINAL_PROJECT_4180

Dependencies:   mbed

Revision:
12:5cb9ffad1ad7
Parent:
11:1d7021c0739d
diff -r 1d7021c0739d -r 5cb9ffad1ad7 lib.cpp
--- a/lib.cpp	Mon Apr 25 02:38:50 2016 +0000
+++ b/lib.cpp	Fri May 06 13:10:20 2016 +0000
@@ -1,10 +1,12 @@
 #include "mbed.h"
 #include "lib.h"
+#include <cstring>
 
 #define CMD_ENROLL  0x01
 #define CMD_AUTH    0x02
 #define FACE_FID    0x01
 #define SPEECH_FID  0x02
+#define VOICE_FID   0x03
 #define SUCCESS     0x55
 #define FAILURE     0x8A
 
@@ -67,6 +69,7 @@
 bool face_enroll(char *user_id, Serial *android)
 {
     char CMD[] = {
+        0x0A,
         CMD_ENROLL,
         0x02,
         0x04,
@@ -80,6 +83,7 @@
     };
 
     for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) {
+        while(!android->writeable());
         android->putc(CMD[i]);
     }
 
@@ -89,9 +93,10 @@
     else return false;
 }
 
-bool face_detect(char *user_id, Serial *android)
+bool face_auth(char *user_id, Serial *android)
 {
     char CMD[] = {
+        0x0A,
         CMD_AUTH,
         0x02,
         0x04,
@@ -105,6 +110,7 @@
     };
 
     for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) {
+        while(!android->writeable());
         android->putc(CMD[i]);
     }
 
@@ -117,6 +123,7 @@
 bool speech_enroll(char *user_id, Serial *android)
 {
     char CMD[] = {
+        0x0A,
         CMD_ENROLL,
         0x02,
         0x04,
@@ -130,6 +137,7 @@
     };
 
     for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) {
+        while(!android->writeable());
         android->putc(CMD[i]);
     }
 
@@ -139,9 +147,10 @@
     else return false;
 }
 
-bool speech_detect(char *user_id, Serial *android)
+bool speech_auth(char *user_id, Serial *android)
 {
     char CMD[] = {
+        0x0A,
         CMD_AUTH,
         0x02,
         0x04,
@@ -155,6 +164,61 @@
     };
 
     for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) {
+        while(!android->writeable());
+        android->putc(CMD[i]);
+    }
+
+    while (!android->readable());
+    char temp = android->getc();
+    if (temp == SUCCESS) return true;
+    else return false;
+}
+
+bool voice_enroll(char *user_id, Serial *android)
+{
+    char CMD[] = {
+        0x0A,
+        CMD_ENROLL,
+        0x02,
+        0x04,
+        0x01,
+        user_id[0],
+        user_id[1],
+        user_id[2],
+        user_id[3],
+        VOICE_FID,
+        '\0'
+    };
+
+    for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) {
+        while(!android->writeable());
+        android->putc(CMD[i]);
+    }
+
+    while (!android->readable());
+    char temp = android->getc();
+    if (temp == SUCCESS) return true;
+    else return false;
+}
+
+bool voice_auth(char *user_id, Serial *android)
+{
+    char CMD[] = {
+        0x0A,
+        CMD_AUTH,
+        0x02,
+        0x04,
+        0x01,
+        user_id[0],
+        user_id[1],
+        user_id[2],
+        user_id[3],
+        VOICE_FID,
+        '\0'
+    };
+
+    for (int i = 0; i < sizeof(CMD)/ sizeof(char); i++) {
+        while(!android->writeable());
         android->putc(CMD[i]);
     }
 
@@ -172,72 +236,138 @@
     *speaker = 0.0;
 }
 
-void failure_display(uLCD_4DGL *lcd, char *text)
+void display_msg(Cryst_LCD *lcd, char *text)
 {
-    lcd->baudrate(3000000);
     lcd->cls();
-    lcd->textbackground_color(WHITE);
-    lcd->text_mode(OPAQUE);
-    lcd->text_width(4);
-    lcd->text_height(4);
-    lcd->text_string(text, 1, 4, FONT_7X8, RED);
+    lcd->locate(1, 0);
+    lcd->printf("%s", text);
 }
 
-void success_display(uLCD_4DGL *lcd, char *text)
+void greeting(Cryst_LCD *lcd)
 {
-    lcd->baudrate(3000000);
     lcd->cls();
-    lcd->textbackground_color(WHITE);
-    lcd->text_mode(OPAQUE);
-    lcd->text_width(4);
-    lcd->text_height(4);
-    lcd->text_string(text, 1, 4, FONT_7X8, BLUE);
-}
-
-void greeting(uLCD_4DGL *lcd)
-{
-    lcd->baudrate(3000000);
-    lcd->cls();
-    lcd->textbackground_color(WHITE);
-    lcd->text_mode(OPAQUE);
-    lcd->text_width(4);
-    lcd->text_height(4);
-    lcd->text_string("Enter 4-digit PIN: ", 1, 4, FONT_7X8, BLUE);
+    lcd->locate(0, 7);
+    lcd->printf("WELCOME");
+    lcd->locate(3, 0);
+    lcd->printf("*:AUTH");
+    lcd->locate(3, 12);
+    lcd->printf("#:ENROLL");
 }
 
-int id_to_int(char *user_id, int size)
+bool prompt(const char* msg, Cryst_LCD *lcd, Keypad<4, 3>* pad)
 {
-    int val = 0;
-    for (int i = 0; i < size; i++) {
-        val += 10 * val + (user_id[i] - '0');
-    }
-    return val;
-}
-
-void add_to_table(HASH_RECORD *table, int ind, int user_id, int hash)
-{
-    HASH_RECORD rec = {user_id, hash};
-    table[ind] = rec;
+    bool res = false;
+    char temp;
+    lcd->cls();
+    lcd->locate(0,0);
+    lcd->printf("%s", msg);
+    lcd->locate(3, 0);
+    lcd->printf("*:NO");
+    lcd->locate(3, 15);
+    lcd->printf("#:YES");
+    while ((temp = pad->getKeyChar()) != '#' && temp != '*');
+    if (temp == '#') res = true;
+    return res;
 }
 
-bool contain_hash(HASH_RECORD *table, int table_size, int user_id, int hash)
+bool is_valid_user(char *user_id)
 {
-    for (int i = 0; i < table_size; i++) {
-        HASH_RECORD h = table[i];
-        if (h.user_id == user_id && h.hash == hash) {
-            return false;
-        }
-    }
-    return false;
+    char full_path[30];
+    std::strcpy(full_path, "/local/");
+    char filename[10];
+    std::memcpy(filename, user_id, 4);
+    filename[4] = '\0';
+    std::strcat(filename, ".TXT");
+    std::strcat(full_path, filename);
+    FILE *fp = fopen(full_path, "r");
+    if (fp == NULL)return false;
+    else fclose(fp);
+    return true;
 }
 
-int read_keypad()
+bool write_hash_to_file(char *user_id, int hash)
 {
-    return 0;
-}
-
-bool get_user_id(char *user_id)
-{
+    char full_path[30];
+    std::strcpy(full_path, "/local/");
+    char filename[10];
+    std::memcpy(filename, user_id, 4);
+    filename[4] = '\0';
+    std::strcat(filename, ".TXT");
+    std::strcat(full_path, filename);
+    FILE *fp = fopen(full_path, "w");
+    if (fp == NULL) return false;
+    fprintf(fp, "%d", hash);
+    fclose(fp);
     return true;
 }
 
+bool read_hash_from_file(char *user_id, int *hash)
+{
+    bool success_read = false;
+    char full_path[30];
+    std::strcpy(full_path, "/local/");
+    char filename[10];
+    std::memcpy(filename, user_id, 4);
+    filename[4] = '\0';
+    std::strcat(filename, ".TXT");
+    std::strcat(full_path, filename);
+    FILE *fp = fopen(full_path, "r");
+    if (fp) {
+        int t = fscanf(fp, "%d", hash);
+        if (t != 0 && t != EOF) success_read = true;
+        fclose(fp);
+    }
+    return success_read;
+}
+
+bool read_pin(char *buffer, int length, Cryst_LCD* lcd, Keypad<4, 3>* pad)
+{
+    bool res = false;
+    int cur = 0;
+    lcd->cls();
+    lcd->locate(3,0);
+    lcd->printf("*:CLEAR");
+    lcd->locate(3, 13);
+    lcd->printf("#:ENTER");
+    lcd->locate(0,0);
+    lcd->printf("Enter 4-Digit PIN:\n");
+    lcd->cursor_on();
+    lcd->cursor_blink();
+    bool done  = false;
+    char temp_char;
+    while (!done) {
+        temp_char = pad->getKeyChar();
+        if (temp_char == '#') done = true;
+        else if (temp_char == '*') {
+            lcd->clear_line();
+            cur = 0;
+        } else {
+            if (cur < 19) lcd->printf("%C", '*');
+            if (cur < length) buffer[cur] = temp_char;
+            cur++;
+        }
+    }
+    if (cur == length) res = true;
+    lcd->cursor_off();
+    lcd->cursor_no_blink();
+    return res;
+}
+
+
+bool fp_clearAll(FPScanner *fp)
+{
+    bool status;
+    fp->SetLED(true);
+    status = fp->DeleteAll();
+    fp->SetLED(false);
+    return status;
+}
+
+char clear_serial_buffer(Serial *dev)
+{
+    char temp;
+    while (dev->readable()) {
+        temp = dev->getc();
+    }
+    return temp;
+}