Servidor Web utilizando wiznet, kl46z y RTOS

Dependencies:   WIZnet_Library_1 mbed-rtos

Committer:
Ademir501
Date:
Tue Jul 01 17:55:44 2014 +0000
Revision:
0:c93eebd4d050
wiznet.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ademir501 0:c93eebd4d050 1 #include "mbed.h"
Ademir501 0:c93eebd4d050 2 #include "rtos.h"
Ademir501 0:c93eebd4d050 3 #include "WIZnetInterface.h"
Ademir501 0:c93eebd4d050 4 #define INIT 0x1
Ademir501 0:c93eebd4d050 5 #define SOCKET 0x2
Ademir501 0:c93eebd4d050 6 #define CLIENTE 0x4
Ademir501 0:c93eebd4d050 7 #define WEB 0x8
Ademir501 0:c93eebd4d050 8
Ademir501 0:c93eebd4d050 9 SPI spi(PTD7, PTD6, PTD5); // mosi, miso, sclk
Ademir501 0:c93eebd4d050 10 WIZnetInterface eth(&spi, PTD4, PTA20); // spi, cs, reset
Ademir501 0:c93eebd4d050 11 Serial pc(PTA2,PTA1);
Ademir501 0:c93eebd4d050 12 TCPSocketServer server;
Ademir501 0:c93eebd4d050 13 TCPSocketConnection client;
Ademir501 0:c93eebd4d050 14
Ademir501 0:c93eebd4d050 15 int aceptado=1;
Ademir501 0:c93eebd4d050 16 int ret;
Ademir501 0:c93eebd4d050 17 int control;
Ademir501 0:c93eebd4d050 18 int dummy;
Ademir501 0:c93eebd4d050 19 int ready;
Ademir501 0:c93eebd4d050 20 char paq_en[64];
Ademir501 0:c93eebd4d050 21 char a[]={"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"};
Ademir501 0:c93eebd4d050 22 char b[]={"<html>\r\n<body>\r\n"};
Ademir501 0:c93eebd4d050 23 char c[]={"<title>FRDM KL46Z</title>\r\n"};
Ademir501 0:c93eebd4d050 24 char d[]={"<h2>Pagina Web usando Wiznet </h2>\r\n"};
Ademir501 0:c93eebd4d050 25 char e[]={"<br /><hr>\r\n"};
Ademir501 0:c93eebd4d050 26 char f[]={"<FONT FACE=\"Arial\" SIZE=\"2\" COLOR=\"FF0000\">"};
Ademir501 0:c93eebd4d050 27
Ademir501 0:c93eebd4d050 28 const char * IP_Addr = "169.254.175.210";
Ademir501 0:c93eebd4d050 29 const char * IP_Subnet = "255.255.255.0";
Ademir501 0:c93eebd4d050 30 const char * IP_Gateway = "169.254.175.209";
Ademir501 0:c93eebd4d050 31
Ademir501 0:c93eebd4d050 32
Ademir501 0:c93eebd4d050 33 void f_ethernet_init(void);
Ademir501 0:c93eebd4d050 34
Ademir501 0:c93eebd4d050 35
Ademir501 0:c93eebd4d050 36
Ademir501 0:c93eebd4d050 37 //TASK INICIALIZAR ETHERNET//////////////////////////////////////
Ademir501 0:c93eebd4d050 38 void TASK_InitEthernet(void const *argument)
Ademir501 0:c93eebd4d050 39 {
Ademir501 0:c93eebd4d050 40 while(true)
Ademir501 0:c93eebd4d050 41 {
Ademir501 0:c93eebd4d050 42 Thread::signal_wait(INIT);
Ademir501 0:c93eebd4d050 43 f_ethernet_init();
Ademir501 0:c93eebd4d050 44 control=SOCKET;
Ademir501 0:c93eebd4d050 45 }
Ademir501 0:c93eebd4d050 46 }
Ademir501 0:c93eebd4d050 47 /////////////////////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 48
Ademir501 0:c93eebd4d050 49 //TASK SOCKET////////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 50 void TASK_Socket(void const *argument)
Ademir501 0:c93eebd4d050 51 {
Ademir501 0:c93eebd4d050 52 while(true)
Ademir501 0:c93eebd4d050 53 {
Ademir501 0:c93eebd4d050 54 Thread::signal_wait(SOCKET);
Ademir501 0:c93eebd4d050 55 control=0;
Ademir501 0:c93eebd4d050 56 //TCPSocketServer server; //crea servidor
Ademir501 0:c93eebd4d050 57 server.bind(80); //Puerto
Ademir501 0:c93eebd4d050 58 server.listen(); //Escucha por clientes
Ademir501 0:c93eebd4d050 59 pc.printf("\nEsperando conexion con cliente...\n");
Ademir501 0:c93eebd4d050 60 // TCPSocketConnection client; //Realiza la conexion con clientes
Ademir501 0:c93eebd4d050 61 aceptado=server.accept(client);
Ademir501 0:c93eebd4d050 62 if(!aceptado)
Ademir501 0:c93eebd4d050 63 {
Ademir501 0:c93eebd4d050 64 control=CLIENTE;
Ademir501 0:c93eebd4d050 65 pc.printf("Conectado");
Ademir501 0:c93eebd4d050 66 }
Ademir501 0:c93eebd4d050 67 else
Ademir501 0:c93eebd4d050 68 pc.printf("Fallo la conexion con cliente");
Ademir501 0:c93eebd4d050 69 }
Ademir501 0:c93eebd4d050 70 }
Ademir501 0:c93eebd4d050 71 ////////////////////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 72
Ademir501 0:c93eebd4d050 73 ///TASK_CLIENTE/////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 74 void TASK_Cliente(void const *argument)
Ademir501 0:c93eebd4d050 75 {
Ademir501 0:c93eebd4d050 76 Thread::signal_wait(CLIENTE);
Ademir501 0:c93eebd4d050 77 control=0;
Ademir501 0:c93eebd4d050 78 client.send(a,sizeof(a));
Ademir501 0:c93eebd4d050 79 client.send(b,sizeof(b));
Ademir501 0:c93eebd4d050 80 client.send(c,sizeof(c));
Ademir501 0:c93eebd4d050 81 client.send(d,sizeof(d));
Ademir501 0:c93eebd4d050 82 client.send(e,sizeof(e));
Ademir501 0:c93eebd4d050 83 client.send(f,sizeof(f));
Ademir501 0:c93eebd4d050 84 ready=1;
Ademir501 0:c93eebd4d050 85 }
Ademir501 0:c93eebd4d050 86 /////////////////////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 87
Ademir501 0:c93eebd4d050 88
Ademir501 0:c93eebd4d050 89 ///TASK_WEB//////////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 90 void TASK_Web(void const *argument)
Ademir501 0:c93eebd4d050 91 {
Ademir501 0:c93eebd4d050 92 while(true)
Ademir501 0:c93eebd4d050 93 {
Ademir501 0:c93eebd4d050 94 Thread::signal_wait(WEB);
Ademir501 0:c93eebd4d050 95 control=0;
Ademir501 0:c93eebd4d050 96 client.send(paq_en,sizeof(paq_en));
Ademir501 0:c93eebd4d050 97 }
Ademir501 0:c93eebd4d050 98 }
Ademir501 0:c93eebd4d050 99 /////////////////////////////////////////////////////////////////
Ademir501 0:c93eebd4d050 100
Ademir501 0:c93eebd4d050 101 int main()
Ademir501 0:c93eebd4d050 102 {
Ademir501 0:c93eebd4d050 103 Thread thread1(TASK_InitEthernet);
Ademir501 0:c93eebd4d050 104 Thread thread2(TASK_Socket);
Ademir501 0:c93eebd4d050 105 Thread thread3(TASK_Cliente);
Ademir501 0:c93eebd4d050 106 Thread thread4(TASK_Web);
Ademir501 0:c93eebd4d050 107
Ademir501 0:c93eebd4d050 108 thread1.signal_set(INIT);
Ademir501 0:c93eebd4d050 109
Ademir501 0:c93eebd4d050 110 while(1)
Ademir501 0:c93eebd4d050 111 {
Ademir501 0:c93eebd4d050 112 if(control==SOCKET)
Ademir501 0:c93eebd4d050 113 thread2.signal_set(SOCKET);
Ademir501 0:c93eebd4d050 114 wait(0.5);
Ademir501 0:c93eebd4d050 115 if(control==CLIENTE)
Ademir501 0:c93eebd4d050 116 thread3.signal_set(CLIENTE);
Ademir501 0:c93eebd4d050 117
Ademir501 0:c93eebd4d050 118 while(ready&&client.is_connected())
Ademir501 0:c93eebd4d050 119 {
Ademir501 0:c93eebd4d050 120 wait(1);
Ademir501 0:c93eebd4d050 121 dummy++;
Ademir501 0:c93eebd4d050 122 sprintf(paq_en,"<FONT><BR>Valor=%d</FONT>",dummy);
Ademir501 0:c93eebd4d050 123 thread4.signal_set(WEB);
Ademir501 0:c93eebd4d050 124 }
Ademir501 0:c93eebd4d050 125
Ademir501 0:c93eebd4d050 126 }
Ademir501 0:c93eebd4d050 127
Ademir501 0:c93eebd4d050 128 }
Ademir501 0:c93eebd4d050 129
Ademir501 0:c93eebd4d050 130
Ademir501 0:c93eebd4d050 131
Ademir501 0:c93eebd4d050 132 void f_ethernet_init()
Ademir501 0:c93eebd4d050 133 {
Ademir501 0:c93eebd4d050 134 uint8_t mac[]={0x00,0x08,0xDC,0x1C,0xAA,0xCA};
Ademir501 0:c93eebd4d050 135 // mbed_mac_address((char *)mac);
Ademir501 0:c93eebd4d050 136 pc.printf("\tIniciando Servidor Ethernet...\n\r");
Ademir501 0:c93eebd4d050 137 wait(1);
Ademir501 0:c93eebd4d050 138 ret = eth.init(mac, IP_Addr, IP_Subnet, IP_Gateway);
Ademir501 0:c93eebd4d050 139 if(!ret)
Ademir501 0:c93eebd4d050 140 {
Ademir501 0:c93eebd4d050 141 pc.printf("Inicializado, MAC= %s\n\r",eth.getMACAddress());
Ademir501 0:c93eebd4d050 142 }
Ademir501 0:c93eebd4d050 143 else
Ademir501 0:c93eebd4d050 144 {
Ademir501 0:c93eebd4d050 145 pc.printf("Fallo comunicacion... Reinicie dispositivos...\n\r");
Ademir501 0:c93eebd4d050 146 }
Ademir501 0:c93eebd4d050 147 pc.printf("Conectando.");
Ademir501 0:c93eebd4d050 148 wait(2);
Ademir501 0:c93eebd4d050 149 pc.printf(".");
Ademir501 0:c93eebd4d050 150 wait(2);
Ademir501 0:c93eebd4d050 151 pc.printf(".\n\r");
Ademir501 0:c93eebd4d050 152 wait(1);
Ademir501 0:c93eebd4d050 153 ret = eth.connect();
Ademir501 0:c93eebd4d050 154 if(!ret)
Ademir501 0:c93eebd4d050 155 {
Ademir501 0:c93eebd4d050 156 pc.printf("Conexion Establecida!\n\n\r");
Ademir501 0:c93eebd4d050 157 wait(1);
Ademir501 0:c93eebd4d050 158 pc.printf("IP=%s\n\rMASK=%s\n\rGW=%s\n\r",eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
Ademir501 0:c93eebd4d050 159 }
Ademir501 0:c93eebd4d050 160 else
Ademir501 0:c93eebd4d050 161 {
Ademir501 0:c93eebd4d050 162 pc.printf("Fallo conexion... Reinicie dispositivos...\n\r");
Ademir501 0:c93eebd4d050 163 }
Ademir501 0:c93eebd4d050 164 }
Ademir501 0:c93eebd4d050 165