serveur WEB sur carte SD pour TestBed , lit des tensions les met dans un fichier htm et l\'envoie . on peut agir sur les ES .

Dependencies:   mbed

Committer:
geiineuville
Date:
Mon Sep 05 14:36:10 2011 +0000
Revision:
0:83cf97c10b63
webserver v 0 v 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
geiineuville 0:83cf97c10b63 1 #include "lwip/opt.h"
geiineuville 0:83cf97c10b63 2 #include "lwip/stats.h"
geiineuville 0:83cf97c10b63 3 #include "lwip/sys.h"
geiineuville 0:83cf97c10b63 4 #include "lwip/pbuf.h"
geiineuville 0:83cf97c10b63 5 #include "lwip/udp.h"
geiineuville 0:83cf97c10b63 6 #include "lwip/tcp.h"
geiineuville 0:83cf97c10b63 7 #include "lwip/dns.h"
geiineuville 0:83cf97c10b63 8 #include "lwip/dhcp.h"
geiineuville 0:83cf97c10b63 9 #include "lwip/init.h"
geiineuville 0:83cf97c10b63 10 #include "lwip/netif.h"
geiineuville 0:83cf97c10b63 11 #include "netif/etharp.h"
geiineuville 0:83cf97c10b63 12 #include "netif/loopif.h"
geiineuville 0:83cf97c10b63 13 #include "device.h"
geiineuville 0:83cf97c10b63 14 #include "Ethernet.h"
geiineuville 0:83cf97c10b63 15
geiineuville 0:83cf97c10b63 16 #include "NetServer.h"
geiineuville 0:83cf97c10b63 17 #include "TCPListener.h"
geiineuville 0:83cf97c10b63 18 #include "TCPCallbackListener.h"
geiineuville 0:83cf97c10b63 19 #include "TCPConnection.h"
geiineuville 0:83cf97c10b63 20
geiineuville 0:83cf97c10b63 21 using namespace std;
geiineuville 0:83cf97c10b63 22 using namespace mbed;
geiineuville 0:83cf97c10b63 23
geiineuville 0:83cf97c10b63 24 NetServer *NetServer::singleton = NULL;
geiineuville 0:83cf97c10b63 25
geiineuville 0:83cf97c10b63 26 NetServer::NetServer() : netif(&netif_data), dhcp(true), hostname(HOSTNAME) {
geiineuville 0:83cf97c10b63 27 _time.start();
geiineuville 0:83cf97c10b63 28 IP4_ADDR(&netmask, 255,255,255,255);
geiineuville 0:83cf97c10b63 29 IP4_ADDR(&gateway, 0,0,0,0);
geiineuville 0:83cf97c10b63 30 IP4_ADDR(&ipaddr, 0,0,0,0);
geiineuville 0:83cf97c10b63 31 netif->hwaddr_len = 0;
geiineuville 0:83cf97c10b63 32 del = new list<TCPItem *>();
geiineuville 0:83cf97c10b63 33 }
geiineuville 0:83cf97c10b63 34
geiineuville 0:83cf97c10b63 35 NetServer::NetServer(struct ip_addr ip, struct ip_addr nm, struct ip_addr gw)
geiineuville 0:83cf97c10b63 36 : netif(&netif_data), ipaddr(ip), netmask(nm), gateway(gw), dhcp(false), hostname(HOSTNAME) {
geiineuville 0:83cf97c10b63 37 _time.start();
geiineuville 0:83cf97c10b63 38 netif->hwaddr_len = 0;
geiineuville 0:83cf97c10b63 39 del = new list<TCPItem *>();
geiineuville 0:83cf97c10b63 40 }
geiineuville 0:83cf97c10b63 41
geiineuville 0:83cf97c10b63 42 NetServer::~NetServer() {
geiineuville 0:83cf97c10b63 43
geiineuville 0:83cf97c10b63 44 }
geiineuville 0:83cf97c10b63 45
geiineuville 0:83cf97c10b63 46 void NetServer::_poll() const {
geiineuville 0:83cf97c10b63 47 while(!del->empty()) {
geiineuville 0:83cf97c10b63 48 TCPItem *item = del->front();
geiineuville 0:83cf97c10b63 49 del->pop_front();
geiineuville 0:83cf97c10b63 50 delete item;
geiineuville 0:83cf97c10b63 51 }
geiineuville 0:83cf97c10b63 52 device_poll();
geiineuville 0:83cf97c10b63 53 tcp_tmr();
geiineuville 0:83cf97c10b63 54 }
geiineuville 0:83cf97c10b63 55
geiineuville 0:83cf97c10b63 56 void NetServer::init() {
geiineuville 0:83cf97c10b63 57 lwip_init();
geiineuville 0:83cf97c10b63 58
geiineuville 0:83cf97c10b63 59 netif->hwaddr_len = ETHARP_HWADDR_LEN;
geiineuville 0:83cf97c10b63 60 device_address((char *)netif->hwaddr);
geiineuville 0:83cf97c10b63 61
geiineuville 0:83cf97c10b63 62 netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, device_init, ip_input);
geiineuville 0:83cf97c10b63 63 netif->hostname = (char *)this->hostname;
geiineuville 0:83cf97c10b63 64 netif_set_default(netif);
geiineuville 0:83cf97c10b63 65 if(!dhcp) {
geiineuville 0:83cf97c10b63 66 netif_set_up(netif);
geiineuville 0:83cf97c10b63 67 } else {
geiineuville 0:83cf97c10b63 68 dhcp_start(netif);
geiineuville 0:83cf97c10b63 69 }
geiineuville 0:83cf97c10b63 70
geiineuville 0:83cf97c10b63 71 tickARP.attach_us( &etharp_tmr, ARP_TMR_INTERVAL * 1000);
geiineuville 0:83cf97c10b63 72 //eth_tick.attach_us<NetServer>(this,&emac_tmr, TCP_FAST_INTERVAL * 1000);
geiineuville 0:83cf97c10b63 73 dns_tick.attach_us(&dns_tmr, DNS_TMR_INTERVAL * 1000);
geiineuville 0:83cf97c10b63 74 if(dhcp) {
geiineuville 0:83cf97c10b63 75 dhcp_coarse.attach_us(&dhcp_coarse_tmr, DHCP_COARSE_TIMER_MSECS * 1000);
geiineuville 0:83cf97c10b63 76 dhcp_fine.attach_us(&dhcp_fine_tmr, DHCP_FINE_TIMER_MSECS * 1000);
geiineuville 0:83cf97c10b63 77 }
geiineuville 0:83cf97c10b63 78 }
geiineuville 0:83cf97c10b63 79
geiineuville 0:83cf97c10b63 80 void NetServer::setUp() const {
geiineuville 0:83cf97c10b63 81 netif_set_up(netif);
geiineuville 0:83cf97c10b63 82 }
geiineuville 0:83cf97c10b63 83
geiineuville 0:83cf97c10b63 84 void NetServer::setDown() const {
geiineuville 0:83cf97c10b63 85 netif_set_down(netif);
geiineuville 0:83cf97c10b63 86 }
geiineuville 0:83cf97c10b63 87
geiineuville 0:83cf97c10b63 88 int NetServer::isUp() const {
geiineuville 0:83cf97c10b63 89 return netif_is_up(netif);
geiineuville 0:83cf97c10b63 90 }
geiineuville 0:83cf97c10b63 91
geiineuville 0:83cf97c10b63 92 void NetServer::waitUntilReady() {
geiineuville 0:83cf97c10b63 93 while(!netif_is_up(netif)) {
geiineuville 0:83cf97c10b63 94 _poll();
geiineuville 0:83cf97c10b63 95 wait_ms(1);
geiineuville 0:83cf97c10b63 96 }
geiineuville 0:83cf97c10b63 97 ipaddr = netif->ip_addr;
geiineuville 0:83cf97c10b63 98 printf("IP: %hhu.%hhu.%hhu.%hhu\n", (ipaddr.addr)&0xFF, (ipaddr.addr>>8)&0xFF, (ipaddr.addr>>16)&0xFF, (ipaddr.addr>>24)&0xFF);
geiineuville 0:83cf97c10b63 99 }
geiineuville 0:83cf97c10b63 100
geiineuville 0:83cf97c10b63 101 TCPCallbackListener *NetServer::bindTCPPort(u16_t port, err_t (*accept)(TCPCallbackListener *, struct tcp_pcb *, err_t)) const {
geiineuville 0:83cf97c10b63 102 TCPCallbackListener *listener = new TCPCallbackListener(port, accept);
geiineuville 0:83cf97c10b63 103 listener->bind();
geiineuville 0:83cf97c10b63 104 return listener;
geiineuville 0:83cf97c10b63 105 }
geiineuville 0:83cf97c10b63 106
geiineuville 0:83cf97c10b63 107 void NetServer::free(TCPItem *item) const {
geiineuville 0:83cf97c10b63 108 del->push_back(item);
geiineuville 0:83cf97c10b63 109 }
geiineuville 0:83cf97c10b63 110
geiineuville 0:83cf97c10b63 111 int NetServer::time() {
geiineuville 0:83cf97c10b63 112 return NetServer::get()->_time.read_ms();
geiineuville 0:83cf97c10b63 113 }