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 .
lwip/Core/NetServer.cpp@0:83cf97c10b63, 2011-09-05 (annotated)
- 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?
User | Revision | Line number | New 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( ðarp_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 | } |