this camera C328 http sdcard file server example is for academy
Dependencies: CameraC328 SDFileSystem WIZnetInterface mbed
Insert below jpg file in your SDcard to take a picture in Web Server /media/uploads/IOP/take_a_picture.zip
Diff: main.cpp
- Revision:
- 2:4dfa60f33178
- Parent:
- 1:a878f7545221
- Child:
- 3:e6025c5b25e4
--- a/main.cpp Tue Jul 28 07:53:41 2015 +0000 +++ b/main.cpp Wed Aug 05 23:53:43 2015 +0000 @@ -12,7 +12,7 @@ #define IP "192.168.240.100" #define MASK "255.255.255.0" #define GATEWAY "192.168.240.1" -#define PORT 80 +#define PORT 80 Serial pc (USBTX,USBRX); // tx, rx SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "wfs"); // the pinout on the mbed @@ -56,8 +56,10 @@ err = camera.sync(); if (CameraC328::NoError == err) { + printf("[Camera Initializing..]\r\n"); printf("[ OK ] : CameraC328::sync\r\n"); } else { + printf("[Camera Initializing..]\r\n"); printf("[FAIL] : CameraC328::sync (Error=%02X)\r\n", (int)err); } } @@ -75,22 +77,22 @@ #endif if (CameraC328::NoError == err) { printf("[ OK ] : CameraC328::init\r\n"); + printf("\r\n[Start taking a picture]\r\n"); } else { printf("[FAIL] : CameraC328::init (Error=%02X)\r\n", (int)err); - } - + } for (int i = 0; i < CAPTURE_FRAMES; i++) { char fname[64]; - snprintf(fname, sizeof(fname), "/wfs/jpss%04d.jpg", i); + snprintf(fname, sizeof(fname), "/wfs/Snapshot%02d.jpg",i); fp_jpeg = fopen(fname, "w"); - err = camera.getJpegSnapshotPicture(jpeg_callback); + err = camera.getJpegSnapshotPicture(jpeg_callback); // call the snapshot function + if (CameraC328::NoError == err) { - printf("[ OK ] : CameraC328::getJpegSnapshotPicture\r\n"); + printf("[ OK ] : CameraC328::getJpegSnapshotPicture[%d]\r\n",i); } else { - printf("[FAIL] : CameraC328::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err); - } - + printf("[FAIL] : CameraC328::getJpegSnapshotPicture[%d] (Error=%02X)\r\n",i, (int)err); + } fclose(fp_jpeg); } } @@ -139,12 +141,12 @@ snprintf(sentBuffer, sizeof(sentBuffer),"%s%s\r\n",sentBuffer,line_response); //append to sentBuffer if (EnDebugMSG) - printf("\n-->sent Header--\n"); + printf("\r\n-->sent Header--\r\n"); client.send_all(sentBuffer,strlen(sentBuffer)); if (EnDebugMSG) { printf(sentBuffer); - printf("\n--end Header-- bytes:%d",strlen(sentBuffer)); + printf("\r\n--end Header-- bytes:%d",strlen(sentBuffer)); } wait(0.2); //200ms important for browser! } @@ -153,7 +155,7 @@ { client.send_all(line,length_line); if (EnDebugMSG) - printf("\n-->send HTML line:\n%s ...Ok!",line); + printf("\r\n-->send HTML line:\r\n%s ...Ok!",line); wait(0.01); } @@ -161,13 +163,13 @@ { send_HTTP_header("HTTP/1.1", status_code, title, "text/html", -1); if (EnDebugMSG) - printf("\n-->send_error...\n"); + printf("\r\n-->send_error...\r\n"); sentBuffer[0]=NULL; //clear buffer sprintf(line_response, "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<title>%d %s</title>\r\n</head>\r\n", status_code, title); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer sprintf(line_response, "<body><center><h2><center>%d %s</center></h2>\r\n",status_code, title ); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer - sprintf(line_response, "%s\r\n", body_text ); + sprintf(line_response, "%s\r\n", body_text ); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer sprintf(line_response, "<p>mbed HTTP File Server</p>\r\n</center></body></html>\r\n"); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer @@ -179,16 +181,18 @@ char *mime_type = {0}; unsigned int bytes_for_send=0; long long filesize, all_send_bytes = 0; - - if (strcmp(file_path,"/wfs//take_a_picture.jpg") == 0) - take_picture = 1; - else take_picture = 0; mime_type = get_mime_type( path_file ); snprintf(file_path, sizeof(file_path),"/wfs/%s",path_file); + + if (strcmp(file_path,"/wfs//take_a_picture.jpg") == 0){ + take_picture = 1; + } + else take_picture = 0; + if (EnDebugMSG) { - printf("\n-->from send_file:%s",file_path); - printf("\n-->from send_file mime type:%s",mime_type); + printf("\r\n-->from send_file:%s",file_path); + printf("\r\n-->from send_file mime type:%s",mime_type); } if (Mystat(path_file, &myStatBuf)) { //fault with file @@ -214,13 +218,13 @@ fread (sentBuffer,1,bytes_for_send,fp); filesize -= bytes_for_send; if (EnDebugMSG) - printf("\n---bytes_for_send...%d",bytes_for_send); + printf("\r\n---bytes_for_send...%d",bytes_for_send); client.send_all(sentBuffer,bytes_for_send); //Thread::wait(10); all_send_bytes += bytes_for_send; } if (EnDebugMSG) - printf("\n---buffer fill end - all ...%lld", all_send_bytes); + printf("\r\n---buffer fill end - all ...%lld", all_send_bytes); //binary send sprintf(line_response, "\r\n"); @@ -244,11 +248,11 @@ char timeBuf[40]; if (EnDebugMSG) - printf("\n-->from send_directory:%s",path); + printf("\r\n-->from send_directory:%s",path); snprintf(file_path,sizeof(file_path),"/wfs%s",path); DIR *d = opendir(file_path); if (EnDebugMSG && d!=NULL) - printf("\n-->from send_directory:%s ...open OK",file_path); + printf("\r\n-->from send_directory:%s ...open OK",file_path); if (d==NULL) { //error open dir send_HTML_error( 403, "Forbidden", "403 - Directory access forbidden."); return -1; @@ -261,6 +265,7 @@ sprintf(line_response,"<meta content=\"text/html; charset=iso-8859-1\" http-equiv=\"Content-Type\"></head>\n"); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer + sprintf(line_response,"<body><center>\n<h3>Index of %s</h3>\n", path); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer send_HTML_line(sentBuffer, strlen(sentBuffer)); @@ -279,16 +284,16 @@ snprintf(process_name,posOfLastSlash+1,"%s",path); if (EnDebugMSG) printf("\r\n>>process_name=%s",process_name); - sprintf(line_response,"<tr><td align=\"left\"><a href=\"%s\">../refresh</a></td></tr>\n",process_name); + sprintf(line_response,"<tr><td align=\"left\"><a href=\"%s\">../</a></td></tr>\n",process_name); snprintf(&(sentBuffer[strlen(sentBuffer)]),sizeof(sentBuffer),"%s",line_response); //append to buffer while((p = readdir(d)) != NULL) { if (EnDebugMSG) - printf("\n :%s",p->d_name); + printf("\r\n :%s",p->d_name); sprintf(file_path,"%s/%s",path,p->d_name); Mystat( file_path, &sb ); if (get_dirInfo(file_path)==0 ) { //this is directory path if (EnDebugMSG) - printf("\nDIR"); + printf("\r\nDIR"); sprintf(line_response, "<tr><td align=\"left\"><a href=\"%s\">%s</a><br></td></tr>\n",file_path,p->d_name); if (strlen(line_response)>(sizeof(sentBuffer)-strlen(sentBuffer))) { //buffer must be sent send_HTML_line(sentBuffer, strlen(sentBuffer)); @@ -298,7 +303,7 @@ } else { //this is file if (EnDebugMSG) - printf("\nFILE"); + printf("\r\nFILE"); timeinfo = localtime (&sb.st_mtime); //strftime(timeBuf,40, "%I:%M:%S %p (%Y/%m/%d)\r\n", localtime(&sb.st_mtime)); strftime(timeBuf, 40, "%c", timeinfo); @@ -339,9 +344,9 @@ //get URL snprintf(sURL,strlen(tmpBuffer)-strlen(sProtocol),"%s\r\n", tmpBuffer); //URL is between Method and Protocol - printf("\nParse Method:%s",sMethod); - printf("\nParse URL:%s",sURL); - printf("\nParse PROTOCOL:%s",sProtocol); + printf("\r\nParse Method:%s",sMethod); + printf("\r\nParse URL:%s",sURL); + printf("\r\nParse PROTOCOL:%s",sProtocol); printf("\n\r\n"); } @@ -360,7 +365,7 @@ if (sURL[strlen(sURL)-1]=='/') { sURL[strlen(sURL)-1]=sURL[strlen(sURL)]; //delete last symbol if (EnDebugMSG) - printf("\n delete last:%s",sURL); + printf("\r\n delete last:%s",sURL); } gdi= get_dirInfo(sURL); gfi= get_fileInfo(sURL); @@ -369,7 +374,7 @@ return send_directory(sURL); } if (EnDebugMSG) - printf("\n404-br File not found or...(Fresult is:%d)",gfi); + printf("\r\n404-br File not found or...(Fresult is:%d)",gfi); send_HTML_error( 404, "Not Found","404 - The requested resource could not be found."); return 404; } else { //==0 found @@ -381,7 +386,8 @@ } int main() -{ +{ + *(volatile uint32_t *)(0x41001014) = 0x0060100; //clock setting 48MHz uint8_t MAC_Addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02}; ledTick.attach(&ledTickfunc,0.5); //ledTick.detach(); @@ -412,15 +418,8 @@ //blocking mode(never timeout) if(svr.accept(client)<0) { printf("failed to accept connection.\n\r"); - } - else if (take_picture) { // take a picture function - printf("start taking a picture\r\n"); - - sync(); - test_jpeg_snapshot_picture(); - - take_picture = 0; - }else { + } + else { //client.set_blocking(false,5000); //5000=5sec printf("connection success!\n\rIP: %s\n\r",client.get_address()); clientIsConnected = true; @@ -451,10 +450,19 @@ }//while printf("close connection.\n\rHTTP server is listening...\n\r\n"); client.close(); - wait(0.05); - + wait(0.05); + + // take a picture function + if (take_picture) { + + sync(); + test_jpeg_snapshot_picture(); + + take_picture = 0; + } led2 = false; } } } +