How to implement WIZ550io on FRDM-KL25Z. Refer to http://wizwiki.net/wiki/doku.php

Dependencies:   W5500Interface mbed

/media/uploads/bingdo/kl25z-wiz550io_image.jpg

Refer to http://www.youtube.com/watch?v=i77zoV5tnbE

Revision:
0:614e89b2211e
Child:
1:2d33dfc71ea6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 22 06:34:24 2014 +0000
@@ -0,0 +1,136 @@
+#include "mbed.h"
+//#include "EthernetInterface.h"
+#include "EthernetInterfaceW5500.h"
+#include <stdio.h>
+#include <string.h>
+
+#define PORT   80
+//#define PORT   888
+#define _DHCP
+
+// move to main().
+//EthernetInterface eth;
+
+// move to main().
+//TCPSocketServer svr;
+bool serverIsListened = false;
+
+// move to main().
+//TCPSocketConnection client;
+bool clientIsConnected = false;
+DigitalOut led1(LED1); //server listning status
+DigitalOut led2(LED2); //socket connecting status
+
+Ticker ledTick;
+
+void ledTickfunc()
+{
+    if(serverIsListened)  {
+        led1 = !led1;
+    } else {
+        led1 = false;
+    }
+}
+
+int main (void)
+{
+    SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
+    EthernetInterfaceW5500 eth(&spi, PTD0, PTA20);//, nRESET(PTA20); // reset pin is dummy, don't affect any pin of WIZ550io
+    spi.format(8,0); // 8bit, mode 0
+    spi.frequency(7000000); // 7MHz
+    wait(1); // 1 second for stable state
+
+    // late binding 
+    TCPSocketServer svr;
+    TCPSocketConnection client;
+
+    ledTick.attach(&ledTickfunc,0.5);
+
+    /*
+        //setup ethernet interface
+        eth.init(); //Use DHCP
+        eth.connect();
+        printf("IP Address is %s\n\r", eth.getIPAddress());
+    */
+
+#ifdef _DHCP 
+// didn't test yet in DHCP => TEST OK...
+
+    eth.init(); //Use DHCP
+    eth.connect();
+    //printf("IP Address is %s\n\r", eth.getIPAddress());
+    printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
+    printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
+           eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+
+#else
+    // as your env. change to real IP address and so on.
+    int ret = eth.init("222.98.173.212", "255.255.255.192", "222.98.173.254");
+    if (!ret) {
+        printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
+        printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
+               eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+    } else {
+        printf("Error eth.init() - ret = %d\n\r", ret);
+        return -1;
+    }
+#endif
+
+    //setup tcp socket
+    if(svr.bind(PORT)< 0) {
+        printf("tcp server bind failed.\n\r");
+        return -1;
+    } else {
+        printf("tcp server bind successed.\n\r");
+        serverIsListened = true;
+    }
+
+    if(svr.listen(1) < 0) {
+        printf("tcp server listen failed.\n\r");
+        return -1;
+    } else {
+        printf("tcp server is listening...\n\r");
+    }
+
+    //listening for http GET request
+    while (serverIsListened) {
+        //blocking mode(never timeout)
+        if(svr.accept(client)<0) {
+            printf("failed to accept connection.\n\r");
+        } else {
+            printf("connection success!\n\rIP: %s\n\r",client.get_address());
+            clientIsConnected = true;
+            led2 = true;
+
+            while(clientIsConnected) {
+                char buffer[1024] = {};
+                switch(client.receive(buffer, 1023)) {
+                    case 0:
+                        printf("recieved buffer is empty.\n\r");
+                        clientIsConnected = false;
+                        break;
+                    case -1:
+                        printf("failed to read data from client.\n\r");
+                        clientIsConnected = false;
+                        break;
+                    default:
+                        printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
+                        if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
+                            printf("GET request incomming.\n\r");
+                            //setup http response header & data
+                            char echoHeader[256] = {};
+                            sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
+                            client.send(echoHeader,strlen(echoHeader));
+                            client.send(buffer,strlen(buffer));
+                            clientIsConnected = false;
+                            printf("echo back done.\n\r");
+                        }
+                        break;
+                }
+            }
+            printf("close connection.\n\rtcp server is listening...\n\r");
+            client.close();
+            led2 = false;
+        }
+    }
+}