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.
Diff: lib.cpp
- Revision:
- 12:5cb9ffad1ad7
- Parent:
- 11:1d7021c0739d
--- 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;
+}