HOme Sheriff And Lamp
Dependencies: CameraC328 HCSR04 SDFileSystem WIZnetInterface mbed
Fork of HoSAL by
Revision 3:8c4e0e7c8cea, committed 2015-08-11
- 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
--- /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__ + +
