RFID door access with security camera

Dependencies:   EthernetNetIf mbed Camera_LS_Y201 ID12RFID SDFileSystem

Committer:
dburnham6
Date:
Thu Oct 13 20:44:31 2011 +0000
Revision:
0:5536e07364a7

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dburnham6 0:5536e07364a7 1 #include "mbed.h"
dburnham6 0:5536e07364a7 2 #include "EthernetNetIf.h"
dburnham6 0:5536e07364a7 3 #include "HTTPClient.h"
dburnham6 0:5536e07364a7 4 #include "ID12RFID.h"
dburnham6 0:5536e07364a7 5 #include "Camera_LS_Y201.h"
dburnham6 0:5536e07364a7 6 #include "SDFileSystem.h"
dburnham6 0:5536e07364a7 7
dburnham6 0:5536e07364a7 8 #define DEBMSG printf
dburnham6 0:5536e07364a7 9 #define NEWLINE() printf("\r\n")
dburnham6 0:5536e07364a7 10
dburnham6 0:5536e07364a7 11 #define FILENAME "/local/%08d.jpg"
dburnham6 0:5536e07364a7 12 LocalFileSystem fs("local");
dburnham6 0:5536e07364a7 13 Camera_LS_Y201 cam1(p9, p10);
dburnham6 0:5536e07364a7 14
dburnham6 0:5536e07364a7 15 typedef struct work {
dburnham6 0:5536e07364a7 16 FILE *fp;
dburnham6 0:5536e07364a7 17 } work_t;
dburnham6 0:5536e07364a7 18 work_t work;
dburnham6 0:5536e07364a7 19
dburnham6 0:5536e07364a7 20 ID12RFID rfid(p14); // uart rx
dburnham6 0:5536e07364a7 21 EthernetNetIf eth;
dburnham6 0:5536e07364a7 22 HTTPClient http;
dburnham6 0:5536e07364a7 23 DigitalOut myled(LED1);
dburnham6 0:5536e07364a7 24 DigitalOut myled2(p20);
dburnham6 0:5536e07364a7 25 DigitalOut door(p21);
dburnham6 0:5536e07364a7 26 int tagNum;
dburnham6 0:5536e07364a7 27
dburnham6 0:5536e07364a7 28 bool CheckTag(int tag){
dburnham6 0:5536e07364a7 29 HTTPText txt;
dburnham6 0:5536e07364a7 30 const char * txtBuffer;
dburnham6 0:5536e07364a7 31 char* bufferCopy;
dburnham6 0:5536e07364a7 32 char* line;
dburnham6 0:5536e07364a7 33
dburnham6 0:5536e07364a7 34 // retrieve authorized tag numbers, CSV format
dburnham6 0:5536e07364a7 35 HTTPResult r = http.get("http://www.prism.gatech.edu/~dburnham6/tags.txt", &txt);
dburnham6 0:5536e07364a7 36 if(r==HTTP_OK){
dburnham6 0:5536e07364a7 37 txtBuffer = txt.gets();
dburnham6 0:5536e07364a7 38 bufferCopy = const_cast<char *> (txtBuffer); // allow parsing of the text
dburnham6 0:5536e07364a7 39 line = strtok(bufferCopy, ","); // separate by commas
dburnham6 0:5536e07364a7 40 while (line != NULL) {
dburnham6 0:5536e07364a7 41 if(atoi(line) == tag) {
dburnham6 0:5536e07364a7 42 return true;
dburnham6 0:5536e07364a7 43 }
dburnham6 0:5536e07364a7 44 line = strtok(NULL, ",");
dburnham6 0:5536e07364a7 45 }
dburnham6 0:5536e07364a7 46
dburnham6 0:5536e07364a7 47 printf("Tag Not Found.\r\n");
dburnham6 0:5536e07364a7 48 }
dburnham6 0:5536e07364a7 49 else
dburnham6 0:5536e07364a7 50 {
dburnham6 0:5536e07364a7 51 printf("HTTP Error %d\n", r);
dburnham6 0:5536e07364a7 52 }
dburnham6 0:5536e07364a7 53 return false;
dburnham6 0:5536e07364a7 54 }
dburnham6 0:5536e07364a7 55
dburnham6 0:5536e07364a7 56 /** [from the Camera_LS_Y201 test code]
dburnham6 0:5536e07364a7 57 * Callback function for readJpegFileContent.
dburnham6 0:5536e07364a7 58 *
dburnham6 0:5536e07364a7 59 * @param buf A pointer to a buffer.
dburnham6 0:5536e07364a7 60 * @param siz A size of the buffer.
dburnham6 0:5536e07364a7 61 */
dburnham6 0:5536e07364a7 62 void callback_func(int done, int total, uint8_t *buf, size_t siz) {
dburnham6 0:5536e07364a7 63 fwrite(buf, siz, 1, work.fp);
dburnham6 0:5536e07364a7 64
dburnham6 0:5536e07364a7 65 static int n = 0;
dburnham6 0:5536e07364a7 66 int tmp = done * 100 / total;
dburnham6 0:5536e07364a7 67 if (n != tmp) {
dburnham6 0:5536e07364a7 68 n = tmp;
dburnham6 0:5536e07364a7 69 DEBMSG("Writing...: %3d%%", n);
dburnham6 0:5536e07364a7 70 NEWLINE();
dburnham6 0:5536e07364a7 71 }
dburnham6 0:5536e07364a7 72 }
dburnham6 0:5536e07364a7 73
dburnham6 0:5536e07364a7 74 /** [from the Camera_LS_Y201 test code]
dburnham6 0:5536e07364a7 75 * Capture.
dburnham6 0:5536e07364a7 76 *
dburnham6 0:5536e07364a7 77 * @param cam A pointer to a camera object.
dburnham6 0:5536e07364a7 78 * @param filename The file name.
dburnham6 0:5536e07364a7 79 *
dburnham6 0:5536e07364a7 80 * @return Return 0 if it succeed.
dburnham6 0:5536e07364a7 81 */
dburnham6 0:5536e07364a7 82 int capture(Camera_LS_Y201 *cam, char *filename) {
dburnham6 0:5536e07364a7 83 /*
dburnham6 0:5536e07364a7 84 * Take a picture.
dburnham6 0:5536e07364a7 85 */
dburnham6 0:5536e07364a7 86 if (cam->takePicture() != 0) {
dburnham6 0:5536e07364a7 87 return -1;
dburnham6 0:5536e07364a7 88 }
dburnham6 0:5536e07364a7 89 DEBMSG("Captured.");
dburnham6 0:5536e07364a7 90 NEWLINE();
dburnham6 0:5536e07364a7 91
dburnham6 0:5536e07364a7 92 /*
dburnham6 0:5536e07364a7 93 * Open file.
dburnham6 0:5536e07364a7 94 */
dburnham6 0:5536e07364a7 95 work.fp = fopen(filename, "wb");
dburnham6 0:5536e07364a7 96 if (work.fp == NULL) {
dburnham6 0:5536e07364a7 97 return -2;
dburnham6 0:5536e07364a7 98 }
dburnham6 0:5536e07364a7 99
dburnham6 0:5536e07364a7 100 /*
dburnham6 0:5536e07364a7 101 * Read the content.
dburnham6 0:5536e07364a7 102 */
dburnham6 0:5536e07364a7 103 DEBMSG("%s", filename);
dburnham6 0:5536e07364a7 104 NEWLINE();
dburnham6 0:5536e07364a7 105 if (cam->readJpegFileContent(callback_func) != 0) {
dburnham6 0:5536e07364a7 106 fclose(work.fp);
dburnham6 0:5536e07364a7 107 return -3;
dburnham6 0:5536e07364a7 108 }
dburnham6 0:5536e07364a7 109 fclose(work.fp);
dburnham6 0:5536e07364a7 110
dburnham6 0:5536e07364a7 111 /*
dburnham6 0:5536e07364a7 112 * Stop taking pictures.
dburnham6 0:5536e07364a7 113 */
dburnham6 0:5536e07364a7 114 cam->stopTakingPictures();
dburnham6 0:5536e07364a7 115
dburnham6 0:5536e07364a7 116 return 0;
dburnham6 0:5536e07364a7 117 }
dburnham6 0:5536e07364a7 118
dburnham6 0:5536e07364a7 119 int main() {
dburnham6 0:5536e07364a7 120 // init ethernet
dburnham6 0:5536e07364a7 121 EthernetErr ethErr = eth.setup();
dburnham6 0:5536e07364a7 122 if(ethErr)
dburnham6 0:5536e07364a7 123 {
dburnham6 0:5536e07364a7 124 printf("Error %d in setup.\n", ethErr);
dburnham6 0:5536e07364a7 125 }
dburnham6 0:5536e07364a7 126 printf("Setup OK\n");
dburnham6 0:5536e07364a7 127
dburnham6 0:5536e07364a7 128 // init camera
dburnham6 0:5536e07364a7 129 DEBMSG("Camera module");
dburnham6 0:5536e07364a7 130 NEWLINE();
dburnham6 0:5536e07364a7 131 DEBMSG("Resetting...");
dburnham6 0:5536e07364a7 132 NEWLINE();
dburnham6 0:5536e07364a7 133 wait(1);
dburnham6 0:5536e07364a7 134 if (cam1.reset() == 0) {
dburnham6 0:5536e07364a7 135 DEBMSG("Reset OK.");
dburnham6 0:5536e07364a7 136 NEWLINE();
dburnham6 0:5536e07364a7 137 } else {
dburnham6 0:5536e07364a7 138 DEBMSG("Reset fail.");
dburnham6 0:5536e07364a7 139 NEWLINE();
dburnham6 0:5536e07364a7 140 error("Reset fail.");
dburnham6 0:5536e07364a7 141 }
dburnham6 0:5536e07364a7 142 wait(1);
dburnham6 0:5536e07364a7 143
dburnham6 0:5536e07364a7 144 // wait for tag
dburnham6 0:5536e07364a7 145 while(1) {
dburnham6 0:5536e07364a7 146 if(rfid.readable()) {
dburnham6 0:5536e07364a7 147 int tag = rfid.read();
dburnham6 0:5536e07364a7 148 printf("RFID Tag number : %d\r\n", tag);
dburnham6 0:5536e07364a7 149 if(CheckTag(tag)) {
dburnham6 0:5536e07364a7 150 printf("Authorized user confirmed. Unlocking door...\r\n");
dburnham6 0:5536e07364a7 151 door = 1;
dburnham6 0:5536e07364a7 152 myled = 1;
dburnham6 0:5536e07364a7 153 wait(10);
dburnham6 0:5536e07364a7 154 door = 0;
dburnham6 0:5536e07364a7 155 myled = 0;
dburnham6 0:5536e07364a7 156 } else {
dburnham6 0:5536e07364a7 157 printf("Unauthorized access tag. Picture for evidence... \r\n");
dburnham6 0:5536e07364a7 158 myled2 = 1;
dburnham6 0:5536e07364a7 159 char fname[64];
dburnham6 0:5536e07364a7 160 snprintf(fname, sizeof(fname) - 1, FILENAME, tag);
dburnham6 0:5536e07364a7 161 int r = capture(&cam1, fname); // take a picture
dburnham6 0:5536e07364a7 162 if (r == 0) {
dburnham6 0:5536e07364a7 163 DEBMSG("[%04d]:OK.", tag);
dburnham6 0:5536e07364a7 164 NEWLINE();
dburnham6 0:5536e07364a7 165 } else {
dburnham6 0:5536e07364a7 166 DEBMSG("[%04d]:NG. (code=%d)", tag, r);
dburnham6 0:5536e07364a7 167 NEWLINE();
dburnham6 0:5536e07364a7 168 error("Picture failed.");
dburnham6 0:5536e07364a7 169 }
dburnham6 0:5536e07364a7 170 myled2 = 0;
dburnham6 0:5536e07364a7 171 }
dburnham6 0:5536e07364a7 172 }
dburnham6 0:5536e07364a7 173 }
dburnham6 0:5536e07364a7 174 }