HOme Sheriff And Lamp

Dependencies:   CameraC328 HCSR04 SDFileSystem WIZnetInterface mbed

Fork of HoSAL by pi bae

Files at this revision

API Documentation at this revision

Comitter:
uasonice
Date:
Tue Aug 11 17:35:33 2015 +0000
Parent:
2:3c7526a1893a
Child:
4:ca368c50f8c9
Commit message:
add library

Changed in this revision

SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
WIZnetInterface.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
rev_Camera.cpp Show annotated file Show diff for this revision Revisions of this file
rev_Camera.h Show annotated file Show diff for this revision Revisions of this file
rev_config.h Show annotated file Show diff for this revision Revisions of this file
rev_httpFile.cpp Show annotated file Show diff for this revision Revisions of this file
rev_httpFile.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Tue Aug 11 17:35:33 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/SDFileSystem/#7b35d1709458
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WIZnetInterface.lib	Tue Aug 11 17:35:33 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#3b64df29662f
--- a/main.cpp	Tue Aug 11 16:30:37 2015 +0000
+++ b/main.cpp	Tue Aug 11 17:35:33 2015 +0000
@@ -1,24 +1,33 @@
 #include "mbed.h"
-#include "hcsr04.h"
-#include "rev_Hcsr04.h"
 
 #define DEBUG_TYPE 1
 #define P_ uart.printf
 #include "rev_config.h"
 
+#include "rev_Camera.h"
+//#include "rev_httpFile.h"
+#include "rev_Hcsr04.h"
 
-#define  CHECK_DISTANCE 1000
 
-#if 0
-int sum_dist[3] = {0,}; //ryuhs74@20150712 - 
-int avg_dist = 0; //ryuhs74@20150712 - 
-int index_dist = 0; //ryuhs74@20150712 - 
-#endif
+#define MAC     "\x00\x08\xDC\x11\x34\x78"
+#define IP      "192.168.5.5"
+#define MASK    "255.255.255.0"
+#define GATEWAY "192.168.5.1"
+
+#define HTTPD_SERVER_PORT   80
 
 Serial uart(USBTX, USBRX); // tx, rx
 
+#if defined(USE_CAMERA)
+//CameraC328 cam(PA_14, PA_13, CameraC328::Baud14400);
+CameraC328 *g_pCam;
+#endif // defined(USE_CAMERA)
+
+#if defined(USE_MEASURE_DISTANCE)
 //HCSR04 sensor(D12, D11); 
 HCSR04 *g_pHcrs; 
+#define  CHECK_DISTANCE 50
+#endif // defined(USE_MEASURE_DISTANCE)
 
 DigitalOut led1(LED1); //server listning status
 DigitalOut led2(LED2); //socket connecting status
@@ -35,16 +44,32 @@
 //////////////////////////////////////////////////////////////////////////
 int main()
 {
+    Timer tm1;
+
     ledTick.attach(&ledTickfunc,0.5);
 
     uart.baud(115200);
-    DM_fLN("init");
-    
+
+    DM_fLN("INIT DEVICE");
+#if defined(USE_CAMERA)
+    DM_fLN("Init camera C328");
+    g_pCam = new CameraC328(PA_14, PA_13, CameraC328::Baud14400);
+    revSync(g_pCam);
+    tm1.reset();
+    tm1.start();
+    //revJpeg_snapshot(g_pCam, "/sd/file05.jpg", CameraC328::JpegResolution640x480);
+    tm1.stop();
+    DM_fLN("time of capture: %d", tm1.read_ms());
+#endif // defined(USE_CAMERA)
+#if defined(USE_MEASURE_DISTANCE)
     g_pHcrs = new HCSR04(D12, D11);
+#endif // defined(USE_MEASURE_DISTANCE)
+
+    DM_fLN("start main loop");
     while(1) {
+#if defined(USE_MEASURE_DISTANCE)
         get_distance(g_pHcrs);
+#endif // defined(USE_MEASURE_DISTANCE)
         wait_ms(1000);
     }
 }
-
-
--- a/rev_Camera.cpp	Tue Aug 11 16:30:37 2015 +0000
+++ b/rev_Camera.cpp	Tue Aug 11 17:35:33 2015 +0000
@@ -39,10 +39,10 @@
 /**
  * Synchronizing.
  */
-void revSync(void) {
+void revSync(CameraC328 *pH) {
     CameraC328::ErrorNumber err = CameraC328::NoError;
 
-    err = cam.sync();
+    err = pH->sync();
     if (CameraC328::NoError == err) {
         DM_fLN("[ OK ] : CameraC328::sync");
     } else {
@@ -55,10 +55,10 @@
  * param strFile: "/fs/file01.jpg"
  * param resol  : CameraC328::JpegResolution640x480, CameraC328::JpegResolution320x240
  */
-void revJpeg_snapshot(char *strFile, CameraC328::JpegResolution resol) {
+void revJpeg_snapshot(CameraC328 *pH, char *strFile, CameraC328::JpegResolution resol) {
     CameraC328::ErrorNumber err = CameraC328::NoError;
 
-    err = cam.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, resol);
+    err = pH->init(CameraC328::Jpeg, CameraC328::RawResolution80x60, resol);
     if (CameraC328::NoError == err) {
         DM_fLN("[ OK ] : CameraC328::init");
     } else {
@@ -66,7 +66,7 @@
     }
 
     fp_jpeg = fopen(strFile, "w");
-    err = cam.getJpegSnapshotPicture(cb_jpeg);
+    err = pH->getJpegSnapshotPicture(cb_jpeg);
     if (CameraC328::NoError == err) {
         DM_fLN("[ OK ] : CameraC328::getJpegPreview");
     } else {
@@ -81,9 +81,9 @@
  * param strFile: "/fs/file01.jpg"
  * param resol  : CameraC328::JpegResolution640x480, CameraC328::JpegResolution320x240
  */
-void revJpeg_preview(char *strFile, CameraC328::JpegResolution resol) {
+void revJpeg_preview(CameraC328 *pH, char *strFile, CameraC328::JpegResolution resol) {
     CameraC328::ErrorNumber err = CameraC328::NoError;
-    err = cam.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, resol);
+    err = pH->init(CameraC328::Jpeg, CameraC328::RawResolution80x60, resol);
     if (CameraC328::NoError == err) {
         DM_fLN("[ OK ] : CameraC328::init");
     } else {
@@ -92,7 +92,7 @@
 
     fp_jpeg = fopen(strFile, "w");
 
-    err = cam.getJpegPreviewPicture(cb_jpeg);
+    err = pH->getJpegPreviewPicture(cb_jpeg);
     if (CameraC328::NoError == err) {
         DM_fLN("[ OK ] : CameraC328::getJpegPreview");
     } else {
@@ -104,4 +104,3 @@
 
 #endif // defined(USE_CAMERA)
 
-
--- a/rev_Camera.h	Tue Aug 11 16:30:37 2015 +0000
+++ b/rev_Camera.h	Tue Aug 11 17:35:33 2015 +0000
@@ -14,12 +14,13 @@
 extern CameraC328 cam;
 extern CameraC328::JpegResolution camResul;
 
-void revSync(void) ;
+void revSync(CameraC328 *pH) ;
 void revUncompressed_snapshot(char *strFile) ;
 void revUncompressed_preview(char *strFile) ;
-void revJpeg_snapshot(char *strFile, CameraC328::JpegResolution resol) ;
-void revJpeg_preview(char *strFile, CameraC328::JpegResolution resol) ;
+void revJpeg_snapshot(CameraC328 *pH, char *strFile, CameraC328::JpegResolution resol) ;
+void revJpeg_preview(CameraC328 *pH, char *strFile, CameraC328::JpegResolution resol) ;
 
 #endif // __REV_CAMERA_H__
 
 
+
--- a/rev_config.h	Tue Aug 11 16:30:37 2015 +0000
+++ b/rev_config.h	Tue Aug 11 17:35:33 2015 +0000
@@ -12,7 +12,8 @@
 
 //////////////////////////////////////////////////////////////////////////
 // define FEATURE
-//#define USE_HTTP_FILE_SERVER
+#define USE_SDCARD
+#define USE_HTTP_FILE_SERVER
 //#define USE_CAMERA
 #define USE_MEASURE_DISTANCE
 
@@ -20,7 +21,7 @@
 //////////////////////////////////////////////////////////////////////////
 // extern variable
 extern Serial uart;
-
+extern bool g_bInitDone;
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -92,5 +93,3 @@
 
 #endif // __REV_CONFIG_H__
 
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rev_httpFile.cpp	Tue Aug 11 17:35:33 2015 +0000
@@ -0,0 +1,137 @@
+/*
+# coded by revival / uasonice (at) gmail.com
+# DATE: 2015/08/10 / Mon Aug 10 00:01:54 KST 2015
+#
+# DESCRIPTION:
+#       http file server
+*/
+
+#include "mbed.h"
+#include "EthernetInterface.h"
+#include "SDFileSystem.h"
+#include <stdio.h>
+#include <string.h>
+
+#define DEBUG_TYPE 1
+#define P_ uart.printf
+#include "rev_config.h"
+
+#include "rev_httpFile.h"
+
+#if defined(USE_HTTP_FILE_SERVER)
+//Serial uart(USBTX, USBRX);
+
+//TCPSocketServer server;
+//TCPSocketConnection client;
+
+char buffer[HTTPD_MAX_REQ_LENGTH];
+char httpHeader[HTTPD_MAX_HDR_LENGTH+1];
+char fileName[HTTPD_MAX_FNAME_LENGTH+1];
+char dirName[HTTPD_MAX_DNAME_LENGTH+1];
+char *uristr;
+char *eou;
+
+FILE *fp;
+int rdCnt;
+
+//DigitalOut led1(LED1); //server listning status
+//DigitalOut led2(LED2); //socket connecting status
+
+
+void get_file(char* uri)
+{
+    DM_FLN("get_file %s", uri);
+    char *lstchr = strrchr(uri, NULL) -1;
+    if ('/' == *lstchr) {
+        DM_FLN("Open directory /sd%s", uri);
+        *lstchr = 0;
+        sprintf(fileName, "/sd%s", uri);
+        DIR *d = opendir(fileName);
+        if (d != NULL) {
+            sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n");
+            client.send(httpHeader,strlen(httpHeader));
+            sprintf(httpHeader,"<html><head><title>Directory Listing</title></head><body><h1>%s Directory Listing</h1><ul>", uri);
+            client.send(httpHeader,strlen(httpHeader));
+            struct dirent *p;
+            while((p = readdir(d)) != NULL) {
+                sprintf(dirName, "%s/%s", fileName, p->d_name);
+                DM_FLN("%s", dirName);
+                DIR *subDir = opendir(dirName);
+                if (subDir != NULL) {
+                    sprintf(httpHeader,"<li><a href=\"./%s/\">%s/</a></li>", p->d_name, p->d_name);
+                } else {
+                    sprintf(httpHeader,"<li><a href=\"./%s\">%s</a></li>", p->d_name, p->d_name);
+                }
+                client.send(httpHeader,strlen(httpHeader));
+            }
+        }
+        closedir(d);
+        DM_FLN("Directory closed");
+        sprintf(httpHeader,"</ul></body></html>");
+        client.send(httpHeader,strlen(httpHeader));
+    } else {
+        sprintf(fileName, "/sd%s", uri);
+        fp = fopen(fileName, "r");
+        if (fp == NULL) {
+            DM_FLN("File not found");
+            sprintf(httpHeader,"HTTP/1.1 404 Not Found \r\nContent-Type: text\r\nConnection: Close\r\n\r\n");
+            client.send(httpHeader,strlen(httpHeader));
+            client.send(uri,strlen(uri));
+        } else {
+            DM_FLN("Sending: header");
+            sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n");
+            client.send(httpHeader,strlen(httpHeader));
+            DM_FLN(" file");
+            while ((rdCnt = fread(buffer, sizeof( char ), HTTPD_MAX_REQ_LENGTH, fp)) == HTTPD_MAX_REQ_LENGTH) {
+                client.send(buffer, rdCnt);
+                DM_FLN(".");
+            }
+            client.send(buffer, rdCnt);
+            fclose(fp);
+            DM_FLN("done");
+        }
+    }
+}
+
+void fileServer(void)
+{
+
+    DM_FLN(_N_"Wait for new connection...");
+    server.accept(client);
+    client.set_blocking(false, 1500); // Timeout after 1500ms
+
+    DM_FLN("Connection from: %s", client.get_address());
+    while (true) {
+        led2 = true;
+        int n = client.receive(buffer, sizeof(buffer));
+        if (n <= 0) break;
+        DM_FLN("Recieved Data: %d\r\n\r\n%.*s",n,n,buffer);
+        if (n >= 1024) {
+            sprintf(httpHeader,"HTTP/1.1 413 Request Entity Too Large \r\nContent-Type: text\r\nConnection: Close\r\n\r\n");
+            client.send(httpHeader,strlen(httpHeader));
+            client.send(buffer,n);
+            break;
+        } else {
+            buffer[n]=0;
+        }
+        if (!strncmp(buffer, "GET ", 4)) {
+            uristr = buffer + 4;
+            eou = strstr(uristr, " ");
+            if (eou == NULL) {
+                sprintf(httpHeader,"HTTP/1.1 400 Bad Request \r\nContent-Type: text\r\nConnection: Close\r\n\r\n");
+                client.send(httpHeader,strlen(httpHeader));
+                client.send(buffer,n);
+            } else {
+                *eou = 0;
+                get_file(uristr);
+            }
+        }
+    }
+    led2 = false;
+    client.close();
+    return;
+}
+#endif // defined(USE_HTTP_FILE_SERVER)
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rev_httpFile.h	Tue Aug 11 17:35:33 2015 +0000
@@ -0,0 +1,34 @@
+/*
+# coded by revival / uasonice (at) gmail.com
+# DATE: 2015/08/10 / Mon Aug 10 00:01:54 KST 2015
+#
+# DESCRIPTION:
+#       http file server
+*/
+
+#ifndef __REV_HTTPFILE_H__
+#define __REV_HTTPFILE_H__
+
+/*
+#define MAC     "\x00\x08\xDC\x11\x34\x78"
+#define IP      "192.168.5.5"
+#define MASK    "255.255.255.0"
+#define GATEWAY "192.168.5.1"
+*/
+
+#define HTTPD_MAX_REQ_LENGTH   512
+#define HTTPD_MAX_HDR_LENGTH   255
+#define HTTPD_MAX_FNAME_LENGTH   127
+#define HTTPD_MAX_DNAME_LENGTH   127
+
+extern TCPSocketServer server;
+extern TCPSocketConnection client;
+extern DigitalOut led1; //server listning status
+extern DigitalOut led2; //socket connecting status
+
+void get_file(char* uri);
+void fileServer(void);
+
+#endif // __REV_HTTPFILE_H__
+
+