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

Committer:
bingdo
Date:
Wed Oct 29 02:15:35 2014 +0000
Revision:
2:11f7f413e10d
Parent:
1:2d33dfc71ea6
Add NXP features.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bingdo 0:614e89b2211e 1 #include "mbed.h"
bingdo 1:2d33dfc71ea6 2 #include "EthernetInterface.h"
bingdo 1:2d33dfc71ea6 3 //#include "EthernetInterfaceW5500.h"
bingdo 0:614e89b2211e 4 #include <stdio.h>
bingdo 0:614e89b2211e 5 #include <string.h>
bingdo 0:614e89b2211e 6
bingdo 0:614e89b2211e 7 #define PORT 80
bingdo 0:614e89b2211e 8 //#define PORT 888
bingdo 0:614e89b2211e 9 #define _DHCP
bingdo 0:614e89b2211e 10
bingdo 0:614e89b2211e 11 // move to main().
bingdo 0:614e89b2211e 12 //EthernetInterface eth;
bingdo 0:614e89b2211e 13
bingdo 0:614e89b2211e 14 // move to main().
bingdo 0:614e89b2211e 15 //TCPSocketServer svr;
bingdo 0:614e89b2211e 16 bool serverIsListened = false;
bingdo 0:614e89b2211e 17
bingdo 0:614e89b2211e 18 // move to main().
bingdo 0:614e89b2211e 19 //TCPSocketConnection client;
bingdo 0:614e89b2211e 20 bool clientIsConnected = false;
bingdo 0:614e89b2211e 21 DigitalOut led1(LED1); //server listning status
bingdo 0:614e89b2211e 22 DigitalOut led2(LED2); //socket connecting status
bingdo 0:614e89b2211e 23
bingdo 0:614e89b2211e 24 Ticker ledTick;
bingdo 0:614e89b2211e 25
bingdo 0:614e89b2211e 26 void ledTickfunc()
bingdo 0:614e89b2211e 27 {
bingdo 0:614e89b2211e 28 if(serverIsListened) {
bingdo 0:614e89b2211e 29 led1 = !led1;
bingdo 0:614e89b2211e 30 } else {
bingdo 0:614e89b2211e 31 led1 = false;
bingdo 0:614e89b2211e 32 }
bingdo 0:614e89b2211e 33 }
bingdo 0:614e89b2211e 34
bingdo 0:614e89b2211e 35 int main (void)
bingdo 0:614e89b2211e 36 {
bingdo 2:11f7f413e10d 37 #if defined(TARGET_LPC1114)
bingdo 2:11f7f413e10d 38 SPI spi(dp2, dp1, dp6); // mosi, miso, sclk
bingdo 2:11f7f413e10d 39 EthernetInterface eth(&spi, dp25, dp26); // spi, cs, reset
bingdo 2:11f7f413e10d 40 wait(1); // 1 second for stable state
bingdo 2:11f7f413e10d 41 #elif defined(TARGET_LPC1768)
bingdo 2:11f7f413e10d 42 SPI spi(p11, p12, p13); // mosi, miso, sclk
bingdo 2:11f7f413e10d 43 EthernetInterface eth(&spi, p14, p15); // spi, cs, reset
bingdo 2:11f7f413e10d 44 wait(1); // 1 second for stable state
bingdo 2:11f7f413e10d 45 #elif defined(TARGET_LPC11U68)
bingdo 2:11f7f413e10d 46 SPI spi(P0_9, P0_8, P1_29); // mosi, miso, sclk
bingdo 2:11f7f413e10d 47 EthernetInterface eth(&spi, P0_2, P1_28);//, nRESET(p9); // reset pin is dummy, don't affect any pin of WIZ550io
bingdo 2:11f7f413e10d 48 spi.format(8,0); // 8bit, mode 0
bingdo 2:11f7f413e10d 49 spi.frequency(7000000); // 7MHz
bingdo 2:11f7f413e10d 50 wait(1); // 1 second for stable state
bingdo 2:11f7f413e10d 51 #elif defined(TARGET_KL25Z)
bingdo 0:614e89b2211e 52 SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
bingdo 1:2d33dfc71ea6 53 EthernetInterface eth(&spi, PTD0, PTA20);//, nRESET(PTA20); // reset pin is dummy, don't affect any pin of WIZ550io
bingdo 0:614e89b2211e 54 spi.format(8,0); // 8bit, mode 0
bingdo 0:614e89b2211e 55 wait(1); // 1 second for stable state
bingdo 2:11f7f413e10d 56 #endif
bingdo 0:614e89b2211e 57
bingdo 0:614e89b2211e 58 // late binding
bingdo 0:614e89b2211e 59 TCPSocketServer svr;
bingdo 0:614e89b2211e 60 TCPSocketConnection client;
bingdo 0:614e89b2211e 61
bingdo 0:614e89b2211e 62 ledTick.attach(&ledTickfunc,0.5);
bingdo 0:614e89b2211e 63
bingdo 0:614e89b2211e 64 /*
bingdo 0:614e89b2211e 65 //setup ethernet interface
bingdo 0:614e89b2211e 66 eth.init(); //Use DHCP
bingdo 0:614e89b2211e 67 eth.connect();
bingdo 0:614e89b2211e 68 printf("IP Address is %s\n\r", eth.getIPAddress());
bingdo 0:614e89b2211e 69 */
bingdo 0:614e89b2211e 70
bingdo 0:614e89b2211e 71 #ifdef _DHCP
bingdo 0:614e89b2211e 72 // didn't test yet in DHCP => TEST OK...
bingdo 0:614e89b2211e 73
bingdo 0:614e89b2211e 74 eth.init(); //Use DHCP
bingdo 0:614e89b2211e 75 eth.connect();
bingdo 0:614e89b2211e 76 //printf("IP Address is %s\n\r", eth.getIPAddress());
bingdo 0:614e89b2211e 77 printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
bingdo 0:614e89b2211e 78 printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
bingdo 0:614e89b2211e 79 eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
bingdo 0:614e89b2211e 80
bingdo 0:614e89b2211e 81 #else
bingdo 0:614e89b2211e 82 // as your env. change to real IP address and so on.
bingdo 0:614e89b2211e 83 int ret = eth.init("222.98.173.212", "255.255.255.192", "222.98.173.254");
bingdo 0:614e89b2211e 84 if (!ret) {
bingdo 0:614e89b2211e 85 printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
bingdo 0:614e89b2211e 86 printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
bingdo 0:614e89b2211e 87 eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
bingdo 0:614e89b2211e 88 } else {
bingdo 0:614e89b2211e 89 printf("Error eth.init() - ret = %d\n\r", ret);
bingdo 0:614e89b2211e 90 return -1;
bingdo 0:614e89b2211e 91 }
bingdo 0:614e89b2211e 92 #endif
bingdo 0:614e89b2211e 93
bingdo 0:614e89b2211e 94 //setup tcp socket
bingdo 0:614e89b2211e 95 if(svr.bind(PORT)< 0) {
bingdo 0:614e89b2211e 96 printf("tcp server bind failed.\n\r");
bingdo 0:614e89b2211e 97 return -1;
bingdo 0:614e89b2211e 98 } else {
bingdo 0:614e89b2211e 99 printf("tcp server bind successed.\n\r");
bingdo 0:614e89b2211e 100 serverIsListened = true;
bingdo 0:614e89b2211e 101 }
bingdo 0:614e89b2211e 102
bingdo 0:614e89b2211e 103 if(svr.listen(1) < 0) {
bingdo 0:614e89b2211e 104 printf("tcp server listen failed.\n\r");
bingdo 0:614e89b2211e 105 return -1;
bingdo 0:614e89b2211e 106 } else {
bingdo 0:614e89b2211e 107 printf("tcp server is listening...\n\r");
bingdo 0:614e89b2211e 108 }
bingdo 0:614e89b2211e 109
bingdo 0:614e89b2211e 110 //listening for http GET request
bingdo 0:614e89b2211e 111 while (serverIsListened) {
bingdo 0:614e89b2211e 112 //blocking mode(never timeout)
bingdo 0:614e89b2211e 113 if(svr.accept(client)<0) {
bingdo 0:614e89b2211e 114 printf("failed to accept connection.\n\r");
bingdo 0:614e89b2211e 115 } else {
bingdo 0:614e89b2211e 116 printf("connection success!\n\rIP: %s\n\r",client.get_address());
bingdo 0:614e89b2211e 117 clientIsConnected = true;
bingdo 0:614e89b2211e 118 led2 = true;
bingdo 0:614e89b2211e 119
bingdo 0:614e89b2211e 120 while(clientIsConnected) {
bingdo 0:614e89b2211e 121 char buffer[1024] = {};
bingdo 0:614e89b2211e 122 switch(client.receive(buffer, 1023)) {
bingdo 0:614e89b2211e 123 case 0:
bingdo 0:614e89b2211e 124 printf("recieved buffer is empty.\n\r");
bingdo 0:614e89b2211e 125 clientIsConnected = false;
bingdo 0:614e89b2211e 126 break;
bingdo 0:614e89b2211e 127 case -1:
bingdo 0:614e89b2211e 128 printf("failed to read data from client.\n\r");
bingdo 0:614e89b2211e 129 clientIsConnected = false;
bingdo 0:614e89b2211e 130 break;
bingdo 0:614e89b2211e 131 default:
bingdo 0:614e89b2211e 132 printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
bingdo 0:614e89b2211e 133 if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
bingdo 0:614e89b2211e 134 printf("GET request incomming.\n\r");
bingdo 0:614e89b2211e 135 //setup http response header & data
bingdo 0:614e89b2211e 136 char echoHeader[256] = {};
bingdo 0:614e89b2211e 137 sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
bingdo 0:614e89b2211e 138 client.send(echoHeader,strlen(echoHeader));
bingdo 0:614e89b2211e 139 client.send(buffer,strlen(buffer));
bingdo 0:614e89b2211e 140 clientIsConnected = false;
bingdo 0:614e89b2211e 141 printf("echo back done.\n\r");
bingdo 0:614e89b2211e 142 }
bingdo 0:614e89b2211e 143 break;
bingdo 0:614e89b2211e 144 }
bingdo 0:614e89b2211e 145 }
bingdo 0:614e89b2211e 146 printf("close connection.\n\rtcp server is listening...\n\r");
bingdo 0:614e89b2211e 147 client.close();
bingdo 0:614e89b2211e 148 led2 = false;
bingdo 0:614e89b2211e 149 }
bingdo 0:614e89b2211e 150 }
bingdo 0:614e89b2211e 151 }