Servidor Web utilizando wiznet, kl46z y RTOS
Dependencies: WIZnet_Library_1 mbed-rtos
main.cpp@0:c93eebd4d050, 2014-07-01 (annotated)
- Committer:
- Ademir501
- Date:
- Tue Jul 01 17:55:44 2014 +0000
- Revision:
- 0:c93eebd4d050
wiznet.h
Who changed what in which revision?
User | Revision | Line number | New 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 |