Webserver W5500Interface for WIZ550io Ref. RTOS WebServer "Team IPN ESIME ZACATENCO"
Dependencies: W5500Interface mbed-rtos mbed
main.cpp@0:d6921de16a69, 2015-01-22 (annotated)
- Committer:
- embeddist
- Date:
- Thu Jan 22 07:54:18 2015 +0000
- Revision:
- 0:d6921de16a69
RTOS_WebServer for W5500Interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
embeddist | 0:d6921de16a69 | 1 | #include <stdio.h> |
embeddist | 0:d6921de16a69 | 2 | #include <string.h> |
embeddist | 0:d6921de16a69 | 3 | #include "mbed.h" |
embeddist | 0:d6921de16a69 | 4 | #include "rtos.h" |
embeddist | 0:d6921de16a69 | 5 | #include "EthernetInterface.h" |
embeddist | 0:d6921de16a69 | 6 | #define INIT 0x1 |
embeddist | 0:d6921de16a69 | 7 | #define SOCKET 0x2 |
embeddist | 0:d6921de16a69 | 8 | #define CLIENTE 0x4 |
embeddist | 0:d6921de16a69 | 9 | #define WEB 0x8 |
embeddist | 0:d6921de16a69 | 10 | |
embeddist | 0:d6921de16a69 | 11 | |
embeddist | 0:d6921de16a69 | 12 | #if defined(TARGET_LPC1768) |
embeddist | 0:d6921de16a69 | 13 | SPI spi(p5, p6, p7); // mosi, miso, sclk |
embeddist | 0:d6921de16a69 | 14 | EthernetInterface eth(&spi, p8, p11); // spi, cs, reset |
embeddist | 0:d6921de16a69 | 15 | #endif |
embeddist | 0:d6921de16a69 | 16 | Serial pc(USBTX , USBRX); |
embeddist | 0:d6921de16a69 | 17 | TCPSocketServer server; |
embeddist | 0:d6921de16a69 | 18 | TCPSocketConnection client; |
embeddist | 0:d6921de16a69 | 19 | |
embeddist | 0:d6921de16a69 | 20 | int aceptado=1; |
embeddist | 0:d6921de16a69 | 21 | int ret; |
embeddist | 0:d6921de16a69 | 22 | char control; |
embeddist | 0:d6921de16a69 | 23 | char dummy; |
embeddist | 0:d6921de16a69 | 24 | int ready; |
embeddist | 0:d6921de16a69 | 25 | char paq_en[64]; |
embeddist | 0:d6921de16a69 | 26 | char a[]={"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"}; |
embeddist | 0:d6921de16a69 | 27 | char b[]={"<html>\r\n<body>\r\n"}; |
embeddist | 0:d6921de16a69 | 28 | char c[]={"<title>WebServer WIZ550io</title>\r\n"}; |
embeddist | 0:d6921de16a69 | 29 | char d[]={"<h2>RTOS Webserver with WIZ550io </h2>\r\n"}; |
embeddist | 0:d6921de16a69 | 30 | char e[]={"<br /><hr>\r\n"}; |
embeddist | 0:d6921de16a69 | 31 | char f[]={"<FONT FACE=\"Arial\" SIZE=\"2\" COLOR=\"FF0000\">"}; |
embeddist | 0:d6921de16a69 | 32 | char g[]={"</html>"}; |
embeddist | 0:d6921de16a69 | 33 | |
embeddist | 0:d6921de16a69 | 34 | const char * IP_Addr = "192.168.77.34"; |
embeddist | 0:d6921de16a69 | 35 | const char * IP_Subnet = "255.255.255.0"; |
embeddist | 0:d6921de16a69 | 36 | const char * IP_Gateway = "192.168.77.1"; |
embeddist | 0:d6921de16a69 | 37 | |
embeddist | 0:d6921de16a69 | 38 | |
embeddist | 0:d6921de16a69 | 39 | void f_ethernet_init(void); |
embeddist | 0:d6921de16a69 | 40 | |
embeddist | 0:d6921de16a69 | 41 | |
embeddist | 0:d6921de16a69 | 42 | |
embeddist | 0:d6921de16a69 | 43 | //TASK INICIALIZAR ETHERNET////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 44 | void TASK_InitEthernet(void const *argument) |
embeddist | 0:d6921de16a69 | 45 | { |
embeddist | 0:d6921de16a69 | 46 | while(true) |
embeddist | 0:d6921de16a69 | 47 | { |
embeddist | 0:d6921de16a69 | 48 | //pc.printf("TASK_InitEthernet\n"); |
embeddist | 0:d6921de16a69 | 49 | Thread::signal_wait(INIT); |
embeddist | 0:d6921de16a69 | 50 | f_ethernet_init(); |
embeddist | 0:d6921de16a69 | 51 | control=SOCKET; |
embeddist | 0:d6921de16a69 | 52 | } |
embeddist | 0:d6921de16a69 | 53 | } |
embeddist | 0:d6921de16a69 | 54 | ///////////////////////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 55 | |
embeddist | 0:d6921de16a69 | 56 | //TASK SOCKET//////////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 57 | void TASK_Socket(void const *argument) |
embeddist | 0:d6921de16a69 | 58 | { |
embeddist | 0:d6921de16a69 | 59 | while(true) |
embeddist | 0:d6921de16a69 | 60 | { |
embeddist | 0:d6921de16a69 | 61 | //pc.printf("TASK_Socket\n"); |
embeddist | 0:d6921de16a69 | 62 | Thread::signal_wait(SOCKET); |
embeddist | 0:d6921de16a69 | 63 | control=0; |
embeddist | 0:d6921de16a69 | 64 | //TCPSocketServer server; //crea servidor |
embeddist | 0:d6921de16a69 | 65 | server.bind(80); //Puerto |
embeddist | 0:d6921de16a69 | 66 | server.listen(); //Escucha por clientes |
embeddist | 0:d6921de16a69 | 67 | //pc.printf("\nEsperando conexion con cliente...\n"); |
embeddist | 0:d6921de16a69 | 68 | //pc.printf("\nWaiting for connection to client...\n"); |
embeddist | 0:d6921de16a69 | 69 | |
embeddist | 0:d6921de16a69 | 70 | //TCPSocketConnection client; //Realiza la conexion con clientes |
embeddist | 0:d6921de16a69 | 71 | aceptado=server.accept(client); |
embeddist | 0:d6921de16a69 | 72 | client.set_blocking(false, 1500); //timeout after (1.5)s |
embeddist | 0:d6921de16a69 | 73 | //pc.printf("Connection from: %s\n", client.get_address()); |
embeddist | 0:d6921de16a69 | 74 | |
embeddist | 0:d6921de16a69 | 75 | if(!aceptado) |
embeddist | 0:d6921de16a69 | 76 | { |
embeddist | 0:d6921de16a69 | 77 | //pc.printf("Conectado"); |
embeddist | 0:d6921de16a69 | 78 | //pc.printf("Connecting"); |
embeddist | 0:d6921de16a69 | 79 | control=CLIENTE; |
embeddist | 0:d6921de16a69 | 80 | } |
embeddist | 0:d6921de16a69 | 81 | else |
embeddist | 0:d6921de16a69 | 82 | { |
embeddist | 0:d6921de16a69 | 83 | //pc.printf("Fallo la conexion con cliente"); |
embeddist | 0:d6921de16a69 | 84 | //pc.printf("Fail the connection with client"); |
embeddist | 0:d6921de16a69 | 85 | control=SOCKET; |
embeddist | 0:d6921de16a69 | 86 | } |
embeddist | 0:d6921de16a69 | 87 | } |
embeddist | 0:d6921de16a69 | 88 | } |
embeddist | 0:d6921de16a69 | 89 | |
embeddist | 0:d6921de16a69 | 90 | //////////////////////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 91 | |
embeddist | 0:d6921de16a69 | 92 | ///TASK_CLIENTE///////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 93 | void TASK_Cliente(void const *argument) |
embeddist | 0:d6921de16a69 | 94 | { |
embeddist | 0:d6921de16a69 | 95 | while(true) |
embeddist | 0:d6921de16a69 | 96 | { |
embeddist | 0:d6921de16a69 | 97 | //pc.printf("TASK_Cliente\n"); |
embeddist | 0:d6921de16a69 | 98 | Thread::signal_wait(CLIENTE); |
embeddist | 0:d6921de16a69 | 99 | client.send(a,sizeof(a)); |
embeddist | 0:d6921de16a69 | 100 | client.send(b,sizeof(b)); |
embeddist | 0:d6921de16a69 | 101 | client.send(c,sizeof(c)); |
embeddist | 0:d6921de16a69 | 102 | client.send(d,sizeof(d)); |
embeddist | 0:d6921de16a69 | 103 | client.send(e,sizeof(e)); |
embeddist | 0:d6921de16a69 | 104 | client.send(f,sizeof(f)); |
embeddist | 0:d6921de16a69 | 105 | control=WEB; |
embeddist | 0:d6921de16a69 | 106 | ready=1; |
embeddist | 0:d6921de16a69 | 107 | } |
embeddist | 0:d6921de16a69 | 108 | } |
embeddist | 0:d6921de16a69 | 109 | ///////////////////////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 110 | |
embeddist | 0:d6921de16a69 | 111 | |
embeddist | 0:d6921de16a69 | 112 | ///TASK_WEB////////////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 113 | void TASK_Web(void const *argument) |
embeddist | 0:d6921de16a69 | 114 | { |
embeddist | 0:d6921de16a69 | 115 | while(true) |
embeddist | 0:d6921de16a69 | 116 | { |
embeddist | 0:d6921de16a69 | 117 | //pc.printf("TASK_Web\n"); |
embeddist | 0:d6921de16a69 | 118 | Thread::signal_wait(WEB); |
embeddist | 0:d6921de16a69 | 119 | client.send(paq_en,sizeof(paq_en)); |
embeddist | 0:d6921de16a69 | 120 | client.send(g,sizeof(g)); |
embeddist | 0:d6921de16a69 | 121 | control=SOCKET; |
embeddist | 0:d6921de16a69 | 122 | client.close(); |
embeddist | 0:d6921de16a69 | 123 | } |
embeddist | 0:d6921de16a69 | 124 | } |
embeddist | 0:d6921de16a69 | 125 | ///////////////////////////////////////////////////////////////// |
embeddist | 0:d6921de16a69 | 126 | |
embeddist | 0:d6921de16a69 | 127 | int main() |
embeddist | 0:d6921de16a69 | 128 | { |
embeddist | 0:d6921de16a69 | 129 | #if defined(TARGET_LPC1768) |
embeddist | 0:d6921de16a69 | 130 | spi.frequency(12500000); |
embeddist | 0:d6921de16a69 | 131 | #endif |
embeddist | 0:d6921de16a69 | 132 | Thread thread1(TASK_InitEthernet); |
embeddist | 0:d6921de16a69 | 133 | Thread thread2(TASK_Socket); |
embeddist | 0:d6921de16a69 | 134 | Thread thread3(TASK_Cliente); |
embeddist | 0:d6921de16a69 | 135 | Thread thread4(TASK_Web); |
embeddist | 0:d6921de16a69 | 136 | |
embeddist | 0:d6921de16a69 | 137 | thread1.signal_set(INIT); |
embeddist | 0:d6921de16a69 | 138 | |
embeddist | 0:d6921de16a69 | 139 | while(1) |
embeddist | 0:d6921de16a69 | 140 | { |
embeddist | 0:d6921de16a69 | 141 | if(control==SOCKET) |
embeddist | 0:d6921de16a69 | 142 | thread2.signal_set(SOCKET); |
embeddist | 0:d6921de16a69 | 143 | wait(0.5); |
embeddist | 0:d6921de16a69 | 144 | |
embeddist | 0:d6921de16a69 | 145 | if(control==CLIENTE) |
embeddist | 0:d6921de16a69 | 146 | { |
embeddist | 0:d6921de16a69 | 147 | thread3.signal_set(CLIENTE); |
embeddist | 0:d6921de16a69 | 148 | } |
embeddist | 0:d6921de16a69 | 149 | |
embeddist | 0:d6921de16a69 | 150 | if(control==WEB) |
embeddist | 0:d6921de16a69 | 151 | { |
embeddist | 0:d6921de16a69 | 152 | dummy++; |
embeddist | 0:d6921de16a69 | 153 | sprintf(paq_en,"<FONT><BR>Valor=%d</FONT>",dummy); |
embeddist | 0:d6921de16a69 | 154 | thread4.signal_set(WEB); |
embeddist | 0:d6921de16a69 | 155 | if(dummy == 64) |
embeddist | 0:d6921de16a69 | 156 | dummy =0; |
embeddist | 0:d6921de16a69 | 157 | } |
embeddist | 0:d6921de16a69 | 158 | } |
embeddist | 0:d6921de16a69 | 159 | |
embeddist | 0:d6921de16a69 | 160 | } |
embeddist | 0:d6921de16a69 | 161 | |
embeddist | 0:d6921de16a69 | 162 | |
embeddist | 0:d6921de16a69 | 163 | |
embeddist | 0:d6921de16a69 | 164 | void f_ethernet_init() |
embeddist | 0:d6921de16a69 | 165 | { |
embeddist | 0:d6921de16a69 | 166 | uint8_t mac[]={0x00,0x08,0xDC,0x1C,0xAA,0xCA}; |
embeddist | 0:d6921de16a69 | 167 | // mbed_mac_address((char *)mac); |
embeddist | 0:d6921de16a69 | 168 | //pc.printf("\tIniciando Servidor Ethernet...\n\r"); |
embeddist | 0:d6921de16a69 | 169 | pc.printf("\tInitialize Server Ethernet...\n\r"); |
embeddist | 0:d6921de16a69 | 170 | wait(1); |
embeddist | 0:d6921de16a69 | 171 | ret = eth.init(mac, IP_Addr, IP_Subnet, IP_Gateway); |
embeddist | 0:d6921de16a69 | 172 | if(!ret) |
embeddist | 0:d6921de16a69 | 173 | { |
embeddist | 0:d6921de16a69 | 174 | //pc.printf("Inicializado, MAC= %s\n\r",eth.getMACAddress()); |
embeddist | 0:d6921de16a69 | 175 | pc.printf("Initialized, MAC= %s\n\r",eth.getMACAddress()); |
embeddist | 0:d6921de16a69 | 176 | } |
embeddist | 0:d6921de16a69 | 177 | else |
embeddist | 0:d6921de16a69 | 178 | { |
embeddist | 0:d6921de16a69 | 179 | //pc.printf("Fallo comunicacion... Reinicie dispositivos...\n\r"); |
embeddist | 0:d6921de16a69 | 180 | pc.printf("Failure Communication ... Restart devices ...\n\r"); |
embeddist | 0:d6921de16a69 | 181 | } |
embeddist | 0:d6921de16a69 | 182 | //pc.printf("Conectando."); |
embeddist | 0:d6921de16a69 | 183 | pc.printf("Connecting."); |
embeddist | 0:d6921de16a69 | 184 | wait(2); |
embeddist | 0:d6921de16a69 | 185 | pc.printf("."); |
embeddist | 0:d6921de16a69 | 186 | wait(2); |
embeddist | 0:d6921de16a69 | 187 | pc.printf(".\n\r"); |
embeddist | 0:d6921de16a69 | 188 | wait(1); |
embeddist | 0:d6921de16a69 | 189 | ret = eth.connect(); |
embeddist | 0:d6921de16a69 | 190 | if(!ret) |
embeddist | 0:d6921de16a69 | 191 | { |
embeddist | 0:d6921de16a69 | 192 | //pc.printf("Conexion Establecida!\n\n\r"); |
embeddist | 0:d6921de16a69 | 193 | pc.printf("Connection Established!\n\n\r"); |
embeddist | 0:d6921de16a69 | 194 | wait(1); |
embeddist | 0:d6921de16a69 | 195 | pc.printf("IP=%s\n\rMASK=%s\n\rGW=%s\n\r",eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); |
embeddist | 0:d6921de16a69 | 196 | } |
embeddist | 0:d6921de16a69 | 197 | else |
embeddist | 0:d6921de16a69 | 198 | { |
embeddist | 0:d6921de16a69 | 199 | //pc.printf("Fallo conexion... Reinicie dispositivos...\n\r"); |
embeddist | 0:d6921de16a69 | 200 | pc.printf("Failure Communication ... Restart devices ...\n\r"); |
embeddist | 0:d6921de16a69 | 201 | } |
embeddist | 0:d6921de16a69 | 202 | } |
embeddist | 0:d6921de16a69 | 203 |