How to implement WIZ550io on FRDM-KL25Z. Refer to http://wizwiki.net/wiki/doku.php
Dependencies: W5500Interface mbed
Refer to http://www.youtube.com/watch?v=i77zoV5tnbE
main.cpp@2:11f7f413e10d, 2014-10-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |