Webserver W5500Interface for WIZ550io Ref. RTOS WebServer "Team IPN ESIME ZACATENCO"

Dependencies:   W5500Interface mbed-rtos mbed

Committer:
embeddist
Date:
Thu Jan 22 07:54:18 2015 +0000
Revision:
0:d6921de16a69
RTOS_WebServer for W5500Interface

Who changed what in which revision?

UserRevisionLine numberNew 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