HTTP_SDCard_File_Server_WIZwiki-W7500 avec gestion des extensions MIME

Dependencies:   SDFileSystem WIZnetInterface mbed STATIC_COLORS

Fork of HTTP_SDCard_File_Server_WIZwiki-W7500 by WIZnet

WIZnet WIZwiki-W7500

/media/uploads/Fo170/wizwiki-w7500_usb_connected.jpg

/media/uploads/Fo170/wiznet_logo_110x37.png http://www.wiznet.co.kr/product-item/w7500/

Windows serial configuration https://developer.mbed.org/handbook/Windows-serial-configuration https://developer.mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe

How to write the firmware into WIZwiki-W7500 https://developer.mbed.org/teams/WIZnet/wiki/How-to-write-the-firmware-into-WIZwiki-W

Data Output using Serial Port https://blog.wiznettechnology.com/2015/08/14/wiznet-wizwiki-w7500-tutorial-exercise-2-data-output-using-serial-port/ http://wizwiki.net/wiki/doku.php?id=products:w7500:peripherals:uart

SDFileSystem Instanciation

SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); WIZwiki-W7500

/media/uploads/Fo170/wizwiki_w7500_spi_sch.png

Ethernet Initialization

eth.init () uses the eth.init (MAC) If you use DHCP instead, and when using a Static IP uses eth.init ((uint8_t *) MAC, IP, MASK, GATEWAY). This section uses a static IP.

  1. define MAC "\x\x\x\x\x\x" Should be Replaced with your MAC
  2. define IP "192.168.77.100" Should belong with your lan.
  3. define MASK "255.255.255.0"
  4. define GATEWAY "192.168.77.1"

eth.init((uint8_t*)MAC); Use DHCP for WIZnetInterface eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); IP,mask,Gateway

Also watch its pages, the initial contributor to the project For Import the example https://developer.mbed.org/teams/WIZnet/code/HTTP_SDCard_File_Server_WIZwiki-W7500/

Wiki on ARMmbed https://developer.mbed.org/teams/WIZnet/code/HTTP_SDCard_File_Server_WIZwiki-W7500/wiki/HTTP_SDCard_File_Server_WIZwiki-W7500

/media/uploads/Fo170/wp_20160508_008.jpg

WIZwiki_W7500 LED RGB :

/media/uploads/Fo170/wizwiki_w7500_led_rgb.png

LED1 = LED_RED = LEDR = PC_8

LED2 = LED_GREEN = LEDG = PC_9

LED3 = LED_BLUE = LEDB = PC_5

LED4 = LED_BLUE

Files at this revision

API Documentation at this revision

Comitter:
Fo170
Date:
Sun May 08 00:51:53 2016 +0000
Parent:
9:d0615c97295e
Child:
11:ee62fd965f0a
Commit message:
HTTP SD Card File Server WIZwiki-W7500 avec prise en charge des extensions MIME

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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/SDFileSystem.lib	Thu Jul 30 02:21:13 2015 +0000
+++ b/SDFileSystem.lib	Sun May 08 00:51:53 2016 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/SDFileSystem/#7b35d1709458
+http://mbed.org/users/azsymaivan/code/SDFileSystem/#f242d7bdef28
--- a/WIZnetInterface.lib	Thu Jul 30 02:21:13 2015 +0000
+++ b/WIZnetInterface.lib	Sun May 08 00:51:53 2016 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#c830d2e7e0f5
+http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#c91884bd2713
--- a/main.cpp	Thu Jul 30 02:21:13 2015 +0000
+++ b/main.cpp	Sun May 08 00:51:53 2016 +0000
@@ -6,9 +6,9 @@
 
 
 #define MAC     "\x00\x08\xDC\x11\x34\x78"
-#define IP      "192.168.77.100"
+#define IP      "192.168.0.170"
 #define MASK    "255.255.255.0"
-#define GATEWAY "192.168.77.1"
+#define GATEWAY "192.168.0.254"
 
 #define HTTPD_SERVER_PORT   80
 #define HTTPD_MAX_REQ_LENGTH   1023
@@ -43,35 +43,50 @@
 
 Ticker ledTick;
 
+//char str[] = "This is a sample string";
+char *pch;
+char ext[5];
+char ext_gif[] = "gif";
+char ext_jpg[] = "jpg";
+char ext_png[] = "png";
+int pos_ext;
+int extLen;
+
 void ledTickfunc()
 {
     led1 = !led1;
 }
 
-
-
 void get_file(char* uri)
 {
+    int i, ext_j;
+    
     uart.printf("get_file %s\n", uri);
     char *lstchr = strrchr(uri, NULL) -1;
-    if ('/' == *lstchr) {
+    if('/' == *lstchr) 
+    {
         uart.printf("Open directory /sd%s\n", uri);
         *lstchr = 0;
         sprintf(fileName, "/sd%s", uri);
         DIR *d = opendir(fileName);
-        if (d != NULL) {
+        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) {
+            while((p = readdir(d)) != NULL)
+            {
                 sprintf(dirName, "%s/%s", fileName, p->d_name);
                 uart.printf("%s\n", dirName);
                 DIR *subDir = opendir(dirName);
-                if (subDir != NULL) {
+                if(subDir != NULL) 
+                {
                     sprintf(httpHeader,"<li><a href=\"./%s/\">%s/</a></li>", p->d_name, p->d_name);
-                } else {
+                } 
+                else 
+                {
                     sprintf(httpHeader,"<li><a href=\"./%s\">%s</a></li>", p->d_name, p->d_name);
                 }
                 client.send(httpHeader,strlen(httpHeader));
@@ -81,20 +96,73 @@
         uart.printf("Directory closed\n");
         sprintf(httpHeader,"</ul></body></html>");
         client.send(httpHeader,strlen(httpHeader));
-    } else {
+    } 
+    else 
+    {
         sprintf(fileName, "/sd%s", uri);
         fp = fopen(fileName, "r");
-        if (fp == NULL) {
+        if(fp == NULL)
+        {
             uart.printf("File not found\n");
             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 {
-            uart.printf("Sending: header");
-            sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n");
+        } 
+        else 
+        {
+         pch = strrchr(fileName,'.');
+         
+         if( pch != NULL)
+         {
+          pos_ext = pch - fileName + 1;
+          extLen = strlen(fileName) - pos_ext;
+         
+          uart.printf("Last occurence of '.' found at %d , extLen : %d\n", pos_ext, extLen );
+        
+          for(i=0; i<extLen; i=i+1)
+          {
+           ext[i] = fileName[i+pos_ext];   
+          }
+         
+          ext[extLen] = '\0';
+         
+            uart.printf("Sending: header # %s\n", fileName);
+            uart.printf("extension %s\n", ext);
+            
+            if( strcmp(ext, ext_gif) == 0 ) ext_j = 1;
+            
+            if( strcmp(ext, ext_jpg) == 0 ) ext_j = 2;
+            
+            if( strcmp(ext, ext_png) == 0 ) ext_j = 3;         
+          }
+          else
+          {
+             uart.printf("Sending: header # %s\n", fileName);
+             ext_j = 0;
+          }
+            
+            switch(ext_j)
+            {
+             case 1: // HTTP reply with GIF image mime type
+             sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: image/gif\r\nConnection: Close\r\n\r\n"); 
+             break;
+             
+             case 2: // HTTP reply with JPG image mime type
+             sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: image/jpg\r\nConnection: Close\r\n\r\n");
+             break;
+             
+             case 3: // HTTP reply with PNG image mime type
+             sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: image/jpg\r\nConnection: Close\r\n\r\n");
+             break;
+             
+             default: // HTTP reply with HTML mime type
+             sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n");        
+            }
+                
             client.send(httpHeader,strlen(httpHeader));
             uart.printf(" file");
-            while ((rdCnt = fread(buffer, sizeof( char ), 1024, fp)) == 1024) {
+            while((rdCnt = fread(buffer, sizeof( char ), 1024, fp)) == 1024)
+            {
                 client.send(buffer, rdCnt);
                 uart.printf(".");
             }
@@ -109,7 +177,7 @@
 {
     ledTick.attach(&ledTickfunc,0.5);
 //    Serial Interface eth;
-    uart.baud(115200);
+    uart.baud(9600);
     uart.printf("Initializing\n");
 
 //    Check File System
--- a/mbed.bld	Thu Jul 30 02:21:13 2015 +0000
+++ b/mbed.bld	Sun May 08 00:51:53 2016 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/165afa46840b
\ No newline at end of file